aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2020-07-18 13:53:15 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2020-07-18 13:53:15 +0200
commitffe3c2ae0db6fed0f2b08b71bfa69f3d3df3bb1f (patch)
treecc7d9f74a43215c5d8e3965a2bfc2aea5867a7a0
parent45aa2516b2fc675df7049bc9ed713600c95b6423 (diff)
parent82731d0d3d8bfe9e56f89466991f13c037f3a61e (diff)
downloaddragonfireclient-ffe3c2ae0db6fed0f2b08b71bfa69f3d3df3bb1f.tar.xz
Update to minetest 5.4.0-dev
-rw-r--r--.github/workflows/build.yml289
-rw-r--r--.github/workflows/cpp_lint.yml54
-rw-r--r--.github/workflows/lua_lint.yml32
-rw-r--r--.gitignore29
-rw-r--r--.gitlab-ci.yml134
-rw-r--r--.travis.yml98
-rw-r--r--CMakeLists.txt14
-rw-r--r--Dockerfile81
-rw-r--r--LICENSE.txt6
-rw-r--r--README.md14
-rw-r--r--build/android/.gitignore11
-rw-r--r--build/android/Makefile763
-rw-r--r--build/android/app/build.gradle111
-rw-r--r--build/android/app/src/main/AndroidManifest.xml (renamed from build/android/src/main/AndroidManifest.xml)45
-rw-r--r--build/android/app/src/main/java/net/minetest/minetest/CopyZipTask.java82
-rw-r--r--build/android/app/src/main/java/net/minetest/minetest/GameActivity.java126
-rw-r--r--build/android/app/src/main/java/net/minetest/minetest/InputDialogActivity.java98
-rw-r--r--build/android/app/src/main/java/net/minetest/minetest/MainActivity.java153
-rw-r--r--build/android/app/src/main/java/net/minetest/minetest/UnzipService.java157
-rw-r--r--build/android/app/src/main/res/drawable/background.png (renamed from build/android/src/main/res/drawable/background.png)bin83 -> 83 bytes
-rw-r--r--build/android/app/src/main/res/drawable/bg.xml (renamed from build/android/src/main/res/drawable/bg.xml)2
-rw-r--r--build/android/app/src/main/res/layout/activity_main.xml30
-rw-r--r--build/android/app/src/main/res/mipmap/ic_launcher.png (renamed from build/android/src/main/res/mipmap/ic_launcher.png)bin5780 -> 5780 bytes
-rw-r--r--build/android/app/src/main/res/values/strings.xml10
-rw-r--r--build/android/app/src/main/res/values/styles.xml22
-rw-r--r--build/android/build.gradle175
-rw-r--r--build/android/gradle.properties11
-rw-r--r--build/android/gradle/wrapper/gradle-wrapper.jarbin54731 -> 55616 bytes
-rw-r--r--build/android/gradle/wrapper/gradle-wrapper.properties3
-rwxr-xr-xbuild/android/gradlew22
-rw-r--r--build/android/gradlew.bat18
-rw-r--r--build/android/jni/Android.mk446
-rw-r--r--build/android/jni/Application.mk9
-rw-r--r--build/android/jni/Deps.mk7
-rw-r--r--build/android/jni/Irrlicht.mk8
-rw-r--r--build/android/native/build.gradle59
-rw-r--r--build/android/native/jni/Android.mk219
-rw-r--r--build/android/native/jni/Application.mk32
-rw-r--r--build/android/native/src/main/AndroidManifest.xml1
-rw-r--r--build/android/patches/irrlicht-back_button.patch20
-rw-r--r--build/android/patches/irrlicht-native_activity.patch13
-rw-r--r--build/android/patches/irrlicht-texturehack.patch240
-rw-r--r--build/android/patches/irrlicht-touchcount.patch30
-rw-r--r--build/android/patches/libvorbis-libogg-fpu.patch37
-rw-r--r--build/android/patches/openssl_arch.patch13
-rw-r--r--build/android/settings.gradle1
-rw-r--r--build/android/src/main/java/net.minetest.minetest/MainActivity.java77
-rw-r--r--build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java371
-rw-r--r--build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java87
-rw-r--r--build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java108
-rw-r--r--build/android/src/main/res/layout/assetcopy.xml24
-rw-r--r--build/android/src/main/res/values-v21/styles.xml17
-rw-r--r--build/android/src/main/res/values/strings.xml5
-rw-r--r--build/android/src/main/res/values/styles.xml14
-rw-r--r--builtin/common/misc_helpers.lua15
-rw-r--r--builtin/common/serialize.lua11
-rw-r--r--builtin/common/tests/serialize_spec.lua12
-rw-r--r--builtin/common/tests/vector_spec.lua142
-rw-r--r--builtin/common/vector.lua93
-rw-r--r--builtin/fstk/dialog.lua19
-rw-r--r--builtin/fstk/ui.lua2
-rw-r--r--builtin/game/auth.lua3
-rw-r--r--builtin/game/chat.lua126
-rw-r--r--builtin/game/constants.lua2
-rw-r--r--builtin/game/deprecated.lua16
-rw-r--r--builtin/game/falling.lua263
-rw-r--r--builtin/game/features.lua1
-rw-r--r--builtin/game/item.lua10
-rw-r--r--builtin/game/item_entity.lua115
-rw-r--r--builtin/game/misc.lua6
-rw-r--r--builtin/game/register.lua2
-rw-r--r--builtin/game/statbars.lua40
-rw-r--r--builtin/init.lua1
-rw-r--r--builtin/mainmenu/async_event.lua (renamed from builtin/common/async_event.lua)10
-rw-r--r--builtin/mainmenu/dlg_config_world.lua95
-rw-r--r--builtin/mainmenu/dlg_contentstore.lua313
-rw-r--r--builtin/mainmenu/dlg_create_world.lua341
-rw-r--r--builtin/mainmenu/init.lua4
-rw-r--r--builtin/mainmenu/tab_credits.lua92
-rw-r--r--builtin/mainmenu/tab_local.lua65
-rw-r--r--builtin/settingtypes.txt107
-rw-r--r--client/shaders/nodes_shader/opengl_vertex.glsl4
-rw-r--r--client/shaders/object_shader/opengl_fragment.glsl39
-rw-r--r--client/shaders/object_shader/opengl_vertex.glsl11
-rw-r--r--client/shaders/wielded_shader/opengl_fragment.glsl127
-rw-r--r--client/shaders/wielded_shader/opengl_vertex.glsl32
-rw-r--r--cmake/Modules/FindGettextLib.cmake4
-rw-r--r--cmake/Modules/FindJson.cmake6
-rw-r--r--cmake/Modules/FindLuaJIT.cmake2
-rw-r--r--cmake/Modules/FindVorbis.cmake4
-rw-r--r--doc/Doxyfile.in12
-rw-r--r--doc/README.android75
-rw-r--r--doc/client_lua_api.txt82
-rw-r--r--doc/fst_api.txt7
-rw-r--r--doc/lua_api.txt518
-rw-r--r--doc/menu_lua_api.txt271
-rw-r--r--doc/minetest.66
-rw-r--r--doc/mkdocs/lua_highlight.patch12
-rw-r--r--doc/texture_packs.txt56
-rw-r--r--games/devtest/LICENSE.txt4
-rw-r--r--games/devtest/README.md52
-rw-r--r--games/devtest/game.conf2
-rw-r--r--games/devtest/menu/background.pngbin0 -> 152 bytes
-rw-r--r--games/devtest/menu/header.pngbin0 -> 404 bytes
-rw-r--r--games/devtest/menu/icon.pngbin0 -> 217 bytes
-rw-r--r--games/devtest/mods/basenodes/init.lua334
-rw-r--r--games/devtest/mods/basenodes/mod.conf2
-rw-r--r--games/devtest/mods/basenodes/textures/basenodes_dirt_with_grass_bottom.pngbin0 -> 187 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow.pngbin0 -> 166 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow_bottom.pngbin0 -> 177 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/basenodes_snow_sheet.pngbin0 -> 166 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_apple.pngbin0 -> 102 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_cobble.pngbin0 -> 340 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_desert_sand.pngbin0 -> 293 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_desert_stone.pngbin0 -> 584 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_dirt.pngbin0 -> 790 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_grass.pngbin0 -> 697 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_grass_side.pngbin0 -> 796 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_gravel.pngbin0 -> 171 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_ice.pngbin0 -> 369 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_junglegrass.pngbin0 -> 201 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_jungleleaves.pngbin0 -> 399 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_jungletree.pngbin0 -> 730 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_jungletree_top.pngbin0 -> 714 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_lava.png (renamed from games/minimal/mods/default/textures/default_lava.png)bin172 -> 172 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_lava_flowing.pngbin0 -> 91 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_leaves.pngbin0 -> 883 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_mossycobble.pngbin0 -> 574 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_pine_needles.pngbin0 -> 648 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_pine_tree.pngbin0 -> 604 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_pine_tree_top.pngbin0 -> 174 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_river_water.pngbin0 -> 496 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_river_water_flowing.pngbin0 -> 99 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_sand.pngbin0 -> 554 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_snow.pngbin0 -> 166 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_snow_side.pngbin0 -> 152 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_stone.pngbin0 -> 313 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_tree.pngbin0 -> 659 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_tree_top.pngbin0 -> 175 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_water.png (renamed from games/minimal/mods/default/textures/default_water.png)bin302 -> 302 bytes
-rw-r--r--games/devtest/mods/basenodes/textures/default_water_flowing.pngbin0 -> 115 bytes
-rw-r--r--games/devtest/mods/basetools/.sounds/default_grass_footstep.1.ogg (renamed from games/minimal/mods/default/.sounds/default_grass_footstep.1.ogg)bin7014 -> 7014 bytes
-rw-r--r--games/devtest/mods/basetools/init.lua296
-rw-r--r--games/devtest/mods/basetools/mod.conf2
-rw-r--r--games/devtest/mods/basetools/sounds/default_break_glass.1.ogg (renamed from games/minimal/mods/default/sounds/default_break_glass.1.ogg)bin11130 -> 11130 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_break_glass.2.ogg (renamed from games/minimal/mods/default/sounds/default_break_glass.2.ogg)bin16058 -> 16058 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_break_glass.3.ogg (renamed from games/minimal/mods/default/sounds/default_break_glass.3.ogg)bin12257 -> 12257 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_chest_close.ogg (renamed from games/minimal/mods/default/sounds/default_chest_close.ogg)bin10768 -> 10768 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_chest_open.ogg (renamed from games/minimal/mods/default/sounds/default_chest_open.ogg)bin11092 -> 11092 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_cool_lava.1.ogg (renamed from games/minimal/mods/default/sounds/default_cool_lava.1.ogg)bin9583 -> 9583 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_cool_lava.2.ogg (renamed from games/minimal/mods/default/sounds/default_cool_lava.2.ogg)bin7977 -> 7977 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_cool_lava.3.ogg (renamed from games/minimal/mods/default/sounds/default_cool_lava.3.ogg)bin6499 -> 6499 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dig_choppy.ogg (renamed from games/minimal/mods/default/sounds/default_dig_choppy.ogg)bin6794 -> 6794 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dig_cracky.ogg (renamed from games/minimal/mods/default/sounds/default_dig_cracky.ogg)bin6628 -> 6628 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dig_crumbly.ogg (renamed from games/minimal/mods/default/sounds/default_dig_crumbly.ogg)bin7567 -> 7567 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dig_dig_immediate.ogg (renamed from games/minimal/mods/default/sounds/default_dig_dig_immediate.ogg)bin6714 -> 6714 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dig_metal.ogg (renamed from games/minimal/mods/default/sounds/default_dig_metal.ogg)bin5245 -> 5245 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dig_oddly_breakable_by_hand.ogg (renamed from games/minimal/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg)bin6940 -> 6940 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dig_snappy.ogg (renamed from games/minimal/mods/default/sounds/default_dig_snappy.ogg)bin7258 -> 7258 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dirt_footstep.1.ogg (renamed from games/minimal/mods/default/sounds/default_dirt_footstep.1.ogg)bin9155 -> 9155 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dirt_footstep.2.ogg (renamed from games/minimal/mods/default/sounds/default_dirt_footstep.2.ogg)bin7553 -> 7553 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dug_metal.1.ogg (renamed from games/minimal/mods/default/sounds/default_dug_metal.1.ogg)bin7076 -> 7076 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dug_metal.2.ogg (renamed from games/minimal/mods/default/sounds/default_dug_metal.2.ogg)bin7260 -> 7260 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dug_node.1.ogg (renamed from games/minimal/mods/default/sounds/default_dug_node.1.ogg)bin6630 -> 6630 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_dug_node.2.ogg (renamed from games/minimal/mods/default/sounds/default_dug_node.2.ogg)bin7863 -> 7863 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_glass_footstep.ogg (renamed from games/minimal/mods/default/sounds/default_glass_footstep.ogg)bin7094 -> 7094 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_grass_footstep.2.ogg (renamed from games/minimal/mods/default/sounds/default_grass_footstep.2.ogg)bin10164 -> 10164 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_grass_footstep.3.ogg (renamed from games/minimal/mods/default/sounds/default_grass_footstep.3.ogg)bin9989 -> 9989 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_gravel_footstep.1.ogg (renamed from games/minimal/mods/default/sounds/default_gravel_footstep.1.ogg)bin7326 -> 7326 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_gravel_footstep.2.ogg (renamed from games/minimal/mods/default/sounds/default_gravel_footstep.2.ogg)bin10136 -> 10136 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_gravel_footstep.3.ogg (renamed from games/minimal/mods/default/sounds/default_gravel_footstep.3.ogg)bin8086 -> 8086 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_gravel_footstep.4.ogg (renamed from games/minimal/mods/default/sounds/default_gravel_footstep.4.ogg)bin9017 -> 9017 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_hard_footstep.1.ogg (renamed from games/minimal/mods/default/sounds/default_hard_footstep.1.ogg)bin4915 -> 4915 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_hard_footstep.2.ogg (renamed from games/minimal/mods/default/sounds/default_hard_footstep.2.ogg)bin4922 -> 4922 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_hard_footstep.3.ogg (renamed from games/minimal/mods/default/sounds/default_hard_footstep.3.ogg)bin4919 -> 4919 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_item_smoke.ogg (renamed from games/minimal/mods/default/sounds/default_item_smoke.ogg)bin6651 -> 6651 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_metal_footstep.1.ogg (renamed from games/minimal/mods/default/sounds/default_metal_footstep.1.ogg)bin6847 -> 6847 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_metal_footstep.2.ogg (renamed from games/minimal/mods/default/sounds/default_metal_footstep.2.ogg)bin6926 -> 6926 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_metal_footstep.3.ogg (renamed from games/minimal/mods/default/sounds/default_metal_footstep.3.ogg)bin6970 -> 6970 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_place_node.1.ogg (renamed from games/minimal/mods/default/sounds/default_place_node.1.ogg)bin8584 -> 8584 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_place_node.2.ogg (renamed from games/minimal/mods/default/sounds/default_place_node.2.ogg)bin8644 -> 8644 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_place_node.3.ogg (renamed from games/minimal/mods/default/sounds/default_place_node.3.ogg)bin8846 -> 8846 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_place_node_hard.1.ogg (renamed from games/minimal/mods/default/sounds/default_place_node_hard.1.ogg)bin6578 -> 6578 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_place_node_hard.2.ogg (renamed from games/minimal/mods/default/sounds/default_place_node_hard.2.ogg)bin5623 -> 5623 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_place_node_metal.1.ogg (renamed from games/minimal/mods/default/sounds/default_place_node_metal.1.ogg)bin7518 -> 7518 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_place_node_metal.2.ogg (renamed from games/minimal/mods/default/sounds/default_place_node_metal.2.ogg)bin7854 -> 7854 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_sand_footstep.1.ogg (renamed from games/minimal/mods/default/sounds/default_sand_footstep.1.ogg)bin11897 -> 11897 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_sand_footstep.2.ogg (renamed from games/minimal/mods/default/sounds/default_sand_footstep.2.ogg)bin9228 -> 9228 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_snow_footstep.1.ogg (renamed from games/minimal/mods/default/sounds/default_snow_footstep.1.ogg)bin7159 -> 7159 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_snow_footstep.2.ogg (renamed from games/minimal/mods/default/sounds/default_snow_footstep.2.ogg)bin8726 -> 8726 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_snow_footstep.3.ogg (renamed from games/minimal/mods/default/sounds/default_snow_footstep.3.ogg)bin8722 -> 8722 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_snow_footstep.4.ogg (renamed from games/minimal/mods/default/sounds/default_snow_footstep.4.ogg)bin6795 -> 6795 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_snow_footstep.5.ogg (renamed from games/minimal/mods/default/sounds/default_snow_footstep.5.ogg)bin8126 -> 8126 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_tool_breaks.1.ogg (renamed from games/minimal/mods/default/sounds/default_tool_breaks.1.ogg)bin6019 -> 6019 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_tool_breaks.2.ogg (renamed from games/minimal/mods/default/sounds/default_tool_breaks.2.ogg)bin8440 -> 8440 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_tool_breaks.3.ogg (renamed from games/minimal/mods/default/sounds/default_tool_breaks.3.ogg)bin6875 -> 6875 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_water_footstep.1.ogg (renamed from games/minimal/mods/default/sounds/default_water_footstep.1.ogg)bin31719 -> 31719 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_water_footstep.2.ogg (renamed from games/minimal/mods/default/sounds/default_water_footstep.2.ogg)bin29335 -> 29335 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_water_footstep.3.ogg (renamed from games/minimal/mods/default/sounds/default_water_footstep.3.ogg)bin32107 -> 32107 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_water_footstep.4.ogg (renamed from games/minimal/mods/default/sounds/default_water_footstep.4.ogg)bin3974 -> 3974 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_wood_footstep.1.ogg (renamed from games/minimal/mods/default/sounds/default_wood_footstep.1.ogg)bin5967 -> 5967 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/default_wood_footstep.2.ogg (renamed from games/minimal/mods/default/sounds/default_wood_footstep.2.ogg)bin5772 -> 5772 bytes
-rw-r--r--games/devtest/mods/basetools/sounds/player_damage.ogg (renamed from games/minimal/mods/default/sounds/player_damage.ogg)bin6176 -> 6176 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_dirtpick.pngbin0 -> 307 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_firesword.pngbin0 -> 190 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_icesword.pngbin0 -> 190 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_mesepick.png (renamed from games/minimal/mods/default/textures/default_tool_mesepick.png)bin155 -> 155 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_steelaxe.pngbin0 -> 131 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_steeldagger.pngbin0 -> 154 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_steelpick.pngbin0 -> 159 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_steelpick_l1.pngbin0 -> 190 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_steelpick_l2.pngbin0 -> 177 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_steelshears.pngbin0 -> 208 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_steelshovel.pngbin0 -> 140 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_steelsword.pngbin0 -> 163 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_stoneaxe.pngbin0 -> 130 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_stonepick.png (renamed from games/minimal/mods/default/textures/default_tool_stonepick.png)bin155 -> 155 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_stoneshears.pngbin0 -> 224 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_stoneshovel.pngbin0 -> 134 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_stonesword.pngbin0 -> 159 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_woodaxe.pngbin0 -> 121 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_woodpick.png (renamed from games/minimal/mods/default/textures/default_tool_woodpick.png)bin149 -> 149 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_woodshears.pngbin0 -> 212 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_woodshovel.pngbin0 -> 133 bytes
-rw-r--r--games/devtest/mods/basetools/textures/basetools_woodsword.pngbin0 -> 139 bytes
-rw-r--r--games/devtest/mods/bucket/init.lua26
-rw-r--r--games/devtest/mods/bucket/mod.conf2
-rw-r--r--games/devtest/mods/bucket/textures/bucket.pngbin0 -> 163 bytes
-rw-r--r--games/devtest/mods/bucket/textures/bucket_lava.pngbin0 -> 168 bytes
-rw-r--r--games/devtest/mods/bucket/textures/bucket_water.pngbin0 -> 168 bytes
-rw-r--r--games/devtest/mods/chest/init.lua27
-rw-r--r--games/devtest/mods/chest/mod.conf2
-rw-r--r--games/devtest/mods/chest/textures/chest_chest.pngbin0 -> 163 bytes
-rw-r--r--games/devtest/mods/chest_of_everything/init.lua135
-rw-r--r--games/devtest/mods/chest_of_everything/mod.conf2
-rw-r--r--games/devtest/mods/chest_of_everything/textures/chest_of_everything_chest.pngbin0 -> 210 bytes
-rw-r--r--games/devtest/mods/dignodes/init.lua37
-rw-r--r--games/devtest/mods/dignodes/mod.conf2
-rw-r--r--games/devtest/mods/dignodes/textures/dignodes_choppy.pngbin0 -> 187 bytes
-rw-r--r--games/devtest/mods/dignodes/textures/dignodes_cracky.pngbin0 -> 193 bytes
-rw-r--r--games/devtest/mods/dignodes/textures/dignodes_crumbly.pngbin0 -> 172 bytes
-rw-r--r--games/devtest/mods/dignodes/textures/dignodes_dig_immediate.pngbin0 -> 170 bytes
-rw-r--r--games/devtest/mods/dignodes/textures/dignodes_none.pngbin0 -> 201 bytes
-rw-r--r--games/devtest/mods/dignodes/textures/dignodes_rating1.pngbin0 -> 94 bytes
-rw-r--r--games/devtest/mods/dignodes/textures/dignodes_rating2.pngbin0 -> 92 bytes
-rw-r--r--games/devtest/mods/dignodes/textures/dignodes_rating3.pngbin0 -> 93 bytes
-rw-r--r--games/devtest/mods/experimental/commands.lua216
-rw-r--r--games/devtest/mods/experimental/detached.lua29
-rw-r--r--games/devtest/mods/experimental/init.lua23
-rw-r--r--games/devtest/mods/experimental/items.lua103
-rw-r--r--games/devtest/mods/experimental/mod.conf2
-rw-r--r--games/devtest/mods/experimental/textures/experimental_callback_node.pngbin0 -> 139 bytes
-rw-r--r--games/devtest/mods/experimental/textures/experimental_particle_sheet.pngbin0 -> 208 bytes
-rw-r--r--games/devtest/mods/experimental/textures/experimental_particle_vertical.pngbin0 -> 308 bytes
-rw-r--r--games/devtest/mods/experimental/textures/experimental_tester_tool_1.pngbin0 -> 138 bytes
-rw-r--r--games/devtest/mods/give_initial_stuff/init.lua37
-rw-r--r--games/devtest/mods/give_initial_stuff/mod.conf (renamed from games/minimal/mods/give_initial_stuff/mod.conf)2
-rw-r--r--games/devtest/mods/initial_message/init.lua9
-rw-r--r--games/devtest/mods/initial_message/mod.conf2
-rw-r--r--games/devtest/mods/mapgen/init.lua104
-rw-r--r--games/devtest/mods/mapgen/mod.conf3
-rw-r--r--games/devtest/mods/modchannels/init.lua14
-rw-r--r--games/devtest/mods/modchannels/mod.conf2
-rw-r--r--games/devtest/mods/player_api/README.txt (renamed from games/minimal/mods/player_api/README.txt)0
-rw-r--r--games/devtest/mods/player_api/api.lua (renamed from games/minimal/mods/player_api/api.lua)0
-rw-r--r--games/devtest/mods/player_api/init.lua (renamed from games/minimal/mods/player_api/init.lua)0
-rw-r--r--games/devtest/mods/player_api/license.txt (renamed from games/minimal/mods/player_api/license.txt)0
-rw-r--r--games/devtest/mods/player_api/mod.conf (renamed from games/minimal/mods/player_api/mod.conf)0
-rw-r--r--games/devtest/mods/player_api/models/character.b3d (renamed from games/minimal/mods/player_api/models/character.b3d)bin73433 -> 73433 bytes
-rw-r--r--games/devtest/mods/player_api/models/character.blend (renamed from games/minimal/mods/player_api/models/character.blend)bin632188 -> 632188 bytes
-rw-r--r--games/devtest/mods/player_api/models/character.png (renamed from games/minimal/mods/player_api/models/character.png)bin2754 -> 2754 bytes
-rw-r--r--games/devtest/mods/player_api/textures/player.png (renamed from games/minimal/mods/player_api/textures/player.png)bin142 -> 142 bytes
-rw-r--r--games/devtest/mods/player_api/textures/player_back.png (renamed from games/minimal/mods/player_api/textures/player_back.png)bin140 -> 140 bytes
-rw-r--r--games/devtest/mods/soundstuff/init.lua170
-rw-r--r--games/devtest/mods/soundstuff/mod.conf2
-rw-r--r--games/devtest/mods/soundstuff/sounds/soundstuff_mono.oggbin0 -> 4362 bytes
-rw-r--r--games/devtest/mods/soundstuff/textures/soundstuff_eat.pngbin0 -> 113 bytes
-rw-r--r--games/devtest/mods/soundstuff/textures/soundstuff_node_blank.pngbin0 -> 83 bytes
-rw-r--r--games/devtest/mods/soundstuff/textures/soundstuff_node_climbable.pngbin0 -> 189 bytes
-rw-r--r--games/devtest/mods/soundstuff/textures/soundstuff_node_dig.pngbin0 -> 126 bytes
-rw-r--r--games/devtest/mods/soundstuff/textures/soundstuff_node_dug.pngbin0 -> 132 bytes
-rw-r--r--games/devtest/mods/soundstuff/textures/soundstuff_node_fall.pngbin0 -> 100 bytes
-rw-r--r--games/devtest/mods/soundstuff/textures/soundstuff_node_footstep.pngbin0 -> 120 bytes
-rw-r--r--games/devtest/mods/soundstuff/textures/soundstuff_node_place.pngbin0 -> 115 bytes
-rw-r--r--games/devtest/mods/soundstuff/textures/soundstuff_node_place_failed.pngbin0 -> 143 bytes
-rw-r--r--games/devtest/mods/soundstuff/textures/soundstuff_node_sound.pngbin0 -> 116 bytes
-rw-r--r--games/devtest/mods/stairs/init.lua (renamed from games/minimal/mods/stairs/init.lua)50
-rw-r--r--games/devtest/mods/stairs/mod.conf (renamed from games/minimal/mods/stairs/mod.conf)2
-rw-r--r--games/devtest/mods/testentities/armor.lua41
-rw-r--r--games/devtest/mods/testentities/callbacks.lua75
-rw-r--r--games/devtest/mods/testentities/init.lua3
-rw-r--r--games/devtest/mods/testentities/mod.conf2
-rw-r--r--games/devtest/mods/testentities/textures/testentities_armorball.pngbin0 -> 561 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_callback.pngbin0 -> 156 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_callback_step.pngbin0 -> 166 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_cube1.pngbin0 -> 130 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_cube2.pngbin0 -> 128 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_cube3.pngbin0 -> 124 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_cube4.pngbin0 -> 126 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_cube5.pngbin0 -> 126 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_cube6.pngbin0 -> 126 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_dungeon_master.pngbin0 -> 2855 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_sprite.pngbin0 -> 120 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_upright_sprite1.pngbin0 -> 114 bytes
-rw-r--r--games/devtest/mods/testentities/textures/testentities_upright_sprite2.pngbin0 -> 119 bytes
-rw-r--r--games/devtest/mods/testentities/visuals.lua84
-rw-r--r--games/devtest/mods/testfood/init.lua24
-rw-r--r--games/devtest/mods/testfood/mod.conf2
-rw-r--r--games/devtest/mods/testfood/textures/testfood_bad.pngbin0 -> 126 bytes
-rw-r--r--games/devtest/mods/testfood/textures/testfood_bad2.pngbin0 -> 133 bytes
-rw-r--r--games/devtest/mods/testfood/textures/testfood_good.pngbin0 -> 129 bytes
-rw-r--r--games/devtest/mods/testfood/textures/testfood_good2.pngbin0 -> 145 bytes
-rw-r--r--games/devtest/mods/testformspec/callbacks.lua51
-rw-r--r--games/devtest/mods/testformspec/dummy_items.lua14
-rw-r--r--games/devtest/mods/testformspec/formspec.lua381
-rw-r--r--games/devtest/mods/testformspec/init.lua3
-rw-r--r--games/devtest/mods/testformspec/mod.conf2
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_animation.jpg (renamed from games/minimal/mods/test/textures/test_animation.jpg)bin4376 -> 4376 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_animation.pngbin0 -> 214 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_bg.pngbin0 -> 92 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_bg_9slice.pngbin0 -> 146 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_bg_9slice_hovered.pngbin0 -> 146 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_bg_9slice_pressed.pngbin0 -> 146 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_bg_hovered.pngbin0 -> 92 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_bg_pressed.pngbin0 -> 91 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_button_image.pngbin0 -> 146 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_hovered.pngbin0 -> 195 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_item.pngbin0 -> 182 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_node.pngbin0 -> 113 bytes
-rw-r--r--games/devtest/mods/testformspec/textures/testformspec_pressed.pngbin0 -> 165 bytes
-rw-r--r--games/devtest/mods/testnodes/README.md11
-rw-r--r--games/devtest/mods/testnodes/drawtypes.lua528
-rw-r--r--games/devtest/mods/testnodes/init.lua10
-rw-r--r--games/devtest/mods/testnodes/light.lua48
-rw-r--r--games/devtest/mods/testnodes/liquids.lua91
-rw-r--r--games/devtest/mods/testnodes/meshes.lua145
-rw-r--r--games/devtest/mods/testnodes/mod.conf2
-rw-r--r--games/devtest/mods/testnodes/models/testnodes_ocorner.obj23
-rw-r--r--games/devtest/mods/testnodes/models/testnodes_pyramid.obj24
-rw-r--r--games/devtest/mods/testnodes/nodeboxes.lua80
-rw-r--r--games/devtest/mods/testnodes/param2.lua168
-rw-r--r--games/devtest/mods/testnodes/properties.lua277
-rw-r--r--games/devtest/mods/testnodes/settingtypes.txt4
-rw-r--r--games/devtest/mods/testnodes/textures.lua73
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_1.pngbin0 -> 107 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_1g.pngbin0 -> 104 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_1w.pngbin0 -> 121 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_1wg.pngbin0 -> 122 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_2.pngbin0 -> 112 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_2g.pngbin0 -> 110 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_2w.pngbin0 -> 134 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_2wg.pngbin0 -> 135 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_3.pngbin0 -> 105 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_3g.pngbin0 -> 103 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_3w.pngbin0 -> 112 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_3wg.pngbin0 -> 112 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_4.pngbin0 -> 97 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_4g.pngbin0 -> 95 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_4w.pngbin0 -> 128 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_4wg.pngbin0 -> 128 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_5.pngbin0 -> 98 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_5g.pngbin0 -> 98 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_5w.pngbin0 -> 117 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_5wg.pngbin0 -> 117 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_6.pngbin0 -> 100 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_6g.pngbin0 -> 98 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_6w.pngbin0 -> 117 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_6wg.pngbin0 -> 117 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_airlike.pngbin0 -> 92 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_allfaces.pngbin0 -> 150 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_allfaces_optional.pngbin0 -> 150 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_alpha.pngbin0 -> 96 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_alpha128.pngbin0 -> 136 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_alpha191.pngbin0 -> 132 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_alpha64.pngbin0 -> 134 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_anim.pngbin0 -> 274 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_attached_bottom.pngbin0 -> 86 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_attached_side.pngbin0 -> 98 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_attached_top.pngbin0 -> 87 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_attachedw_bottom.pngbin0 -> 130 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_attachedw_side.pngbin0 -> 122 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_attachedw_top.pngbin0 -> 109 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_bouncy.pngbin0 -> 106 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_buildable_to.pngbin0 -> 89 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_climbable_nojump_side.pngbin0 -> 164 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_climbable_side.pngbin0 -> 150 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_damage.pngbin0 -> 108 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_damage_neg.pngbin0 -> 121 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_drowning.pngbin0 -> 127 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_fall_damage_minus.pngbin0 -> 116 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_fall_damage_plus.pngbin0 -> 117 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_fencelike.pngbin0 -> 90 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_firelike.pngbin0 -> 149 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_glasslike.pngbin0 -> 117 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_glasslike_detail.pngbin0 -> 167 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_glasslike_framed.pngbin0 -> 88 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_glasslike_framed2.pngbin0 -> 118 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_glasslike_framed_optional.pngbin0 -> 128 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_glasslikeliquid.pngbin0 -> 122 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light.pngbin0 -> 117 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_1.pngbin0 -> 158 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_10.pngbin0 -> 147 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_11.pngbin0 -> 149 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_12.pngbin0 -> 138 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_13.pngbin0 -> 137 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_14.pngbin0 -> 132 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_2.pngbin0 -> 152 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_3.pngbin0 -> 150 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_4.pngbin0 -> 157 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_5.pngbin0 -> 150 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_6.pngbin0 -> 154 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_7.pngbin0 -> 146 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_8.pngbin0 -> 139 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_light_9.pngbin0 -> 149 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_line_crossing.pngbin0 -> 130 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_line_curved.pngbin0 -> 123 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_line_straight.pngbin0 -> 115 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_line_t_junction.pngbin0 -> 128 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquid.pngbin0 -> 95 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidflowing.pngbin0 -> 132 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r0.pngbin0 -> 162 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r1.pngbin0 -> 160 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r2.pngbin0 -> 154 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r3.pngbin0 -> 155 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r4.pngbin0 -> 154 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r5.pngbin0 -> 155 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r6.pngbin0 -> 155 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r7.pngbin0 -> 157 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r8.pngbin0 -> 152 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidsource.pngbin0 -> 128 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidsource_r0.pngbin0 -> 149 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidsource_r1.pngbin0 -> 152 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidsource_r2.pngbin0 -> 152 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidsource_r3.pngbin0 -> 152 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidsource_r4.pngbin0 -> 155 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidsource_r5.pngbin0 -> 150 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidsource_r6.pngbin0 -> 148 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidsource_r7.pngbin0 -> 154 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_liquidsource_r8.pngbin0 -> 148 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_mesh_stripes.pngbin0 -> 150 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_mesh_stripes2.pngbin0 -> 144 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_mesh_stripes3.pngbin0 -> 85 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_mesh_stripes4.pngbin0 -> 93 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_node.pngbin0 -> 89 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_node_falling.pngbin0 -> 112 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_nodebox.pngbin0 -> 112 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_nojump_side.pngbin0 -> 94 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_nojump_top.pngbin0 -> 121 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_normal.pngbin0 -> 92 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_normal1.pngbin0 -> 114 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_normal2.pngbin0 -> 122 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_normal3.pngbin0 -> 114 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_normal4.pngbin0 -> 106 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_normal5.pngbin0 -> 109 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_normal6.pngbin0 -> 111 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_palette_facedir.pngbin0 -> 87 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_palette_full.pngbin0 -> 568 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_palette_wallmounted.pngbin0 -> 136 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike.pngbin0 -> 183 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_degrotate.pngbin0 -> 176 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_leveled.pngbin0 -> 163 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_meshoptions.pngbin0 -> 164 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted.pngbin0 -> 182 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base.pngbin0 -> 101 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_degrotate.pngbin0 -> 145 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_leveled.pngbin0 -> 127 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_meshoptions.pngbin0 -> 128 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_waving.pngbin0 -> 126 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_degrotate.pngbin0 -> 176 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_leveled.pngbin0 -> 162 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_meshoptions.pngbin0 -> 162 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_waving.pngbin0 -> 125 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_waving.pngbin0 -> 127 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_rail2_crossing.pngbin0 -> 246 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_rail2_curved.pngbin0 -> 253 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_rail2_straight.pngbin0 -> 246 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_rail2_t_junction.pngbin0 -> 254 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_rail_crossing.pngbin0 -> 151 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_rail_curved.pngbin0 -> 164 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_rail_straight.pngbin0 -> 133 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_rail_t_junction.pngbin0 -> 202 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_signlike.pngbin0 -> 150 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_slippery.pngbin0 -> 111 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_street_crossing.pngbin0 -> 137 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_street_curved.pngbin0 -> 115 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_street_straight.pngbin0 -> 101 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_street_t_junction.pngbin0 -> 126 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_sunlight_filter.pngbin0 -> 113 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_torchlike_ceiling.pngbin0 -> 157 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_torchlike_floor.pngbin0 -> 141 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_torchlike_wall.pngbin0 -> 158 bytes
-rw-r--r--games/devtest/mods/testpathfinder/README.md15
-rw-r--r--games/devtest/mods/testpathfinder/init.lua132
-rw-r--r--games/devtest/mods/testpathfinder/mod.conf2
-rw-r--r--games/devtest/mods/testpathfinder/textures/testpathfinder_testpathfinder.pngbin0 -> 159 bytes
-rw-r--r--games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint.pngbin0 -> 99 bytes
-rw-r--r--games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_end.pngbin0 -> 147 bytes
-rw-r--r--games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_start.pngbin0 -> 139 bytes
-rw-r--r--games/devtest/mods/testtools/README.md99
-rw-r--r--games/devtest/mods/testtools/init.lua692
-rw-r--r--games/devtest/mods/testtools/mod.conf2
-rw-r--r--games/devtest/mods/testtools/textures/testtools_entity_rotator.pngbin0 -> 151 bytes
-rw-r--r--games/devtest/mods/testtools/textures/testtools_entity_scaler.pngbin0 -> 182 bytes
-rw-r--r--games/devtest/mods/testtools/textures/testtools_entity_spawner.pngbin0 -> 189 bytes
-rw-r--r--games/devtest/mods/testtools/textures/testtools_falling_node_tool.pngbin0 -> 140 bytes
-rw-r--r--games/devtest/mods/testtools/textures/testtools_node_setter.pngbin0 -> 146 bytes
-rw-r--r--games/devtest/mods/testtools/textures/testtools_object_attacher.pngbin0 -> 173 bytes
-rw-r--r--games/devtest/mods/testtools/textures/testtools_object_editor.pngbin0 -> 180 bytes
-rw-r--r--games/devtest/mods/testtools/textures/testtools_object_mover.pngbin0 -> 175 bytes
-rw-r--r--games/devtest/mods/testtools/textures/testtools_param2tool.pngbin0 -> 127 bytes
-rw-r--r--games/devtest/mods/testtools/textures/testtools_remover.pngbin0 -> 129 bytes
-rw-r--r--games/devtest/mods/tiled/init.lua33
-rw-r--r--games/devtest/mods/tiled/mod.conf3
-rw-r--r--games/devtest/mods/tiled/textures/tiled_tiled.pngbin0 -> 410 bytes
-rw-r--r--games/devtest/mods/unittests/crafting.lua120
-rw-r--r--games/devtest/mods/unittests/crafting_prepare.lua88
-rw-r--r--games/devtest/mods/unittests/init.lua16
-rw-r--r--games/devtest/mods/unittests/mod.conf2
-rw-r--r--games/devtest/mods/unittests/player.lua (renamed from games/minimal/mods/test/player.lua)54
-rw-r--r--games/devtest/mods/unittests/random.lua10
-rw-r--r--games/devtest/mods/unittests/textures/unittests_coal_lump.pngbin0 -> 160 bytes
-rw-r--r--games/devtest/mods/unittests/textures/unittests_iron_lump.pngbin0 -> 154 bytes
-rw-r--r--games/devtest/mods/unittests/textures/unittests_repairable_tool.pngbin0 -> 160 bytes
-rw-r--r--games/devtest/mods/unittests/textures/unittests_steel_ingot.pngbin0 -> 159 bytes
-rw-r--r--games/devtest/mods/unittests/textures/unittests_stick.pngbin0 -> 147 bytes
-rw-r--r--games/devtest/mods/unittests/textures/unittests_torch.pngbin0 -> 155 bytes
-rw-r--r--games/devtest/mods/unittests/textures/unittests_unrepairable_tool.pngbin0 -> 157 bytes
-rw-r--r--games/devtest/mods/util_commands/init.lua137
-rw-r--r--games/devtest/mods/util_commands/mod.conf2
-rw-r--r--games/devtest/screenshot.pngbin0 -> 133364 bytes
-rw-r--r--games/devtest/settingtypes.txt37
-rw-r--r--games/minimal/game.conf2
-rw-r--r--games/minimal/menu/background.pngbin392 -> 0 bytes
-rw-r--r--games/minimal/menu/icon.pngbin218 -> 0 bytes
-rw-r--r--games/minimal/mods/bucket/init.lua95
-rw-r--r--games/minimal/mods/bucket/mod.conf3
-rw-r--r--games/minimal/mods/bucket/textures/bucket.pngbin182 -> 0 bytes
-rw-r--r--games/minimal/mods/bucket/textures/bucket_lava.pngbin183 -> 0 bytes
-rw-r--r--games/minimal/mods/bucket/textures/bucket_water.pngbin180 -> 0 bytes
-rw-r--r--games/minimal/mods/default/init.lua1840
-rw-r--r--games/minimal/mods/default/mapgen.lua137
-rw-r--r--games/minimal/mods/default/mod.conf2
-rw-r--r--games/minimal/mods/default/sounds/default_grass_footstep.1.oggbin10019 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_apple.pngbin109 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_book.pngbin157 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_bookshelf.pngbin515 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_brick.pngbin457 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_cactus_side.pngbin144 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_cactus_top.pngbin121 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_chest.pngbin263 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_clay.pngbin318 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_clay_brick.pngbin173 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_clay_lump.pngbin140 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_cloud.pngbin83 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_coal_lump.pngbin138 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_cobble.pngbin374 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_dirt.pngbin1586 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_fence.pngbin480 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_furnace_fire_bg.pngbin220 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_furnace_fire_fg.pngbin719 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_furnace_front.pngbin159 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_furnace_front_active.pngbin283 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_furnace_side.pngbin125 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_glass.pngbin210 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_grass.pngbin782 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_grass_footsteps.pngbin771 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_grass_side.pngbin878 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_gravel.pngbin172 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_iron_lump.pngbin140 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_junglegrass.pngbin237 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_ladder.pngbin368 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_lava_flowing_animated.pngbin7818 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_lava_source_animated.pngbin3145 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_leaves.pngbin1683 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_mese.pngbin129 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_mineral_coal.pngbin142 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_mineral_iron.pngbin922 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_mossycobble.pngbin603 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_nc_back.pngbin186 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_nc_front.pngbin204 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_nc_rb.pngbin137 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_nc_side.pngbin148 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_paper.pngbin139 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_papyrus.pngbin165 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_rail.pngbin437 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_rail_crossing.pngbin388 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_rail_curved.pngbin375 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_rail_t_junction.pngbin374 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_river_water.pngbin716 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_sand.pngbin762 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_sandstone.pngbin744 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_sapling.pngbin328 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_scorched_stuff.pngbin164 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_sign_wall.pngbin416 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_steel_block.pngbin128 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_steel_ingot.pngbin144 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_stick.pngbin120 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_stone.pngbin389 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tnt_bottom.pngbin98 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tnt_side.pngbin129 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tnt_top.pngbin146 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tool_steelaxe.pngbin140 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tool_steelpick.pngbin163 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tool_steelshovel.pngbin144 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tool_steelsword.pngbin169 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tool_stoneaxe.pngbin141 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tool_stoneshovel.pngbin144 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tool_stonesword.pngbin168 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tool_woodaxe.pngbin134 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tool_woodshovel.pngbin135 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tool_woodsword.pngbin147 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_torch.pngbin146 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_torch_on_ceiling.pngbin137 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_torch_on_floor.pngbin138 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tree.pngbin1445 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_tree_top.pngbin177 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/default_wood.pngbin1400 -> 0 bytes
-rw-r--r--games/minimal/mods/default/textures/treeprop.pngbin757 -> 0 bytes
-rw-r--r--games/minimal/mods/experimental/init.lua822
-rw-r--r--games/minimal/mods/experimental/mod.conf3
-rw-r--r--games/minimal/mods/experimental/modchannels.lua16
-rw-r--r--games/minimal/mods/experimental/textures/experimental_dummyball.pngbin399 -> 0 bytes
-rw-r--r--games/minimal/mods/experimental/textures/experimental_tester_tool_1.pngbin160 -> 0 bytes
-rw-r--r--games/minimal/mods/experimental/textures/experimental_tiled.pngbin1041 -> 0 bytes
-rw-r--r--games/minimal/mods/give_initial_stuff/init.lua16
-rw-r--r--games/minimal/mods/legacy/init.lua128
-rw-r--r--games/minimal/mods/legacy/mod.conf3
-rw-r--r--games/minimal/mods/legacy/textures/apple_iron.pngbin119 -> 0 bytes
-rw-r--r--games/minimal/mods/legacy/textures/cooked_rat.pngbin145 -> 0 bytes
-rw-r--r--games/minimal/mods/legacy/textures/dungeon_master.pngbin3007 -> 0 bytes
-rw-r--r--games/minimal/mods/legacy/textures/fireball.pngbin279 -> 0 bytes
-rw-r--r--games/minimal/mods/legacy/textures/firefly.pngbin99 -> 0 bytes
-rw-r--r--games/minimal/mods/legacy/textures/oerkki1.pngbin165 -> 0 bytes
-rw-r--r--games/minimal/mods/legacy/textures/oerkki1_damaged.pngbin210 -> 0 bytes
-rw-r--r--games/minimal/mods/legacy/textures/rat.pngbin141 -> 0 bytes
-rw-r--r--games/minimal/mods/test/crafting.lua71
-rw-r--r--games/minimal/mods/test/formspec.lua229
-rw-r--r--games/minimal/mods/test/init.lua15
-rw-r--r--games/minimal/mods/test/mod.conf3
-rw-r--r--games/minimal/mods/test/textures/test_animation.pngbin3161 -> 0 bytes
-rw-r--r--games/minimal/mods/test/textures/test_bg.pngbin972 -> 0 bytes
-rw-r--r--games/minimal/mods/test/textures/test_bg_9slice.pngbin1017 -> 0 bytes
-rw-r--r--games/minimal/mods/test/textures/test_bg_9slice_hovered.pngbin1016 -> 0 bytes
-rw-r--r--games/minimal/mods/test/textures/test_bg_9slice_pressed.pngbin1016 -> 0 bytes
-rw-r--r--games/minimal/mods/test/textures/test_bg_hovered.pngbin972 -> 0 bytes
-rw-r--r--games/minimal/mods/test/textures/test_bg_pressed.pngbin971 -> 0 bytes
-rw-r--r--minetest.conf.example171
-rw-r--r--misc/net.minetest.minetest.appdata.xml2
-rw-r--r--misc/net.minetest.minetest.desktop1
-rw-r--r--misc/winresource.rc6
-rw-r--r--po/ar/minetest.po616
-rw-r--r--po/be/minetest.po489
-rw-r--r--po/ca/minetest.po442
-rw-r--r--po/cs/minetest.po903
-rw-r--r--po/da/minetest.po476
-rw-r--r--po/de/minetest.po882
-rw-r--r--po/dv/minetest.po425
-rw-r--r--po/el/minetest.po429
-rw-r--r--po/eo/minetest.po813
-rw-r--r--po/es/minetest.po1051
-rw-r--r--po/et/minetest.po479
-rw-r--r--po/eu/minetest.po527
-rw-r--r--po/fil/minetest.po409
-rw-r--r--po/fr/minetest.po917
-rw-r--r--po/gd/minetest.po6635
-rw-r--r--po/gl/minetest.po6328
-rw-r--r--po/he/minetest.po419
-rw-r--r--po/hi/minetest.po6390
-rw-r--r--po/hu/minetest.po1727
-rw-r--r--po/id/minetest.po1193
-rw-r--r--po/it/minetest.po1116
-rw-r--r--po/ja/minetest.po753
-rw-r--r--po/ja_KS/minetest.po409
-rw-r--r--po/jbo/minetest.po785
-rw-r--r--po/kk/minetest.po507
-rw-r--r--po/kn/minetest.po425
-rw-r--r--po/ko/minetest.po476
-rw-r--r--po/ky/minetest.po419
-rw-r--r--po/lo/minetest.po409
-rw-r--r--po/lt/minetest.po441
-rw-r--r--po/lv/minetest.po6395
-rw-r--r--po/minetest.pot427
-rw-r--r--po/ms/minetest.po1058
-rw-r--r--po/ms_Arab/minetest.po6585
-rw-r--r--po/my/minetest.po409
-rw-r--r--po/nb/minetest.po1107
-rw-r--r--po/nl/minetest.po1556
-rw-r--r--po/nn/minetest.po436
-rw-r--r--po/pl/minetest.po539
-rw-r--r--po/pt/minetest.po551
-rw-r--r--po/pt_BR/minetest.po486
-rw-r--r--po/ro/minetest.po1514
-rw-r--r--po/ru/minetest.po594
-rw-r--r--po/sk/minetest.po6341
-rw-r--r--po/sl/minetest.po435
-rw-r--r--po/sr_Cyrl/minetest.po449
-rw-r--r--po/sv/minetest.po452
-rw-r--r--po/sw/minetest.po481
-rw-r--r--po/th/minetest.po571
-rw-r--r--po/tr/minetest.po798
-rw-r--r--po/uk/minetest.po485
-rw-r--r--po/vi/minetest.po428
-rw-r--r--po/zh_CN/minetest.po2116
-rw-r--r--po/zh_TW/minetest.po1473
-rw-r--r--src/CMakeLists.txt82
-rw-r--r--src/activeobject.h17
-rw-r--r--src/client/camera.cpp131
-rw-r--r--src/client/camera.h21
-rw-r--r--src/client/client.cpp99
-rw-r--r--src/client/client.h32
-rw-r--r--src/client/clientenvironment.cpp34
-rw-r--r--src/client/clientevent.h46
-rw-r--r--src/client/clientlauncher.cpp223
-rw-r--r--src/client/clientlauncher.h23
-rw-r--r--src/client/clientmedia.cpp10
-rw-r--r--src/client/clientmedia.h5
-rw-r--r--src/client/clientobject.h7
-rw-r--r--src/client/clientsimpleobject.h (renamed from src/clientsimpleobject.h)0
-rw-r--r--src/client/content_cao.cpp366
-rw-r--r--src/client/content_cao.h20
-rw-r--r--src/client/content_mapblock.cpp91
-rw-r--r--src/client/filecache.cpp8
-rw-r--r--src/client/filecache.h1
-rw-r--r--src/client/fontengine.cpp17
-rw-r--r--src/client/fontengine.h3
-rw-r--r--src/client/game.cpp245
-rw-r--r--src/client/game.h55
-rw-r--r--src/client/gameui.cpp27
-rw-r--r--src/client/hud.cpp308
-rw-r--r--src/client/hud.h15
-rw-r--r--src/client/imagefilters.cpp10
-rw-r--r--src/client/inputhandler.h10
-rw-r--r--src/client/localplayer.cpp8
-rw-r--r--src/client/localplayer.h5
-rw-r--r--src/client/mapblock_mesh.cpp93
-rw-r--r--src/client/mesh.cpp20
-rw-r--r--src/client/mesh.h6
-rw-r--r--src/client/particles.cpp390
-rw-r--r--src/client/particles.h60
-rw-r--r--src/client/render/core.cpp1
-rw-r--r--src/client/render/factory.h2
-rw-r--r--src/client/renderingengine.cpp104
-rw-r--r--src/client/shader.cpp6
-rw-r--r--src/client/sky.cpp49
-rw-r--r--src/client/sky.h2
-rw-r--r--src/client/sound_openal.cpp49
-rw-r--r--src/client/tile.cpp21
-rw-r--r--src/client/tile.h7
-rw-r--r--src/client/wieldmesh.cpp23
-rw-r--r--src/client/wieldmesh.h2
-rw-r--r--src/clientiface.cpp9
-rw-r--r--src/clientiface.h6
-rw-r--r--src/cmake_config.h.in2
-rw-r--r--src/collision.cpp301
-rw-r--r--src/collision.h3
-rw-r--r--src/config.h16
-rw-r--r--src/constants.h7
-rw-r--r--src/content/mods.cpp2
-rw-r--r--src/content/mods.h2
-rw-r--r--src/content/subgames.cpp2
-rw-r--r--src/content_sao.cpp1535
-rw-r--r--src/craftdef.cpp4
-rw-r--r--src/database/database-files.cpp2
-rw-r--r--src/database/database-leveldb.cpp210
-rw-r--r--src/database/database-leveldb.h32
-rw-r--r--src/database/database-postgresql.cpp179
-rw-r--r--src/database/database-postgresql.h24
-rw-r--r--src/database/database-sqlite3.cpp2
-rw-r--r--src/defaultsettings.cpp26
-rw-r--r--src/emerge.cpp71
-rw-r--r--src/emerge.h54
-rw-r--r--src/environment.cpp19
-rw-r--r--src/environment.h10
-rw-r--r--src/filesys.cpp6
-rw-r--r--src/gameparams.h19
-rw-r--r--src/genericobject.cpp207
-rw-r--r--src/genericobject.h87
-rw-r--r--src/gettext.cpp5
-rw-r--r--src/gui/CMakeLists.txt1
-rw-r--r--src/gui/StyleSpec.h168
-rw-r--r--src/gui/guiButton.cpp205
-rw-r--r--src/gui/guiButton.h36
-rw-r--r--src/gui/guiButtonImage.cpp107
-rw-r--r--src/gui/guiButtonImage.h28
-rw-r--r--src/gui/guiButtonItemImage.cpp15
-rw-r--r--src/gui/guiButtonItemImage.h11
-rw-r--r--src/gui/guiChatConsole.cpp4
-rw-r--r--src/gui/guiConfirmRegistration.cpp10
-rw-r--r--src/gui/guiConfirmRegistration.h4
-rw-r--r--src/gui/guiEngine.cpp4
-rw-r--r--src/gui/guiEngine.h1
-rw-r--r--src/gui/guiFormSpecMenu.cpp806
-rw-r--r--src/gui/guiFormSpecMenu.h49
-rw-r--r--src/gui/guiHyperText.cpp33
-rw-r--r--src/gui/guiHyperText.h2
-rw-r--r--src/gui/guiKeyChangeMenu.cpp14
-rw-r--r--src/gui/guiKeyChangeMenu.h5
-rw-r--r--src/gui/guiMainMenu.h1
-rw-r--r--src/gui/guiPasswordChange.cpp12
-rw-r--r--src/gui/guiPasswordChange.h5
-rw-r--r--src/gui/guiScrollContainer.cpp70
-rw-r--r--src/gui/guiScrollContainer.h60
-rw-r--r--src/gui/guiVolumeChange.cpp9
-rw-r--r--src/gui/guiVolumeChange.h7
-rw-r--r--src/gui/modalMenu.cpp145
-rw-r--r--src/gui/modalMenu.h28
-rw-r--r--src/gui/touchscreengui.cpp421
-rw-r--r--src/gui/touchscreengui.h55
-rw-r--r--src/hud.cpp2
-rw-r--r--src/hud.h7
-rw-r--r--src/inventory.cpp29
-rw-r--r--src/inventory.h4
-rw-r--r--src/inventorymanager.cpp2
-rw-r--r--src/itemdef.cpp59
-rw-r--r--src/itemdef.h5
-rw-r--r--src/log.cpp74
-rw-r--r--src/log.h52
-rw-r--r--src/main.cpp33
-rw-r--r--src/map.cpp58
-rw-r--r--src/map.h6
-rw-r--r--src/map_settings_manager.cpp11
-rw-r--r--src/mapgen/cavegen.cpp8
-rw-r--r--src/mapgen/cavegen.h8
-rw-r--r--src/mapgen/mapgen.cpp25
-rw-r--r--src/mapgen/mapgen.h23
-rw-r--r--src/mapgen/mapgen_carpathian.cpp3
-rw-r--r--src/mapgen/mapgen_carpathian.h2
-rw-r--r--src/mapgen/mapgen_flat.cpp3
-rw-r--r--src/mapgen/mapgen_flat.h2
-rw-r--r--src/mapgen/mapgen_fractal.cpp3
-rw-r--r--src/mapgen/mapgen_fractal.h2
-rw-r--r--src/mapgen/mapgen_singlenode.cpp2
-rw-r--r--src/mapgen/mapgen_singlenode.h2
-rw-r--r--src/mapgen/mapgen_v5.cpp3
-rw-r--r--src/mapgen/mapgen_v5.h2
-rw-r--r--src/mapgen/mapgen_v6.cpp21
-rw-r--r--src/mapgen/mapgen_v6.h4
-rw-r--r--src/mapgen/mapgen_v7.cpp105
-rw-r--r--src/mapgen/mapgen_v7.h23
-rw-r--r--src/mapgen/mapgen_valleys.cpp4
-rw-r--r--src/mapgen/mapgen_valleys.h2
-rw-r--r--src/mapgen/mg_biome.cpp65
-rw-r--r--src/mapgen/mg_biome.h20
-rw-r--r--src/mapgen/mg_decoration.cpp71
-rw-r--r--src/mapgen/mg_decoration.h18
-rw-r--r--src/mapgen/mg_ore.cpp125
-rw-r--r--src/mapgen/mg_ore.h42
-rw-r--r--src/mapgen/mg_schematic.cpp38
-rw-r--r--src/mapgen/mg_schematic.h11
-rw-r--r--src/mapgen/treegen.cpp51
-rw-r--r--src/mapgen/treegen.h5
-rw-r--r--src/mapnode.cpp25
-rw-r--r--src/mapnode.h6
-rw-r--r--src/network/clientopcodes.cpp21
-rw-r--r--src/network/clientpackethandler.cpp249
-rw-r--r--src/network/connection.cpp39
-rw-r--r--src/network/connection.h22
-rw-r--r--src/network/connectionthreads.cpp302
-rw-r--r--src/network/connectionthreads.h2
-rw-r--r--src/network/networkprotocol.h37
-rw-r--r--src/network/serveropcodes.cpp22
-rw-r--r--src/network/serverpackethandler.cpp640
-rw-r--r--src/nodedef.cpp127
-rw-r--r--src/nodedef.h30
-rw-r--r--src/noise.cpp5
-rw-r--r--src/objdef.cpp19
-rw-r--r--src/objdef.h19
-rw-r--r--src/object_properties.cpp11
-rw-r--r--src/object_properties.h2
-rw-r--r--src/particles.cpp63
-rw-r--r--src/particles.h79
-rw-r--r--src/pathfinder.cpp102
-rw-r--r--src/pathfinder.h17
-rw-r--r--src/player.h12
-rw-r--r--src/porting.cpp57
-rw-r--r--src/porting.h3
-rw-r--r--src/porting_android.cpp162
-rw-r--r--src/porting_android.h21
-rw-r--r--src/remoteplayer.cpp8
-rw-r--r--src/script/common/c_content.cpp203
-rw-r--r--src/script/common/c_content.h4
-rw-r--r--src/script/common/c_converter.cpp106
-rw-r--r--src/script/common/c_converter.h6
-rw-r--r--src/script/common/c_internal.cpp11
-rw-r--r--src/script/common/c_internal.h10
-rw-r--r--src/script/cpp_api/s_base.cpp15
-rw-r--r--src/script/cpp_api/s_base.h4
-rw-r--r--src/script/cpp_api/s_entity.cpp12
-rw-r--r--src/script/cpp_api/s_entity.h4
-rw-r--r--src/script/cpp_api/s_env.cpp2
-rw-r--r--src/script/cpp_api/s_node.cpp2
-rw-r--r--src/script/cpp_api/s_node.h2
-rw-r--r--src/script/cpp_api/s_player.cpp19
-rw-r--r--src/script/cpp_api/s_player.h5
-rw-r--r--src/script/cpp_api/s_security.cpp7
-rw-r--r--src/script/cpp_api/s_server.cpp14
-rw-r--r--src/script/cpp_api/s_server.h3
-rw-r--r--src/script/lua_api/l_base.cpp14
-rw-r--r--src/script/lua_api/l_base.h7
-rw-r--r--src/script/lua_api/l_camera.cpp59
-rw-r--r--src/script/lua_api/l_client.cpp46
-rw-r--r--src/script/lua_api/l_client.h6
-rw-r--r--src/script/lua_api/l_env.cpp312
-rw-r--r--src/script/lua_api/l_env.h8
-rw-r--r--src/script/lua_api/l_http.cpp51
-rw-r--r--src/script/lua_api/l_http.h7
-rw-r--r--src/script/lua_api/l_internal.h29
-rw-r--r--src/script/lua_api/l_inventory.cpp27
-rw-r--r--src/script/lua_api/l_item.cpp40
-rw-r--r--src/script/lua_api/l_item.h3
-rw-r--r--src/script/lua_api/l_localplayer.cpp75
-rw-r--r--src/script/lua_api/l_localplayer.h21
-rw-r--r--src/script/lua_api/l_mainmenu.cpp109
-rw-r--r--src/script/lua_api/l_mainmenu.h3
-rw-r--r--src/script/lua_api/l_mapgen.cpp82
-rw-r--r--src/script/lua_api/l_mapgen.h2
-rw-r--r--src/script/lua_api/l_nodemeta.cpp2
-rw-r--r--src/script/lua_api/l_nodetimer.cpp44
-rw-r--r--src/script/lua_api/l_nodetimer.h10
-rw-r--r--src/script/lua_api/l_noise.cpp14
-rw-r--r--src/script/lua_api/l_object.cpp78
-rw-r--r--src/script/lua_api/l_particles.cpp200
-rw-r--r--src/script/lua_api/l_particles_local.cpp159
-rw-r--r--src/script/lua_api/l_particles_local.h2
-rw-r--r--src/script/lua_api/l_server.cpp127
-rw-r--r--src/script/lua_api/l_server.h3
-rw-r--r--src/script/lua_api/l_util.cpp10
-rw-r--r--src/script/lua_api/l_util.h2
-rw-r--r--src/script/lua_api/l_vmanip.cpp6
-rw-r--r--src/script/scripting_client.cpp8
-rw-r--r--src/script/scripting_client.h3
-rw-r--r--src/script/scripting_mainmenu.cpp3
-rw-r--r--src/script/scripting_server.cpp4
-rw-r--r--src/server.cpp670
-rw-r--r--src/server.h106
-rw-r--r--src/server/CMakeLists.txt5
-rw-r--r--src/server/activeobjectmgr.cpp10
-rw-r--r--src/server/activeobjectmgr.h7
-rw-r--r--src/server/luaentity_sao.cpp541
-rw-r--r--src/server/luaentity_sao.h93
-rw-r--r--src/server/mods.cpp10
-rw-r--r--src/server/mods.h3
-rw-r--r--src/server/player_sao.cpp665
-rw-r--r--src/server/player_sao.h (renamed from src/content_sao.h)233
-rw-r--r--src/server/serveractiveobject.cpp (renamed from src/serverobject.cpp)60
-rw-r--r--src/server/serveractiveobject.h (renamed from src/serverobject.h)24
-rw-r--r--src/server/serverinventorymgr.cpp192
-rw-r--r--src/server/serverinventorymgr.h60
-rw-r--r--src/server/unit_sao.cpp345
-rw-r--r--src/server/unit_sao.h136
-rw-r--r--src/serverenvironment.cpp99
-rw-r--r--src/serverenvironment.h23
-rw-r--r--src/settings_translation_file.cpp48
-rw-r--r--src/skyparams.h10
-rw-r--r--src/staticobject.cpp2
-rw-r--r--src/texture_override.cpp120
-rw-r--r--src/texture_override.h72
-rw-r--r--src/tool.cpp2
-rw-r--r--src/translation.cpp13
-rw-r--r--src/translation.h5
-rw-r--r--src/unittest/CMakeLists.txt2
-rw-r--r--src/unittest/test_ban.cpp3
-rw-r--r--src/unittest/test_collision.cpp64
-rw-r--r--src/unittest/test_objdef.cpp76
-rw-r--r--src/unittest/test_player.cpp1
-rw-r--r--src/unittest/test_serveractiveobjectmgr.cpp18
-rw-r--r--src/unittest/test_servermodmanager.cpp10
-rw-r--r--src/util/CMakeLists.txt1
-rw-r--r--src/util/md32_common.h2
-rw-r--r--src/util/metricsbackend.cpp140
-rw-r--r--src/util/metricsbackend.h140
-rw-r--r--src/util/numeric.h10
-rw-r--r--src/util/serialize.cpp17
-rw-r--r--src/util/serialize.h4
-rw-r--r--src/util/string.cpp49
-rw-r--r--src/util/string.h4
-rw-r--r--src/version.cpp19
-rw-r--r--textures/base/pack/bubble_gone.pngbin0 -> 68 bytes
-rw-r--r--textures/base/pack/end_icon.pngbin0 -> 908 bytes
-rw-r--r--textures/base/pack/heart_gone.pngbin0 -> 68 bytes
-rw-r--r--textures/base/pack/next_icon.pngbin0 -> 714 bytes
-rw-r--r--textures/base/pack/plus.pngbin0 -> 763 bytes
-rw-r--r--textures/base/pack/prev_icon.pngbin0 -> 714 bytes
-rw-r--r--textures/base/pack/start_icon.pngbin0 -> 912 bytes
-rwxr-xr-xutil/buildbot/buildwin32.sh9
-rwxr-xr-xutil/buildbot/buildwin64.sh9
-rwxr-xr-xutil/bump_version.sh9
-rwxr-xr-xutil/ci/build.sh8
-rwxr-xr-xutil/ci/build_prometheus_cpp.sh13
-rw-r--r--util/ci/clang-format-whitelist.txt (renamed from util/travis/clang-format-whitelist.txt)14
-rwxr-xr-xutil/ci/clang-tidy.sh17
-rw-r--r--util/ci/common.sh29
-rw-r--r--util/ci/lint.sh (renamed from util/travis/lint.sh)2
-rwxr-xr-xutil/ci/run-clang-tidy.py (renamed from util/travis/run-clang-tidy.py)0
-rwxr-xr-xutil/reorder_translation_commits.py33
-rwxr-xr-xutil/test_multiplayer.sh2
-rwxr-xr-xutil/travis/before_install.sh29
-rwxr-xr-xutil/travis/clangtidy.sh28
-rw-r--r--util/travis/common.sh51
-rwxr-xr-xutil/travis/script.sh69
-rw-r--r--util/travis/toolchain_mingw.cmake.in18
-rw-r--r--util/wireshark/minetest.lua909
1002 files changed, 84450 insertions, 23415 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 000000000..ae359f5d8
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,289 @@
+name: build
+
+# build on c/cpp changes or workflow changes
+on:
+ push:
+ paths:
+ - 'lib/**.[ch]'
+ - 'lib/**.cpp'
+ - 'src/**.[ch]'
+ - 'src/**.cpp'
+ - '**/CMakeLists.txt'
+ - 'cmake/Modules/**'
+ - 'util/buildbot/**'
+ - 'util/ci/**'
+ - '.github/workflows/**.yml'
+ pull_request:
+ paths:
+ - 'lib/**.[ch]'
+ - 'lib/**.cpp'
+ - 'src/**.[ch]'
+ - 'src/**.cpp'
+ - '**/CMakeLists.txt'
+ - 'cmake/Modules/**'
+ - 'util/buildbot/**'
+ - 'util/ci/**'
+ - '.github/workflows/**.yml'
+
+jobs:
+ # This is our minor gcc compiler
+ gcc_6:
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install deps
+ run: |
+ sudo apt-get install g++-6 gcc-6 -qyy
+ source ./util/ci/common.sh
+ install_linux_deps
+
+ - name: Build
+ run: |
+ ./util/ci/build.sh
+ env:
+ CC: gcc-6
+ CXX: g++-6
+
+ - name: Test
+ run: |
+ ./bin/minetest --run-unittests
+
+ # This is the current gcc compiler (available in bionic)
+ gcc_8:
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install deps
+ run: |
+ sudo apt-get install g++-8 gcc-8 -qyy
+ source ./util/ci/common.sh
+ install_linux_deps
+
+ - name: Build
+ run: |
+ ./util/ci/build.sh
+ env:
+ CC: gcc-8
+ CXX: g++-8
+
+ - name: Test
+ run: |
+ ./bin/minetest --run-unittests
+
+ # This is our minor clang compiler
+ clang_3_9:
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install deps
+ run: |
+ sudo apt-get install clang-3.9 -qyy
+ source ./util/ci/common.sh
+ install_linux_deps
+
+ - name: Build
+ run: |
+ ./util/ci/build.sh
+ env:
+ CC: clang-3.9
+ CXX: clang++-3.9
+
+ - name: Test
+ run: |
+ ./bin/minetest --run-unittests
+
+ # This is the current clang version
+ clang_9:
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install deps
+ run: |
+ sudo apt-get install clang-9 valgrind -qyy
+ source ./util/ci/common.sh
+ install_linux_deps
+ env:
+ WITH_LUAJIT: 1
+
+ - name: Build
+ run: |
+ ./util/ci/build.sh
+ env:
+ CC: clang-9
+ CXX: clang++-9
+
+ - name: Test
+ run: |
+ ./bin/minetest --run-unittests
+
+ - name: Valgrind
+ run: |
+ valgrind --leak-check=full --leak-check-heuristics=all --undef-value-errors=no --error-exitcode=9 ./bin/minetest --run-unittests
+
+ # Build with prometheus-cpp (server-only)
+ clang_9_prometheus:
+ name: "clang_9 (PROMETHEUS=1)"
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install deps
+ run: |
+ sudo apt-get install clang-9 -qyy
+ source ./util/ci/common.sh
+ install_linux_deps
+
+ - name: Build prometheus-cpp
+ run: |
+ ./util/ci/build_prometheus_cpp.sh
+
+ - name: Build
+ run: |
+ ./util/ci/build.sh
+ env:
+ CC: clang-9
+ CXX: clang++-9
+ CMAKE_FLAGS: "-DENABLE_PROMETHEUS=1 -DBUILD_CLIENT=0"
+
+ - name: Test
+ run: |
+ ./bin/minetestserver --run-unittests
+
+ # Build without freetype (client-only)
+ clang_9_no_freetype:
+ name: "clang_9 (FREETYPE=0)"
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install deps
+ run: |
+ sudo apt-get install clang-9 -qyy
+ source ./util/ci/common.sh
+ install_linux_deps
+
+ - name: Build
+ run: |
+ ./util/ci/build.sh
+ env:
+ CC: clang-9
+ CXX: clang++-9
+ CMAKE_FLAGS: "-DENABLE_FREETYPE=0 -DBUILD_SERVER=0"
+
+ - name: Test
+ run: |
+ ./bin/minetest --run-unittests
+
+ docker:
+ name: "Docker image"
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+ - name: Build docker image
+ run: |
+ docker build .
+
+ win32:
+ name: "MinGW cross-compiler (32-bit)"
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install compiler
+ run: |
+ sudo apt-get install gettext -qyy
+ wget http://minetest.kitsunemimi.pw/mingw-w64-i686_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz
+ sudo tar -xaf mingw.tar.xz -C /usr
+
+ - name: Build
+ run: |
+ EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin32.sh winbuild
+ env:
+ NO_MINETEST_GAME: 1
+ NO_PACKAGE: 1
+
+ win64:
+ name: "MinGW cross-compiler (64-bit)"
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install compiler
+ run: |
+ sudo apt-get install gettext -qyy
+ wget http://minetest.kitsunemimi.pw/mingw-w64-x86_64_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz
+ sudo tar -xaf mingw.tar.xz -C /usr
+
+ - name: Build
+ run: |
+ EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin64.sh winbuild
+ env:
+ NO_MINETEST_GAME: 1
+ NO_PACKAGE: 1
+
+ msvc:
+ name: VS 2019 ${{ matrix.config.arch }}-${{ matrix.type }}
+ runs-on: windows-2019
+ env:
+ VCPKG_VERSION: c7ab9d3110813979a873b2dbac630a9ab79850dc
+# 2020.04
+ vcpkg_packages: irrlicht zlib curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit
+ strategy:
+ fail-fast: false
+ matrix:
+ config:
+ - {
+ arch: x86,
+ generator: "-G'Visual Studio 16 2019' -A Win32",
+ vcpkg_triplet: x86-windows
+ }
+ - {
+ arch: x64,
+ generator: "-G'Visual Studio 16 2019' -A x64",
+ vcpkg_triplet: x64-windows
+ }
+ type: [portable]
+# type: [portable, installer]
+# The installer type is working, but disabled, to save runner jobs.
+# Enable it, when working on the installer.
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Restore from cache and run vcpkg
+ uses: lukka/run-vcpkg@v2
+ with:
+ vcpkgArguments: ${{env.vcpkg_packages}}
+ vcpkgDirectory: '${{ github.workspace }}\vcpkg'
+ appendedCacheKey: ${{ matrix.config.vcpkg_triplet }}
+ vcpkgGitCommitId: ${{ env.VCPKG_VERSION }}
+ vcpkgTriplet: ${{ matrix.config.vcpkg_triplet }}
+
+ - name: CMake
+ run: |
+ cmake ${{matrix.config.generator}} `
+ -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" `
+ -DCMAKE_BUILD_TYPE=Release `
+ -DENABLE_POSTGRESQL=OFF `
+ -DRUN_IN_PLACE=${{ contains(matrix.type, 'portable') }} .
+
+ - name: Build
+ run: cmake --build . --config Release
+
+ - name: CPack
+ run: |
+ If ($env:TYPE -eq "installer")
+ {
+ cpack -G WIX -B "$env:GITHUB_WORKSPACE\Package"
+ }
+ ElseIf($env:TYPE -eq "portable")
+ {
+ cpack -G ZIP -B "$env:GITHUB_WORKSPACE\Package"
+ }
+ env:
+ TYPE: ${{matrix.type}}
+
+ - name: Package Clean
+ run: rm -r $env:GITHUB_WORKSPACE\Package\_CPack_Packages
+
+ - uses: actions/upload-artifact@v1
+ with:
+ name: msvc-${{ matrix.config.arch }}-${{ matrix.type }}
+ path: .\Package\
diff --git a/.github/workflows/cpp_lint.yml b/.github/workflows/cpp_lint.yml
new file mode 100644
index 000000000..1f97d105a
--- /dev/null
+++ b/.github/workflows/cpp_lint.yml
@@ -0,0 +1,54 @@
+name: cpp_lint
+
+# lint on c/cpp changes or workflow changes
+on:
+ push:
+ paths:
+ - 'lib/**.[ch]'
+ - 'lib/**.cpp'
+ - 'src/**.[ch]'
+ - 'src/**.cpp'
+ - '**/CMakeLists.txt'
+ - 'cmake/Modules/**'
+ - 'util/ci/**'
+ - '.github/workflows/**.yml'
+ pull_request:
+ paths:
+ - 'lib/**.[ch]'
+ - 'lib/**.cpp'
+ - 'src/**.[ch]'
+ - 'src/**.cpp'
+ - '**/CMakeLists.txt'
+ - 'cmake/Modules/**'
+ - 'util/ci/**'
+ - '.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_tidy:
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install deps
+ run: |
+ sudo apt-get install clang-tidy-9 -qyy
+ source ./util/ci/common.sh
+ install_linux_deps
+
+ - name: Run clang-tidy
+ run: |
+ ./util/ci/clang-tidy.sh
diff --git a/.github/workflows/lua_lint.yml b/.github/workflows/lua_lint.yml
new file mode 100644
index 000000000..738e5afff
--- /dev/null
+++ b/.github/workflows/lua_lint.yml
@@ -0,0 +1,32 @@
+name: lua_lint
+
+# Lint on lua changes on builtin or if workflow changed
+on:
+ push:
+ paths:
+ - 'builtin/**.lua'
+ - '.github/workflows/**.yml'
+ pull_request:
+ paths:
+ - 'builtin/**.lua'
+ - '.github/workflows/**.yml'
+
+jobs:
+ luacheck:
+ name: "Builtin Luacheck and Unit Tests"
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install luarocks
+ run: |
+ sudo apt-get install luarocks -qyy
+
+ - name: Install luarocks tools
+ run: |
+ luarocks install --local luacheck
+ luarocks install --local busted
+
+ - name: Run checks
+ run: |
+ $HOME/.luarocks/bin/luacheck builtin
+ $HOME/.luarocks/bin/busted builtin
diff --git a/.gitignore b/.gitignore
index 0f47efafa..78b047f32 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
*.swp
*.bak*
*.orig
+.DS_Store
# Vim
*.vim
# Kate
@@ -24,8 +25,11 @@ gtags.files
.idea
# Codelite
*.project
-# Visual Studio Code
+# Visual Studio Code & plugins
.vscode/
+build/.cmake/
+# Gradle
+.gradle
## Files related to Minetest development cycle
/*.patch
@@ -36,7 +40,7 @@ gtags.files
## Non-static Minetest directories or symlinks to these
/bin/
/games/*
-!/games/minimal/
+!/games/devtest/
/cache
/textures/*
!/textures/base/
@@ -72,17 +76,11 @@ doc/mkdocs/mkdocs.yml
## Build files
CMakeFiles
Makefile
-!build/android/Makefile
-build/android/path.cfg
-build/android/*.apk
-build/android/.externalNativeBuild
cmake_install.cmake
CMakeCache.txt
CPackConfig.cmake
CPackSourceConfig.cmake
src/test_config.h
-src/android_version.h
-src/android_version_githash.h
src/cmake_config.h
src/cmake_config_githash.h
src/unittest/test_world/world.mt
@@ -104,16 +102,5 @@ cmake_config.h
cmake_config_githash.h
CMakeDoxy*
compile_commands.json
-
-## Android build files
-build/android/src/main/assets
-build/android/build
-build/android/deps
-build/android/libs
-build/android/jni/lib
-build/android/jni/src
-build/android/src/main/jniLibs
-build/android/obj
-build/android/local.properties
-build/android/.gradle
-timestamp
+*.apk
+*.zip
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e4691284f..d03b7b601 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -12,7 +12,7 @@ variables:
MINETEST_GAME_REPO: "https://github.com/minetest/minetest_game.git"
CONTAINER_IMAGE: registry.gitlab.com/$CI_PROJECT_PATH
-.build_template: &build_definition
+.build_template:
stage: build
script:
- mkdir cmakebuild
@@ -27,7 +27,7 @@ variables:
paths:
- artifact/*
-.debpkg_template: &debpkg_template
+.debpkg_template:
stage: package
before_script:
- apt-get update -y
@@ -47,7 +47,7 @@ variables:
paths:
- ./*.deb
-.debpkg_install: &debpkg_install
+.debpkg_install:
stage: deploy
before_script:
- apt-get update -y
@@ -62,7 +62,7 @@ variables:
# Jessie
build:debian-8:
- <<: *build_definition
+ extends: .build_template
image: debian:8
before_script:
- echo "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main" > /etc/apt/sources.list.d/uptodate-toolchain.list
@@ -74,46 +74,70 @@ build:debian-8:
CXX: g++-6
package:debian-8:
+ extends: .debpkg_template
image: debian:8
dependencies:
- build:debian-8
variables:
LEVELDB_PKG: libleveldb1
- <<: *debpkg_template
deploy:debian-8:
+ extends: .debpkg_install
image: debian:8
dependencies:
- package:debian-8
variables:
LEVELDB_PKG: libleveldb1
- <<: *debpkg_install
# Stretch
build:debian-9:
- <<: *build_definition
+ 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
image: debian:9
dependencies:
- build:debian-9
variables:
LEVELDB_PKG: libleveldb1v5
- <<: *debpkg_template
deploy:debian-9:
+ extends: .debpkg_install
image: debian:9
dependencies:
- package:debian-9
variables:
LEVELDB_PKG: libleveldb1v5
- <<: *debpkg_install
+# Stretch
+
+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
+ image: debian:10
+ dependencies:
+ - build:debian-10
+ variables:
+ LEVELDB_PKG: libleveldb1d
+
+deploy:debian-10:
+ extends: .debpkg_install
+ image: debian:10
+ dependencies:
+ - package:debian-10
+ variables:
+ LEVELDB_PKG: libleveldb1d
##
## Ubuntu
##
@@ -121,7 +145,7 @@ deploy:debian-9:
# Trusty
build:ubuntu-14.04:
- <<: *build_definition
+ extends: .build_template
image: ubuntu:trusty
before_script:
- echo "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main" > /etc/apt/sources.list.d/uptodate-toolchain.list
@@ -133,102 +157,53 @@ build:ubuntu-14.04:
CXX: g++-6
package:ubuntu-14.04:
+ extends: .debpkg_template
image: ubuntu:trusty
dependencies:
- build:ubuntu-14.04
variables:
LEVELDB_PKG: libleveldb1
- <<: *debpkg_template
deploy:ubuntu-14.04:
+ extends: .debpkg_install
image: ubuntu:trusty
dependencies:
- package:ubuntu-14.04
variables:
LEVELDB_PKG: libleveldb1
- <<: *debpkg_install
# Xenial
build:ubuntu-16.04:
- <<: *build_definition
+ 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
image: ubuntu:xenial
dependencies:
- build:ubuntu-16.04
variables:
LEVELDB_PKG: libleveldb1v5
- <<: *debpkg_template
deploy:ubuntu-16.04:
+ extends: .debpkg_install
image: ubuntu:xenial
dependencies:
- package:ubuntu-16.04
variables:
LEVELDB_PKG: libleveldb1v5
- <<: *debpkg_install
-
-# Yakkety
-
-#build:ubuntu-16.10:
-# <<: *build_definition
-# image: ubuntu:yakkety
-# 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.10:
-# image: ubuntu:yakkety
-# dependencies:
-# - build:ubuntu-16.10
-# variables:
-# LEVELDB_PKG: libleveldb1v5
-# <<: *debpkg_template
-
-#deploy:ubuntu-16.10:
-# image: ubuntu:yakkety
-# dependencies:
-# - package:ubuntu-16.10
-# variables:
-# LEVELDB_PKG: libleveldb1v5
-# <<: *debpkg_install
-
-# Zesty
-
-#build:ubuntu-17.04:
-# <<: *build_definition
-# image: ubuntu:zesty
-# 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-17.04:
-# image: ubuntu:zesty
-# dependencies:
-# - build:ubuntu-17.04
-# variables:
-# LEVELDB_PKG: libleveldb1v5
-# <<: *debpkg_template
-
-#deploy:ubuntu-17.04:
-# image: ubuntu:zesty
-# dependencies:
-# - package:ubuntu-17.04
-# variables:
-# LEVELDB_PKG: libleveldb1v5
-# <<: *debpkg_install
##
## Fedora
##
+# Do we need to support this old version ?
build:fedora-24:
- <<: *build_definition
+ extends: .build_template
image: fedora:24
before_script:
- dnf -y install make automake gcc gcc-c++ kernel-devel cmake libcurl* openal* libvorbis* 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
@@ -238,17 +213,16 @@ build:fedora-24:
## Mingw for Windows
##
-.generic_win_template: &generic_win_template
+.generic_win_template:
image: ubuntu:bionic
before_script:
- apt-get update -y
- apt-get install -y wget xz-utils unzip git cmake gettext
- wget -q http://minetest.kitsunemimi.pw/mingw-w64-${WIN_ARCH}_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz
- - sed -e "s|%PREFIX%|${WIN_ARCH}-w64-mingw32|" -e "s|%ROOTPATH%|/usr/${WIN_ARCH}-w64-mingw32|" < util/travis/toolchain_mingw.cmake.in > ${TOOLCHAIN_OUTPUT}
- tar -xaf mingw.tar.xz -C /usr
-.build_win_template: &build_win_template
- <<: *generic_win_template
+.build_win_template:
+ extends: .generic_win_template
stage: build
artifacts:
when: on_success
@@ -256,8 +230,8 @@ build:fedora-24:
paths:
- build/*
-.package_win_template: &package_win_template
- <<: *generic_win_template
+.package_win_template:
+ extends: .generic_win_template
stage: package
script:
- cd build/minetest/_build
@@ -275,40 +249,36 @@ build:fedora-24:
- minetest-win-*/*
build:win32:
- <<: *build_win_template
+ extends: .build_win_template
script:
- ./util/buildbot/buildwin32.sh build
variables:
NO_PACKAGE: "1"
WIN_ARCH: "i686"
- TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw.cmake"
package:win32:
- <<: *package_win_template
+ extends: .package_win_template
dependencies:
- build:win32
variables:
NO_PACKAGE: "1"
WIN_ARCH: "i686"
- TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw.cmake"
build:win64:
- <<: *build_win_template
+ extends: .build_win_template
script:
- ./util/buildbot/buildwin64.sh build
variables:
NO_PACKAGE: "1"
WIN_ARCH: "x86_64"
- TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw64.cmake"
package:win64:
- <<: *package_win_template
+ extends: .package_win_template
dependencies:
- build:win64
variables:
NO_PACKAGE: "1"
WIN_ARCH: "x86_64"
- TOOLCHAIN_OUTPUT: "util/buildbot/toolchain_mingw64.cmake"
package:docker:
stage: package
@@ -325,9 +295,8 @@ package:docker:
pages:
stage: deploy
- image: python:3.7
+ image: python:3.8
before_script:
- - pip install pip==18.1
- pip install git+https://github.com/Python-Markdown/markdown.git
- pip install git+https://github.com/mkdocs/mkdocs.git
- pip install pygments
@@ -338,3 +307,4 @@ pages:
- public
only:
- master
+
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 7b224b549..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,98 +0,0 @@
-language: cpp
-before_install: ./util/travis/before_install.sh
-script: ./util/travis/script.sh
-os: linux
-dist: bionic
-group: edge
-notifications:
- email: false
-matrix:
- fast_finish: true
- include:
-
- - env: CLANG_FORMAT=clang-format-8
- compiler: clang
- os: linux
- addons:
- apt:
- packages: ['clang-format-8']
-
- - name: "Builtin Luacheck and Unit Tests"
- language: generic
- compiler: null
- os: linux
- addons:
- apt:
- packages:
- - luarocks
- before_install:
- - luarocks install --local luacheck
- - luarocks install --local busted
- script:
- - $HOME/.luarocks/bin/luacheck builtin
- - $HOME/.luarocks/bin/busted builtin
-
- - env: CLANG_TIDY=clang-tidy-8
- compiler: clang
- os: linux
- script: ./util/travis/clangtidy.sh
- addons:
- apt:
- packages: ['clang-tidy-8']
-
- - name: "MinGW cross-compiler (32-bit)"
- env: PLATFORM=Win32
- compiler: gcc
- os: linux
-
- - name: "MinGW cross-compiler (64-bit)"
- env: PLATFORM=Win64
- compiler: gcc
- os: linux
-
-# - env: PLATFORM=Unix
-# compiler: clang
-# os: osx
-# osx_image: xcode8
-
- - env: PLATFORM=Unix COMPILER=gcc-6
- compiler: gcc
- os: linux
- addons:
- apt:
- packages: ['gcc-6', 'g++-6']
-
- - env: PLATFORM=Unix COMPILER=gcc-8
- compiler: gcc
- os: linux
- addons:
- apt:
- packages: ['gcc-8', 'g++-8']
-
- - env: PLATFORM=Unix COMPILER=clang-3.9
- compiler: clang
- os: linux
- addons:
- apt:
- packages: ['clang-3.9']
-
- - env: PLATFORM=Unix COMPILER=clang-9
- compiler: clang
- os: linux
- addons:
- apt:
- packages: ['clang-9']
-
- - env: PLATFORM=Unix COMPILER=clang-9 FREETYPE=0
- compiler: clang
- os: linux
- addons:
- apt:
- packages: ['clang-9']
-
- - env: PLATFORM=Unix COMPILER=clang-9 VALGRIND=1
- compiler: clang
- os: linux
- addons:
- apt:
- packages: ['valgrind', 'clang-9']
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3f36037ef..69424793f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,7 +7,7 @@ endif()
# This can be read from ${PROJECT_NAME} after project() is called
project(minetest)
-set(PROJECT_NAME_CAPITALIZED "Minetest")
+set(PROJECT_NAME_CAPITALIZED "Dragonfire")
# Works only for cmake 3.1 and greater
set(CMAKE_CXX_STANDARD 11)
@@ -16,7 +16,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 2)
+set(VERSION_MINOR 4)
set(VERSION_PATCH 0)
set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
@@ -49,6 +49,7 @@ set(RUN_IN_PLACE ${DEFAULT_RUN_IN_PLACE} CACHE BOOL
set(BUILD_CLIENT TRUE CACHE BOOL "Build client")
set(BUILD_SERVER FALSE CACHE BOOL "Build server")
+set(BUILD_UNITTESTS TRUE CACHE BOOL "Build unittests")
set(WARN_ALL TRUE CACHE BOOL "Enable -Wall for Release build")
@@ -102,7 +103,7 @@ elseif(UNIX) # Linux, BSD etc
set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/share/applications")
set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/share/metainfo")
set(ICONDIR "${CMAKE_INSTALL_PREFIX}/share/icons")
- set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/locale")
+ set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/locale")
endif()
endif()
@@ -166,7 +167,7 @@ endif()
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/minetest_game" DESTINATION "${SHAREDIR}/games/"
COMPONENT "SUBGAME_MINETEST_GAME" OPTIONAL PATTERN ".git*" EXCLUDE )
-install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/minimal" DESTINATION "${SHAREDIR}/games/"
+install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/devtest" DESTINATION "${SHAREDIR}/games/"
COMPONENT "SUBGAME_MINIMAL" OPTIONAL PATTERN ".git*" EXCLUDE )
if(BUILD_CLIENT)
@@ -253,8 +254,8 @@ cpack_add_component(SUBGAME_MINETEST_GAME
)
cpack_add_component(SUBGAME_MINIMAL
- DISPLAY_NAME "Minimal development test"
- DESCRIPTION "A minimal subgame helping to develop the engine."
+ DISPLAY_NAME "Development Test"
+ DESCRIPTION "A minimal test game helping to develop the engine."
DISABLED #DISABLED does not mean it is disabled, and is just not selected by default.
GROUP "Subgames"
)
@@ -325,4 +326,3 @@ if(DOXYGEN_FOUND)
COMMENT "Generating API documentation with Doxygen" VERBATIM
)
endif()
-
diff --git a/Dockerfile b/Dockerfile
index 37b90e483..72343ab9c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,32 +1,59 @@
-FROM debian:stretch
+FROM alpine:3.11
-USER root
-RUN apt-get update -y && \
- apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev \
- libsqlite3-dev libcurl4-gnutls-dev zlib1g-dev libgmp-dev libjsoncpp-dev git
+ENV MINETEST_GAME_VERSION master
-COPY . /usr/src/minetest
+COPY .git /usr/src/minetest/.git
+COPY CMakeLists.txt /usr/src/minetest/CMakeLists.txt
+COPY README.md /usr/src/minetest/README.md
+COPY minetest.conf.example /usr/src/minetest/minetest.conf.example
+COPY builtin /usr/src/minetest/builtin
+COPY cmake /usr/src/minetest/cmake
+COPY doc /usr/src/minetest/doc
+COPY fonts /usr/src/minetest/fonts
+COPY lib /usr/src/minetest/lib
+COPY misc /usr/src/minetest/misc
+COPY po /usr/src/minetest/po
+COPY src /usr/src/minetest/src
+COPY textures /usr/src/minetest/textures
-RUN mkdir -p /usr/src/minetest/cmakebuild && cd /usr/src/minetest/cmakebuild && \
- cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE \
+WORKDIR /usr/src/minetest
+
+RUN apk add --no-cache git build-base irrlicht-dev cmake bzip2-dev libpng-dev \
+ jpeg-dev libxxf86vm-dev mesa-dev sqlite-dev libogg-dev \
+ libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev \
+ gmp-dev jsoncpp-dev postgresql-dev ca-certificates && \
+ git clone --depth=1 -b ${MINETEST_GAME_VERSION} https://github.com/minetest/minetest_game.git ./games/minetest_game && \
+ rm -fr ./games/minetest_game/.git
+
+WORKDIR /usr/src/
+RUN git clone --recursive https://github.com/jupp0r/prometheus-cpp/ && \
+ mkdir prometheus-cpp/build && \
+ cd prometheus-cpp/build && \
+ cmake .. \
+ -DCMAKE_INSTALL_PREFIX=/usr/local \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DENABLE_TESTING=0 && \
+ make -j2 && \
+ make install
+
+WORKDIR /usr/src/minetest
+RUN mkdir build && \
+ cd build && \
+ cmake .. \
+ -DCMAKE_INSTALL_PREFIX=/usr/local \
+ -DCMAKE_BUILD_TYPE=Release \
-DBUILD_SERVER=TRUE \
- -DBUILD_CLIENT=FALSE \
- -DENABLE_SYSTEM_JSONCPP=1 \
- .. && \
- make -j2 && \
- rm -Rf ../games/minetest_game && git clone --depth 1 https://github.com/minetest/minetest_game ../games/minetest_game && \
- rm -Rf ../games/minetest_game/.git && \
- make install
-
-FROM debian:stretch
-
-USER root
-RUN groupadd minetest && useradd -m -g minetest -d /var/lib/minetest minetest && \
- apt-get update -y && \
- apt-get -y install libcurl3-gnutls libjsoncpp1 liblua5.1-0 libluajit-5.1-2 libpq5 libsqlite3-0 \
- libstdc++6 zlib1g libc6 && \
- apt-get clean && rm -rf /var/cache/apt/archives/* && \
- rm -rf /var/lib/apt/lists/*
+ -DENABLE_PROMETHEUS=TRUE \
+ -DBUILD_UNITTESTS=FALSE \
+ -DBUILD_CLIENT=FALSE && \
+ make -j2 && \
+ make install
+
+FROM alpine:3.11
+
+RUN apk add --no-cache sqlite-libs curl gmp libstdc++ libgcc libpq && \
+ adduser -D minetest --uid 30000 -h /var/lib/minetest && \
+ chown -R minetest:minetest /var/lib/minetest
WORKDIR /var/lib/minetest
@@ -34,8 +61,8 @@ COPY --from=0 /usr/local/share/minetest /usr/local/share/minetest
COPY --from=0 /usr/local/bin/minetestserver /usr/local/bin/minetestserver
COPY --from=0 /usr/local/share/doc/minetest/minetest.conf.example /etc/minetest/minetest.conf
-USER minetest
+USER minetest:minetest
-EXPOSE 30000/udp
+EXPOSE 30000/udp 30000/tcp
CMD ["/usr/local/bin/minetestserver", "--config", "/etc/minetest/minetest.conf"]
diff --git a/LICENSE.txt b/LICENSE.txt
index 994e024c9..f5c51833b 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -21,6 +21,12 @@ ShadowNinja:
paramat:
textures/base/pack/menu_header.png
+ textures/base/pack/next_icon.png
+ textures/base/pack/prev_icon.png
+
+rubenwardy, paramat:
+ textures/base/pack/start_icon.png
+ textures/base/pack/end_icon.png
erlehmann:
misc/minetest-icon-24x24.png
diff --git a/README.md b/README.md
index 4d136b137..6a3c11f40 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,13 @@
Minetest
========
-[![Build Status](https://travis-ci.org/minetest/minetest.svg?branch=master)](https://travis-ci.org/minetest/minetest)
+![Build Status](https://github.com/minetest/minetest/workflows/build/badge.svg)
[![Translation status](https://hosted.weblate.org/widgets/minetest/-/svg-badge.svg)](https://hosted.weblate.org/engage/minetest/?utm_source=widget)
[![License](https://img.shields.io/badge/license-LGPLv2.1%2B-blue.svg)](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)
Minetest is a free open-source voxel game engine with easy modding and game creation.
-Copyright (C) 2010-2019 Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2010-2020 Perttu Ahola <celeron55@gmail.com>
and contributors (see source file comments and the version control log)
In case you downloaded the source code
@@ -69,15 +69,15 @@ Some can be changed in the key config dialog in the settings tab.
| J | Enable/disable fast mode (needs fast privilege) |
| H | Enable/disable noclip mode (needs noclip privilege) |
| E | Move fast in fast mode |
+| C | Cycle through camera modes |
+| V | Cycle through minimap modes |
+| Shift + V | Change minimap orientation |
| F1 | Hide/show HUD |
| F2 | Hide/show chat |
| F3 | Disable/enable fog |
| F4 | Disable/enable camera update (Mapblocks are not updated anymore when disabled, disabled in release builds) |
| F5 | Cycle through debug information screens |
| F6 | Cycle through profiler info screens |
-| F7 | Cycle through camera modes |
-| F9 | Cycle through minimap modes |
-| Shift + F9 | Change minimap orientation |
| F10 | Show/hide console |
| F12 | Take screenshot |
@@ -173,7 +173,7 @@ Download source (this is the URL to the latest of source repository, which might
git clone --depth 1 https://github.com/minetest/minetest.git
cd minetest
-Download minetest_game (otherwise only the "Minimal development test" game is available) using Git:
+Download minetest_game (otherwise only the "Development Test" game is available) using Git:
git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game
@@ -218,6 +218,7 @@ General options and their default values:
BUILD_CLIENT=TRUE - Build Minetest client
BUILD_SERVER=FALSE - Build Minetest server
+ BUILD_UNITTESTS=TRUE - Build unittest sources
CMAKE_BUILD_TYPE=Release - Type of build (Release vs. Debug)
Release - Release build
Debug - Debug build
@@ -235,6 +236,7 @@ General options and their default values:
ENABLE_SPATIAL=ON - Build with LibSpatial; Speeds up AreaStores
ENABLE_SOUND=ON - Build with OpenAL, libogg & libvorbis; in-game sounds
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
OPENGL_GL_PREFERENCE=LEGACY - Linux client build only; See CMake Policy CMP0072 for reference
diff --git a/build/android/.gitignore b/build/android/.gitignore
new file mode 100644
index 000000000..e0613f8b3
--- /dev/null
+++ b/build/android/.gitignore
@@ -0,0 +1,11 @@
+*.iml
+.externalNativeBuild
+.gradle
+app/build
+app/release
+app/src/main/assets
+build
+local.properties
+native/.*
+native/build
+native/deps
diff --git a/build/android/Makefile b/build/android/Makefile
deleted file mode 100644
index 9ec237a75..000000000
--- a/build/android/Makefile
+++ /dev/null
@@ -1,763 +0,0 @@
-# build options
-
-OS := $(shell uname)
-
-# compile with GPROF
-# GPROF = 1
-
-# build for build platform
-API = 14
-APP_PLATFORM = android-$(API)
-
-ANDR_ROOT = $(shell pwd)
-PROJ_ROOT = $(shell realpath $(ANDR_ROOT)/../..)
-APP_ROOT = $(ANDR_ROOT)/src/main
-
-VERSION_MAJOR := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
- grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' ')
-VERSION_MINOR := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
- grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | cut -f2 -d' ')
-VERSION_PATCH := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
- grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | cut -f2 -d' ')
-
-################################################################################
-# toolchain config for arm new processors
-################################################################################
-TARGET_HOST = arm-linux
-TARGET_ABI = armeabi-v7a
-TARGET_LIBDIR = armeabi-v7a
-TARGET_TOOLCHAIN = arm-linux-androideabi-
-TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfpv3 -O3
-TARGET_CXXFLAGS_ADDON = $(TARGET_CFLAGS_ADDON)
-TARGET_ARCH = armv7
-CROSS_CC = clang
-CROSS_CXX = clang++
-COMPILER_VERSION = clang
-HAVE_LEVELDB = 0
-
-################################################################################
-# toolchain config for little endian mips
-################################################################################
-#TARGET_HOST = mipsel-linux
-#TARGET_ABI = mips
-#TARGET_LIBDIR = mips
-#TARGET_TOOLCHAIN = mipsel-linux-android-
-#TARGET_ARCH = mips32
-#CROSS_CC = mipsel-linux-android-gcc
-#CROSS_CXX = mipsel-linux-android-g++
-#COMPILER_VERSION = 4.9
-#HAVE_LEVELDB = 0
-
-################################################################################
-# toolchain config for x86
-################################################################################
-#TARGET_HOST = x86-linux
-#TARGET_ABI = x86
-#TARGET_LIBDIR = x86
-#TARGET_TOOLCHAIN = x86-
-#TARGET_ARCH = x86
-#CROSS_CC = clang
-#CROSS_CXX = clang++
-#COMPILER_VERSION = clang
-#HAVE_LEVELDB = 0
-
-################################################################################
-ASSETS_TIMESTAMP = deps/assets_timestamp
-
-LEVELDB_DIR = $(ANDR_ROOT)/deps/leveldb/
-LEVELDB_LIB = $(LEVELDB_DIR)libleveldb.a
-LEVELDB_TIMESTAMP = $(LEVELDB_DIR)/timestamp
-LEVELDB_TIMESTAMP_INT = $(ANDR_ROOT)/deps/leveldb_timestamp
-LEVELDB_URL_GIT = https://github.com/google/leveldb
-LEVELDB_COMMIT = 2d0320a458d0e6a20fff46d5f80b18bfdcce7018
-
-OPENAL_DIR = $(ANDR_ROOT)/deps/openal-soft/
-OPENAL_LIB = $(OPENAL_DIR)libs/$(TARGET_ABI)/libopenal.so
-OPENAL_TIMESTAMP = $(OPENAL_DIR)/timestamp
-OPENAL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/openal_timestamp
-OPENAL_URL_GIT = https://github.com/apportable/openal-soft
-
-OGG_DIR = $(ANDR_ROOT)/deps/libvorbis-libogg-android/
-OGG_LIB = $(OGG_DIR)libs/$(TARGET_ABI)/libogg.so
-VORBIS_LIB = $(OGG_DIR)libs/$(TARGET_ABI)/libogg.so
-OGG_TIMESTAMP = $(OGG_DIR)timestamp
-OGG_TIMESTAMP_INT = $(ANDR_ROOT)/deps/ogg_timestamp
-OGG_URL_GIT = https://gitlab.com/minetest/libvorbis-libogg-android
-
-IRRLICHT_REVISION = 5150
-IRRLICHT_DIR = $(ANDR_ROOT)/deps/irrlicht/
-IRRLICHT_LIB = $(IRRLICHT_DIR)lib/Android/libIrrlicht.a
-IRRLICHT_TIMESTAMP = $(IRRLICHT_DIR)timestamp
-IRRLICHT_TIMESTAMP_INT = $(ANDR_ROOT)/deps/irrlicht_timestamp
-IRRLICHT_URL_SVN = https://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@$(IRRLICHT_REVISION)
-
-OPENSSL_VERSION = 1.0.2n
-OPENSSL_BASEDIR = openssl-$(OPENSSL_VERSION)
-OPENSSL_DIR = $(ANDR_ROOT)/deps/$(OPENSSL_BASEDIR)/
-OPENSSL_LIB = $(OPENSSL_DIR)/libssl.a
-OPENSSL_TIMESTAMP = $(OPENSSL_DIR)timestamp
-OPENSSL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/openssl_timestamp
-OPENSSL_URL = https://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz
-
-CURL_VERSION = 7.60.0
-CURL_DIR = $(ANDR_ROOT)/deps/curl-$(CURL_VERSION)
-CURL_LIB = $(CURL_DIR)/lib/.libs/libcurl.a
-CURL_TIMESTAMP = $(CURL_DIR)/timestamp
-CURL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/curl_timestamp
-CURL_URL_HTTP = https://curl.haxx.se/download/curl-${CURL_VERSION}.tar.bz2
-
-FREETYPE_DIR = $(ANDR_ROOT)/deps/freetype2-android/
-FREETYPE_LIB = $(FREETYPE_DIR)/Android/obj/local/$(TARGET_ABI)/libfreetype2-static.a
-FREETYPE_TIMESTAMP = $(FREETYPE_DIR)timestamp
-FREETYPE_TIMESTAMP_INT = $(ANDR_ROOT)/deps/freetype_timestamp
-FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android
-
-ICONV_VERSION = 1.16
-ICONV_DIR = $(ANDR_ROOT)/deps/libiconv/
-ICONV_LIB = $(ICONV_DIR)/lib/.libs/libiconv.so
-ICONV_TIMESTAMP = $(ICONV_DIR)timestamp
-ICONV_TIMESTAMP_INT = $(ANDR_ROOT)/deps/iconv_timestamp
-ICONV_URL_HTTP = https://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz
-
-SQLITE3_FOLDER = sqlite-amalgamation-3240000
-SQLITE3_URL = https://www.sqlite.org/2018/$(SQLITE3_FOLDER).zip
-
-ANDROID_SDK = $(shell grep '^sdk\.dir' local.properties | sed 's/^.*=[[:space:]]*//')
-ANDROID_NDK = $(shell grep '^ndk\.dir' local.properties | sed 's/^.*=[[:space:]]*//')
-
-#use interim target variable to switch leveldb on or off
-ifeq ($(HAVE_LEVELDB),1)
- LEVELDB_TARGET = $(LEVELDB_LIB)
-endif
-
-.PHONY : debug release reconfig delconfig \
- leveldb_download clean_leveldb leveldb\
- irrlicht_download clean_irrlicht irrlicht \
- clean_assets assets sqlite3_download \
- freetype_download clean_freetype freetype \
- apk clean_apk \
- clean_all clean prep_srcdir \
- install_debug install_release envpaths all \
- $(ASSETS_TIMESTAMP) $(LEVELDB_TIMESTAMP) \
- $(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \
- $(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \
- $(OPENSSL_TIMESTAMP) \
- $(ANDR_ROOT)/jni/src/android_version.h \
- $(ANDR_ROOT)/jni/src/android_version_githash.h
-
-debug : local.properties
- export NDEBUG=; \
- export BUILD_TYPE=debug; \
- $(MAKE) apk
-
-all : debug release
-
-release : local.properties
- @export NDEBUG=1; \
- export BUILD_TYPE=release; \
- $(MAKE) apk
-
-reconfig: delconfig
- @$(MAKE) local.properties
-
-delconfig:
- $(RM) local.properties
-
-local.properties:
- @echo "Please specify path of ANDROID NDK"; \
- echo "e.g. $$HOME/Android/Sdk/ndk-bundle/"; \
- read ANDROID_NDK ; \
- if [ ! -d $$ANDROID_NDK ] ; then \
- echo "$$ANDROID_NDK is not a valid folder"; \
- exit 1; \
- fi; \
- echo "ndk.dir = $$ANDROID_NDK" > local.properties; \
- echo "Please specify path of ANDROID SDK"; \
- echo "e.g. $$HOME/Android/Sdk/"; \
- read SDKFLDR ; \
- if [ ! -d $$SDKFLDR ] ; then \
- echo "$$SDKFLDR is not a valid folder"; \
- exit 1; \
- fi; \
- echo "sdk.dir = $$SDKFLDR" >> local.properties;
-
-
-$(OPENAL_TIMESTAMP) : openal_download
- @LAST_MODIF=$$(find ${OPENAL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${OPENAL_TIMESTAMP}; \
- fi
-
-openal_download :
- @if [ ! -d ${OPENAL_DIR} ] ; then \
- echo "openal sources missing, downloading..."; \
- mkdir -p ${ANDR_ROOT}/deps; \
- cd ${ANDR_ROOT}/deps ; \
- git clone ${OPENAL_URL_GIT} || exit 1; \
- fi
-
-openal : $(OPENAL_LIB)
-
-$(OPENAL_LIB): $(OPENAL_TIMESTAMP)
- + @REFRESH=0; \
- if [ ! -e ${OPENAL_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ ${OPENAL_TIMESTAMP} -nt ${OPENAL_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ $$REFRESH -ne 0 ] ; then \
- echo "changed timestamp for openal detected building..."; \
- cd ${OPENAL_DIR}; \
- export APP_PLATFORM=${APP_PLATFORM}; \
- export TARGET_ABI=${TARGET_ABI}; \
- export TARGET_CFLAGS_ADDON="${TARGET_CFLAGS_ADDON}"; \
- export TARGET_CXXFLAGS_ADDON="${TARGET_CXXFLAGS_ADDON}"; \
- export COMPILER_VERSION=${COMPILER_VERSION}; \
- ${ANDROID_NDK}/ndk-build \
- NDK_APPLICATION_MK=${ANDR_ROOT}/jni/Deps.mk || exit 1; \
- touch ${OPENAL_TIMESTAMP}; \
- touch ${OPENAL_TIMESTAMP_INT}; \
- else \
- echo "nothing to be done for openal"; \
- fi
-
-clean_openal :
- $(RM) -rf ${OPENAL_DIR}
-
-$(OGG_TIMESTAMP) : ogg_download
- @LAST_MODIF=$$(find ${OGG_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${OGG_TIMESTAMP}; \
- fi
-
-ogg_download :
- @if [ ! -d ${OGG_DIR} ] ; then \
- echo "ogg sources missing, downloading..."; \
- mkdir -p ${ANDR_ROOT}/deps; \
- cd ${ANDR_ROOT}/deps ; \
- git clone ${OGG_URL_GIT}|| exit 1; \
- cd libvorbis-libogg-android ; \
- patch -p1 < ${ANDR_ROOT}/patches/libvorbis-libogg-fpu.patch || exit 1; \
- fi
-
-ogg : $(OGG_LIB)
-
-$(OGG_LIB): $(OGG_TIMESTAMP)
- + @REFRESH=0; \
- if [ ! -e ${OGG_TIMESTAMP_INT} ] ; then \
- echo "${OGG_TIMESTAMP_INT} doesn't exist"; \
- REFRESH=1; \
- fi; \
- if [ ${OGG_TIMESTAMP} -nt ${OGG_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ $$REFRESH -ne 0 ] ; then \
- echo "changed timestamp for ogg detected building..."; \
- cd ${OGG_DIR}; \
- export APP_PLATFORM=${APP_PLATFORM}; \
- export TARGET_ABI=${TARGET_ABI}; \
- ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
- --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
- --platform=${APP_PLATFORM} \
- --install-dir=$${TOOLCHAIN}; \
- touch ${OGG_TIMESTAMP}; \
- touch ${OGG_TIMESTAMP_INT}; \
- else \
- echo "nothing to be done for libogg/libvorbis"; \
- fi
-
-clean_ogg :
- $(RM) -rf ${OGG_DIR}
-
-$(OPENSSL_TIMESTAMP) : openssl_download
- @LAST_MODIF=$$(find ${OPENSSL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${OPENSSL_TIMESTAMP}; \
- fi
-
-openssl_download :
- @if [ ! -d ${OPENSSL_DIR} ] ; then \
- echo "openssl sources missing, downloading..."; \
- mkdir -p ${ANDR_ROOT}/deps; \
- cd ${ANDR_ROOT}/deps ; \
- wget ${OPENSSL_URL} || exit 1; \
- tar -xzf ${OPENSSL_BASEDIR}.tar.gz; \
- cd ${OPENSSL_BASEDIR}; \
- patch -p1 < ${ANDR_ROOT}/patches/openssl_arch.patch; \
- sed -i 's/-mandroid //g' Configure; \
- fi
-
-openssl : $(OPENSSL_LIB)
-
-$(OPENSSL_LIB): $(OPENSSL_TIMESTAMP)
- @REFRESH=0; \
- if [ ! -e ${OPENSSL_TIMESTAMP_INT} ] ; then \
- echo "${OPENSSL_TIMESTAMP_INT} doesn't exist"; \
- REFRESH=1; \
- fi; \
- if [ ${OPENSSL_TIMESTAMP} -nt ${OPENSSL_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ $$REFRESH -ne 0 ] ; then \
- echo "changed timestamp for openssl detected building..."; \
- cd ${OPENSSL_DIR}; \
- ln -s ${OPENSSL_DIR} ../openssl; \
- export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-openssl; \
- ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
- --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
- --platform=${APP_PLATFORM} \
- --stl=libc++ \
- --install-dir=$${TOOLCHAIN}; \
- export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
- export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
- export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON}"; \
- CC=${CROSS_CC} ./Configure -DL_ENDIAN no-asm android-${TARGET_ARCH} \
- -D__ANDROID_API__=$(API); \
- CC=${CROSS_CC} ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make depend; \
- CC=${CROSS_CC} ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make build_libs; \
- touch ${OPENSSL_TIMESTAMP}; \
- touch ${OPENSSL_TIMESTAMP_INT}; \
- $(RM) -rf $${TOOLCHAIN}; \
- else \
- echo "nothing to be done for openssl"; \
- fi
-
-clean_openssl :
- $(RM) -rf ${OPENSSL_DIR}; \
- $(RM) -rf $(ANDR_ROOT)/deps/${OPENSSL_BASEDIR}.tar.gz; \
- $(RM) -rf $(ANDR_ROOT)/deps/openssl
-
-$(LEVELDB_TIMESTAMP) : leveldb_download
- @LAST_MODIF=$$(find ${LEVELDB_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${LEVELDB_TIMESTAMP}; \
- fi
-
-leveldb_download :
- @if [ ! -d ${LEVELDB_DIR} ] ; then \
- echo "leveldb sources missing, downloading..."; \
- mkdir -p ${ANDR_ROOT}/deps; \
- cd ${ANDR_ROOT}/deps ; \
- git clone ${LEVELDB_URL_GIT} || exit 1; \
- cd ${LEVELDB_DIR} || exit 1; \
- git checkout ${LEVELDB_COMMIT} || exit 1; \
- fi
-
-leveldb : $(LEVELDB_LIB)
-ifeq ($(HAVE_LEVELDB),1)
-$(LEVELDB_LIB): $(LEVELDB_TIMESTAMP)
- @REFRESH=0; \
- if [ ! -e ${LEVELDB_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ ${LEVELDB_TIMESTAMP} -nt ${LEVELDB_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ $$REFRESH -ne 0 ] ; then \
- echo "changed timestamp for leveldb detected building..."; \
- cd deps/leveldb; \
- export CROSS_PREFIX=${TARGET_TOOLCHAIN}; \
- export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-leveldb; \
- ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
- --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
- --platform=${APP_PLATFORM} \
- --stl=libc++ \
- --install-dir=$${TOOLCHAIN}; \
- export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
- export CC=${CROSS_CC}; \
- export CXX=${CROSS_CXX}; \
- export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
- export CPPFLAGS="$${CPPFLAGS} ${TARGET_CXXFLAGS_ADDON}"; \
- export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON}"; \
- export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
- $(MAKE) || exit 1; \
- touch ${LEVELDB_TIMESTAMP}; \
- touch ${LEVELDB_TIMESTAMP_INT}; \
- $(RM) -rf $${TOOLCHAIN}; \
- else \
- echo "nothing to be done for leveldb"; \
- fi
-endif
-
-clean_leveldb :
- ./gradlew cleanLevelDB
-
-$(FREETYPE_TIMESTAMP) : freetype_download
- @LAST_MODIF=$$(find ${FREETYPE_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${FREETYPE_TIMESTAMP}; \
- fi
-
-freetype_download :
- @if [ ! -d ${FREETYPE_DIR} ] ; then \
- echo "freetype sources missing, downloading..."; \
- mkdir -p ${ANDR_ROOT}/deps; \
- cd deps; \
- git clone ${FREETYPE_URL_GIT} || exit 1; \
- fi
-
-freetype : $(FREETYPE_LIB)
-
-$(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
- + @REFRESH=0; \
- if [ ! -e ${FREETYPE_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ ! -e ${FREETYPE_LIB} ] ; then \
- REFRESH=1; \
- fi; \
- if [ ${FREETYPE_TIMESTAMP} -nt ${FREETYPE_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ $$REFRESH -ne 0 ] ; then \
- mkdir -p ${FREETYPE_DIR}; \
- echo "changed timestamp for freetype detected building..."; \
- cd ${FREETYPE_DIR}/Android/jni; \
- export APP_PLATFORM=${APP_PLATFORM}; \
- export TARGET_ABI=${TARGET_ABI}; \
- export TARGET_CFLAGS_ADDON="${TARGET_CFLAGS_ADDON}"; \
- export TARGET_CXXFLAGS_ADDON="${TARGET_CXXFLAGS_ADDON}"; \
- export COMPILER_VERSION=${COMPILER_VERSION}; \
- ${ANDROID_NDK}/ndk-build \
- NDK_APPLICATION_MK=${ANDR_ROOT}/jni/Deps.mk || exit 1; \
- touch ${FREETYPE_TIMESTAMP}; \
- touch ${FREETYPE_TIMESTAMP_INT}; \
- else \
- echo "nothing to be done for freetype"; \
- fi
-
-clean_freetype :
- ./gradlew cleanFreetype
-
-$(ICONV_TIMESTAMP) : iconv_download
- @LAST_MODIF=$$(find ${ICONV_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${ICONV_TIMESTAMP}; \
- fi
-
-iconv_download :
- @if [ ! -d ${ICONV_DIR} ] ; then \
- echo "iconv sources missing, downloading..."; \
- mkdir -p ${ANDR_ROOT}/deps; \
- cd ${ANDR_ROOT}/deps; \
- wget ${ICONV_URL_HTTP} || exit 1; \
- tar -xzf libiconv-${ICONV_VERSION}.tar.gz || exit 1; \
- rm libiconv-${ICONV_VERSION}.tar.gz; \
- ln -s libiconv-${ICONV_VERSION} libiconv; \
- fi
-
-iconv : $(ICONV_LIB)
-
-$(ICONV_LIB) : $(ICONV_TIMESTAMP)
- @REFRESH=0; \
- if [ ! -e ${ICONV_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ ! -e ${ICONV_LIB} ] ; then \
- REFRESH=1; \
- fi; \
- if [ ${ICONV_TIMESTAMP} -nt ${ICONV_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ $$REFRESH -ne 0 ] ; then \
- mkdir -p ${ICONV_DIR}; \
- echo "changed timestamp for iconv detected building..."; \
- cd ${ICONV_DIR}; \
- export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-iconv; \
- ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
- --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
- --platform=${APP_PLATFORM} \
- --stl=libc++ \
- --install-dir=$${TOOLCHAIN}; \
- export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
- export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
- export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON} -lstdc++"; \
- export CC=${CROSS_CC}; \
- export CXX=${CROSS_CXX}; \
- export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
- ./configure --host=${TARGET_HOST} || exit 1; \
- sed -i 's/LIBICONV_VERSION_INFO) /LIBICONV_VERSION_INFO) -avoid-version /g' lib/Makefile; \
- grep "iconv_LDFLAGS" src/Makefile; \
- $(MAKE) -s || exit 1; \
- touch ${ICONV_TIMESTAMP}; \
- touch ${ICONV_TIMESTAMP_INT}; \
- rm -rf ${TOOLCHAIN}; \
- else \
- echo "nothing to be done for iconv"; \
- fi
-
-clean_iconv :
- ./gradlew cleanIconv
-
-#Note: Texturehack patch is required for gpu's not supporting color format
-# correctly. Known bad GPU:
-# -geforce on emulator
-# -Vivante Corporation GC1000 core (e.g. Galaxy Tab 3)
-
-irrlicht_download :
- @if [ ! -d "deps/irrlicht" ] ; then \
- echo "irrlicht sources missing, downloading..."; \
- mkdir -p ${ANDR_ROOT}/deps; \
- cd deps; \
- svn co ${IRRLICHT_URL_SVN} irrlicht || exit 1; \
- cd irrlicht; \
- patch -p1 < ${ANDR_ROOT}/patches/irrlicht-touchcount.patch || exit 1; \
- patch -p1 < ${ANDR_ROOT}/patches/irrlicht-back_button.patch || exit 1; \
- patch -p1 < ${ANDR_ROOT}/patches/irrlicht-texturehack.patch || exit 1; \
- patch -p1 < ${ANDR_ROOT}/patches/irrlicht-native_activity.patch || exit 1; \
- fi
-
-$(IRRLICHT_TIMESTAMP) : irrlicht_download
- @LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${IRRLICHT_TIMESTAMP}; \
- fi
-
-irrlicht : $(IRRLICHT_LIB)
-
-$(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB)
- + @REFRESH=0; \
- if [ ! -e ${IRRLICHT_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ ! -e ${IRRLICHT_LIB} ] ; then \
- REFRESH=1; \
- fi; \
- if [ ${IRRLICHT_TIMESTAMP} -nt ${IRRLICHT_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ $$REFRESH -ne 0 ] ; then \
- mkdir -p ${IRRLICHT_DIR}; \
- echo "changed timestamp for irrlicht detected building..."; \
- cd deps/irrlicht/source/Irrlicht/Android; \
- export APP_PLATFORM=${APP_PLATFORM}; \
- export TARGET_ABI=${TARGET_ABI}; \
- export TARGET_CFLAGS_ADDON="${TARGET_CFLAGS_ADDON}"; \
- export TARGET_CXXFLAGS_ADDON="${TARGET_CXXFLAGS_ADDON}"; \
- export COMPILER_VERSION=${COMPILER_VERSION}; \
- ${ANDROID_NDK}/ndk-build \
- NDK_APPLICATION_MK=${ANDR_ROOT}/jni/Deps.mk || exit 1; \
- touch ${IRRLICHT_TIMESTAMP}; \
- touch ${IRRLICHT_TIMESTAMP_INT}; \
- else \
- echo "nothing to be done for irrlicht"; \
- fi
-
-clean_irrlicht :
- ./gradlew cleanIrrlicht
-
-$(CURL_TIMESTAMP) : curl_download
- @LAST_MODIF=$$(find ${CURL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${CURL_TIMESTAMP}; \
- fi
-
-curl_download :
- @if [ ! -d "deps/curl-${CURL_VERSION}" ] ; then \
- echo "curl sources missing, downloading..."; \
- mkdir -p ${ANDR_ROOT}/deps; \
- cd deps; \
- wget ${CURL_URL_HTTP} || exit 1; \
- tar -xjf curl-${CURL_VERSION}.tar.bz2 || exit 1; \
- rm curl-${CURL_VERSION}.tar.bz2; \
- ln -s curl-${CURL_VERSION} curl; \
- fi
-
-curl : $(CURL_LIB)
-
-$(CURL_LIB): $(CURL_TIMESTAMP) $(OPENSSL_LIB)
- @REFRESH=0; \
- if [ ! -e ${CURL_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ ! -e ${CURL_LIB} ] ; then \
- REFRESH=1; \
- fi; \
- if [ ${CURL_TIMESTAMP} -nt ${CURL_TIMESTAMP_INT} ] ; then \
- REFRESH=1; \
- fi; \
- if [ $$REFRESH -ne 0 ] ; then \
- mkdir -p ${CURL_DIR}; \
- echo "changed timestamp for curl detected building..."; \
- cd deps/curl-${CURL_VERSION}; \
- export CROSS_PREFIX=${TARGET_TOOLCHAIN}; \
- export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-curl; \
- ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
- --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
- --platform=${APP_PLATFORM} \
- --stl=libc++ \
- --install-dir=$${TOOLCHAIN}; \
- export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
- export CC=${CROSS_CC}; \
- export CXX=${CROSS_CXX}; \
- export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
- export CPPFLAGS="$${CPPFLAGS} -I${OPENSSL_DIR}/include ${TARGET_CFLAGS_ADDON}"; \
- export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
- export LDFLAGS="$${LDFLAGS} -L${OPENSSL_DIR} ${TARGET_LDFLAGS_ADDON}"; \
- ./configure --host=${TARGET_HOST} --disable-shared --enable-static --with-ssl; \
- $(MAKE) -s || exit 1; \
- touch ${CURL_TIMESTAMP}; \
- touch ${CURL_TIMESTAMP_INT}; \
- $(RM) -rf $${TOOLCHAIN}; \
- else \
- echo "nothing to be done for curl"; \
- fi
-
-clean_curl :
- ./gradlew cleanCURL
-
-sqlite3_download: deps/${SQLITE3_FOLDER}/sqlite3.c
-
-deps/${SQLITE3_FOLDER}/sqlite3.c :
- cd deps; \
- wget ${SQLITE3_URL}; \
- unzip ${SQLITE3_FOLDER}.zip; \
- ln -s ${SQLITE3_FOLDER} sqlite; \
- cd ${SQLITE3_FOLDER};
-
-clean_sqlite3:
- ./gradlew cleanSQLite3
-
-$(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB)
- @mkdir -p ${ANDR_ROOT}/deps; \
- for DIRNAME in {builtin,client,doc,fonts,games,mods,po,textures}; do \
- LAST_MODIF=$$(find ${PROJ_ROOT}/${DIRNAME} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ]; then \
- touch ${PROJ_ROOT}/${DIRNAME}/timestamp; \
- touch ${ASSETS_TIMESTAMP}; \
- echo ${DIRNAME} changed $$LAST_MODIF; \
- fi; \
- done; \
- LAST_MODIF=$$(find ${IRRLICHT_DIR}/media -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${IRRLICHT_DIR}/media/timestamp; \
- touch ${ASSETS_TIMESTAMP}; \
- fi; \
- if [ ${PROJ_ROOT}/minetest.conf.example -nt ${ASSETS_TIMESTAMP} ] ; then \
- echo "conf changed"; \
- touch ${ASSETS_TIMESTAMP}; \
- fi; \
- if [ ${PROJ_ROOT}/README.txt -nt ${ASSETS_TIMESTAMP} ] ; then \
- touch ${ASSETS_TIMESTAMP}; \
- fi; \
- if [ ! -e $(ASSETS_TIMESTAMP) ] ; then \
- touch $(ASSETS_TIMESTAMP); \
- fi
-
-assets : $(ASSETS_TIMESTAMP)
- @REFRESH=0; \
- if [ ! -e ${ASSETS_TIMESTAMP}.old ] ; then \
- REFRESH=1; \
- fi; \
- if [ ${ASSETS_TIMESTAMP} -nt ${ASSETS_TIMESTAMP}.old ] ; then \
- REFRESH=1; \
- fi; \
- if [ ! -d ${APP_ROOT}/assets ] ; then \
- REFRESH=1; \
- fi; \
- if [ $$REFRESH -ne 0 ] ; then \
- echo "assets changed, refreshing..."; \
- $(MAKE) clean_assets; \
- ./gradlew copyAssets; \
- cp -r ${IRRLICHT_DIR}/media/Shaders ${APP_ROOT}/assets/Minetest/media; \
- cd ${APP_ROOT}/assets || exit 1; \
- find . -name "timestamp" -exec rm {} \; ; \
- find . -name "*.blend" -exec rm {} \; ; \
- find . -name "*~" -exec rm {} \; ; \
- find . -type d -path "*.git" -exec rm -rf {} \; ; \
- find . -type d -path "*.svn" -exec rm -rf {} \; ; \
- find . -type f -path "*.gitignore" -exec rm -rf {} \; ; \
- ls -R | grep ":$$" | sed -e 's/:$$//' -e 's/\.//' -e 's/^\///' > "index.txt"; \
- find -L Minetest > filelist.txt; \
- cp ${ANDR_ROOT}/${ASSETS_TIMESTAMP} ${ANDR_ROOT}/${ASSETS_TIMESTAMP}.old; \
- else \
- echo "nothing to be done for assets"; \
- fi
-
-clean_assets :
- ./gradlew cleanAssets
-
-apk: local.properties assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(LEVELDB_TARGET) \
- $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ANDR_ROOT)/jni/src/android_version.h \
- $(ANDR_ROOT)/jni/src/android_version_githash.h sqlite3_download
- + @export TARGET_LIBDIR=${TARGET_LIBDIR}; \
- export HAVE_LEVELDB=${HAVE_LEVELDB}; \
- export APP_PLATFORM=${APP_PLATFORM}; \
- export TARGET_ABI=${TARGET_ABI}; \
- export TARGET_CFLAGS_ADDON="${TARGET_CFLAGS_ADDON}"; \
- export TARGET_CXXFLAGS_ADDON="${TARGET_CXXFLAGS_ADDON}"; \
- export COMPILER_VERSION=${COMPILER_VERSION}; \
- export GPROF=${GPROF}; \
- ${ANDROID_NDK}/ndk-build || exit 1; \
- if [ ! -e ${APP_ROOT}/jniLibs ]; then \
- ln -s ${ANDR_ROOT}/libs ${APP_ROOT}/jniLibs || exit 1; \
- fi; \
- export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" && \
- export BUILD_TYPE_C=$$(echo "$${BUILD_TYPE}" | sed 's/./\U&/') && \
- ./gradlew assemble$$BUILD_TYPE_C && \
- echo "APK stored at: build/outputs/apk/$$BUILD_TYPE/Minetest-$$BUILD_TYPE.apk" && \
- echo "You can install it with \`make install_$$BUILD_TYPE\`"
-
-# These Intentionally doesn't depend on their respective build steps,
-# because it takes a while to verify that everything's up-to-date.
-install_debug:
- ${ANDROID_SDK}/platform-tools/adb install -r build/outputs/apk/debug/Minetest-debug.apk
-
-install_release:
- ${ANDROID_SDK}/platform-tools/adb install -r build/outputs/apk/release/Minetest-release.apk
-
-prep_srcdir :
- @if [ ! -e ${ANDR_ROOT}/jni/src ]; then \
- ln -s ${PROJ_ROOT}/src ${ANDR_ROOT}/jni/src; \
- fi; \
- if [ ! -e ${ANDR_ROOT}/jni/lib ]; then \
- ln -s ${PROJ_ROOT}/lib ${ANDR_ROOT}/jni/lib; \
- fi
-
-clean_apk :
- ./gradlew clean
-
-clean_all :
- ./gradlew cleanAll
-
-$(ANDR_ROOT)/jni/src/android_version_githash.h : prep_srcdir
- @export VERSION_FILE=${ANDR_ROOT}/jni/src/android_version_githash.h; \
- export VERSION_FILE_NEW=$${VERSION_FILE}.new; \
- { \
- echo "#ifndef ANDROID_MT_VERSION_GITHASH_H"; \
- echo "#define ANDROID_MT_VERSION_GITHASH_H"; \
- export GITHASH=$$(git rev-parse --short=8 HEAD); \
- export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"; \
- echo "#define VERSION_GITHASH \"$$VERSION_STR-$$GITHASH-Android\""; \
- echo "#endif"; \
- } > "$${VERSION_FILE_NEW}"; \
- if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \
- echo "android_version_githash.h changed, updating..."; \
- mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \
- else \
- rm "$${VERSION_FILE_NEW}"; \
- fi
-
-
-$(ANDR_ROOT)/jni/src/android_version.h : prep_srcdir
- @export VERSION_FILE=${ANDR_ROOT}/jni/src/android_version.h; \
- export VERSION_FILE_NEW=$${VERSION_FILE}.new; \
- { \
- echo "#ifndef ANDROID_MT_VERSION_H"; \
- echo "#define ANDROID_MT_VERSION_H"; \
- echo "#define VERSION_MAJOR ${VERSION_MAJOR}"; \
- echo "#define VERSION_MINOR ${VERSION_MINOR}"; \
- echo "#define VERSION_PATCH ${VERSION_PATCH}"; \
- echo "#define VERSION_STRING STR(VERSION_MAJOR) \".\" STR(VERSION_MINOR) \
- \".\" STR(VERSION_PATCH)"; \
- echo "#endif"; \
- } > $${VERSION_FILE_NEW}; \
- if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \
- echo "android_version.h changed, updating..."; \
- mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \
- else \
- rm "$${VERSION_FILE_NEW}"; \
- fi
-
-clean : clean_apk clean_assets
diff --git a/build/android/app/build.gradle b/build/android/app/build.gradle
new file mode 100644
index 000000000..e3619af17
--- /dev/null
+++ b/build/android/app/build.gradle
@@ -0,0 +1,111 @@
+apply plugin: 'com.android.application'
+android {
+ compileSdkVersion 29
+ buildToolsVersion '29.0.3'
+ ndkVersion '21.1.6352462'
+ defaultConfig {
+ applicationId 'net.minetest.minetest'
+ minSdkVersion 16
+ targetSdkVersion 29
+ versionName "${versionMajor}.${versionMinor}.${versionPatch}"
+ versionCode project.versionCode
+ }
+
+ Properties props = new Properties()
+ props.load(new FileInputStream(file('../local.properties')))
+
+ if (props.getProperty('keystore') != null) {
+ signingConfigs {
+ release {
+ storeFile file(props['keystore'])
+ storePassword props['keystore.password']
+ keyAlias props['key']
+ keyPassword props['key.password']
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled true
+ signingConfig signingConfigs.release
+ }
+ }
+ }
+
+ // for multiple APKs
+ splits {
+ abi {
+ enable true
+ reset()
+ include 'armeabi-v7a', 'arm64-v8a'
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+task prepareAssets() {
+ def assetsFolder = "build/assets"
+ def projRoot = "../../.."
+ def gameToCopy = "minetest_game"
+
+ copy {
+ from "${projRoot}/minetest.conf.example", "${projRoot}/README.md" into assetsFolder
+ }
+ copy {
+ from "${projRoot}/doc/lgpl-2.1.txt" into "${assetsFolder}"
+ }
+ copy {
+ from "${projRoot}/builtin" into "${assetsFolder}/builtin"
+ }
+ /*copy {
+ // ToDo: fix Minetest shaders that currently don't work with OpenGL ES
+ from "${projRoot}/client/shaders" into "${assetsFolder}/client/shaders"
+ }*/
+ copy {
+ from "../native/deps/Android/Irrlicht/shaders" into "${assetsFolder}/client/shaders/Irrlicht"
+ }
+ copy {
+ from "${projRoot}/fonts" include "*.ttf" into "${assetsFolder}/fonts"
+ }
+ copy {
+ from "${projRoot}/games/${gameToCopy}" into "${assetsFolder}/games/${gameToCopy}"
+ }
+ /*copy {
+ // ToDo: fix broken locales
+ from "${projRoot}/po" into "${assetsFolder}/po"
+ }*/
+ copy {
+ from "${projRoot}/textures" into "${assetsFolder}/textures"
+ }
+
+ file("${assetsFolder}/.nomedia").text = "";
+
+ task zipAssets(type: Zip) {
+ archiveName "Minetest.zip"
+ from "${assetsFolder}"
+ destinationDir file("src/main/assets")
+ }
+}
+
+preBuild.dependsOn zipAssets
+
+// Map for the version code that gives each ABI a value.
+import com.android.build.OutputFile
+
+def abiCodes = ['armeabi-v7a': 0, 'arm64-v8a': 1]
+android.applicationVariants.all { variant ->
+ variant.outputs.each {
+ output ->
+ def abiName = output.getFilter(OutputFile.ABI)
+ output.versionCodeOverride = abiCodes.get(abiName, 0) + variant.versionCode
+ }
+}
+
+dependencies {
+ implementation project(':native')
+ implementation 'androidx.appcompat:appcompat:1.1.0'
+}
diff --git a/build/android/src/main/AndroidManifest.xml b/build/android/app/src/main/AndroidManifest.xml
index fb1de9cf0..0a7c8d95a 100644
--- a/build/android/src/main/AndroidManifest.xml
+++ b/build/android/app/src/main/AndroidManifest.xml
@@ -4,28 +4,31 @@
package="net.minetest.minetest"
android:installLocation="auto">
- <uses-feature
- android:glEsVersion="0x00010000"
- android:required="true" />
-
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <!--
+ `android:requestLegacyExternalStorage="true"` is workaround for using `/sdcard`
+ instead of the `getFilesDir()` patch for assets. Check link below for more information:
+ https://developer.android.com/training/data-storage/compatibility
+ -->
+
<application
+ android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
- android:label="${project}"
+ android:label="@string/label"
android:resizeableActivity="false"
- tools:targetApi="n">
+ android:requestLegacyExternalStorage="true"
+ tools:ignore="UnusedAttribute">
<meta-data
android:name="android.max_aspect"
- android:value="2.4" />
+ android:value="3.0" />
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
- android:label="${project}"
- android:launchMode="singleTask"
+ android:maxAspectRatio="3.0"
android:screenOrientation="sensorLandscape"
android:theme="@style/AppTheme">
<intent-filter>
@@ -33,11 +36,13 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
+
<activity
- android:name=".MtNativeActivity"
+ android:name=".GameActivity"
android:configChanges="orientation|keyboard|keyboardHidden|navigation|screenSize|smallestScreenSize"
android:hardwareAccelerated="true"
android:launchMode="singleTask"
+ android:maxAspectRatio="3.0"
android:screenOrientation="sensorLandscape"
android:theme="@style/AppTheme">
<intent-filter>
@@ -45,16 +50,18 @@
</intent-filter>
<meta-data
android:name="android.app.lib_name"
- android:value="minetest" />
+ android:value="Minetest" />
</activity>
+
<activity
- android:name=".MinetestTextEntry"
- android:configChanges="keyboardHidden|orientation|screenSize"
- android:theme="@style/Theme.Dialog"
- android:windowSoftInputMode="stateAlwaysHidden" />
- <activity
- android:name=".MinetestAssetCopy"
- android:screenOrientation="sensorLandscape"
- android:theme="@style/AppTheme" />
+ android:name=".InputDialogActivity"
+ android:maxAspectRatio="3.0"
+ android:theme="@style/InputTheme" />
+
+ <service
+ android:name=".UnzipService"
+ android:enabled="true"
+ android:exported="false" />
</application>
+
</manifest>
diff --git a/build/android/app/src/main/java/net/minetest/minetest/CopyZipTask.java b/build/android/app/src/main/java/net/minetest/minetest/CopyZipTask.java
new file mode 100644
index 000000000..6d4b6ab0f
--- /dev/null
+++ b/build/android/app/src/main/java/net/minetest/minetest/CopyZipTask.java
@@ -0,0 +1,82 @@
+/*
+Minetest
+Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik <MoNTE48@mail.ua>
+Copyright (C) 2014-2020 ubulem, Bektur Mambetov <berkut87@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+package net.minetest.minetest;
+
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.widget.Toast;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.ref.WeakReference;
+
+public class CopyZipTask extends AsyncTask<String, Void, String> {
+
+ private final WeakReference<AppCompatActivity> activityRef;
+
+ CopyZipTask(AppCompatActivity activity) {
+ activityRef = new WeakReference<>(activity);
+ }
+
+ protected String doInBackground(String... params) {
+ copyAsset(params[0]);
+ return params[0];
+ }
+
+ @Override
+ protected void onPostExecute(String result) {
+ startUnzipService(result);
+ }
+
+ private void copyAsset(String zipName) {
+ String filename = zipName.substring(zipName.lastIndexOf("/") + 1);
+ try (InputStream in = activityRef.get().getAssets().open(filename);
+ OutputStream out = new FileOutputStream(zipName)) {
+ copyFile(in, out);
+ } catch (IOException e) {
+ AppCompatActivity activity = activityRef.get();
+ if (activity != null) {
+ activity.runOnUiThread(() -> Toast.makeText(activityRef.get(), e.getLocalizedMessage(), Toast.LENGTH_LONG).show());
+ }
+ cancel(true);
+ }
+ }
+
+ private void copyFile(InputStream in, OutputStream out) throws IOException {
+ byte[] buffer = new byte[1024];
+ int read;
+ while ((read = in.read(buffer)) != -1)
+ out.write(buffer, 0, read);
+ }
+
+ private void startUnzipService(String file) {
+ Intent intent = new Intent(activityRef.get(), UnzipService.class);
+ intent.putExtra(UnzipService.EXTRA_KEY_IN_FILE, file);
+ AppCompatActivity activity = activityRef.get();
+ if (activity != null) {
+ activity.startService(intent);
+ }
+ }
+}
diff --git a/build/android/app/src/main/java/net/minetest/minetest/GameActivity.java b/build/android/app/src/main/java/net/minetest/minetest/GameActivity.java
new file mode 100644
index 000000000..635512569
--- /dev/null
+++ b/build/android/app/src/main/java/net/minetest/minetest/GameActivity.java
@@ -0,0 +1,126 @@
+/*
+Minetest
+Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik <MoNTE48@mail.ua>
+Copyright (C) 2014-2020 ubulem, Bektur Mambetov <berkut87@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+package net.minetest.minetest;
+
+import android.app.NativeActivity;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.view.WindowManager;
+
+public class GameActivity extends NativeActivity {
+ static {
+ System.loadLibrary("c++_shared");
+ System.loadLibrary("Minetest");
+ }
+
+ private int messageReturnCode;
+ private String messageReturnValue;
+
+ public static native void putMessageBoxResult(String text);
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ messageReturnCode = -1;
+ messageReturnValue = "";
+ }
+
+ private void makeFullScreen() {
+ if (Build.VERSION.SDK_INT >= 19)
+ this.getWindow().getDecorView().setSystemUiVisibility(
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
+ View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
+ View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+ }
+
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+ if (hasFocus)
+ makeFullScreen();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ makeFullScreen();
+ }
+
+ @Override
+ public void onBackPressed() {
+ // Ignore the back press so Minetest can handle it
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == 101) {
+ if (resultCode == RESULT_OK) {
+ String text = data.getStringExtra("text");
+ messageReturnCode = 0;
+ messageReturnValue = text;
+ } else
+ messageReturnCode = 1;
+ }
+ }
+
+ public void showDialog(String acceptButton, String hint, String current, int editType) {
+ Intent intent = new Intent(this, InputDialogActivity.class);
+ Bundle params = new Bundle();
+ params.putString("acceptButton", acceptButton);
+ params.putString("hint", hint);
+ params.putString("current", current);
+ params.putInt("editType", editType);
+ intent.putExtras(params);
+ startActivityForResult(intent, 101);
+ messageReturnValue = "";
+ messageReturnCode = -1;
+ }
+
+ public int getDialogState() {
+ return messageReturnCode;
+ }
+
+ public String getDialogValue() {
+ messageReturnCode = -1;
+ return messageReturnValue;
+ }
+
+ public float getDensity() {
+ return getResources().getDisplayMetrics().density;
+ }
+
+ public int getDisplayHeight() {
+ return getResources().getDisplayMetrics().heightPixels;
+ }
+
+ public int getDisplayWidth() {
+ return getResources().getDisplayMetrics().widthPixels;
+ }
+
+ public void openURL(String url) {
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+ startActivity(browserIntent);
+ }
+}
diff --git a/build/android/app/src/main/java/net/minetest/minetest/InputDialogActivity.java b/build/android/app/src/main/java/net/minetest/minetest/InputDialogActivity.java
new file mode 100644
index 000000000..7c6aa111d
--- /dev/null
+++ b/build/android/app/src/main/java/net/minetest/minetest/InputDialogActivity.java
@@ -0,0 +1,98 @@
+/*
+Minetest
+Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik <MoNTE48@mail.ua>
+Copyright (C) 2014-2020 ubulem, Bektur Mambetov <berkut87@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+package net.minetest.minetest;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.text.InputType;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+
+import java.util.Objects;
+
+public class InputDialogActivity extends AppCompatActivity {
+ private AlertDialog alertDialog;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ Bundle b = getIntent().getExtras();
+ int editType = Objects.requireNonNull(b).getInt("editType");
+ String hint = b.getString("hint");
+ String current = b.getString("current");
+ final AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ EditText editText = new EditText(this);
+ builder.setView(editText);
+ editText.requestFocus();
+ editText.setHint(hint);
+ editText.setText(current);
+ final InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
+ Objects.requireNonNull(imm).toggleSoftInput(InputMethodManager.SHOW_FORCED,
+ InputMethodManager.HIDE_IMPLICIT_ONLY);
+ if (editType == 3)
+ editText.setInputType(InputType.TYPE_CLASS_TEXT |
+ InputType.TYPE_TEXT_VARIATION_PASSWORD);
+ else
+ editText.setInputType(InputType.TYPE_CLASS_TEXT);
+ editText.setOnKeyListener((view, KeyCode, event) -> {
+ if (KeyCode == KeyEvent.KEYCODE_ENTER) {
+ imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
+ pushResult(editText.getText().toString());
+ return true;
+ }
+ return false;
+ });
+ alertDialog = builder.create();
+ if (!this.isFinishing())
+ alertDialog.show();
+ alertDialog.setOnCancelListener(dialog -> {
+ pushResult(editText.getText().toString());
+ setResult(Activity.RESULT_CANCELED);
+ alertDialog.dismiss();
+ makeFullScreen();
+ finish();
+ });
+ }
+
+ private void pushResult(String text) {
+ Intent resultData = new Intent();
+ resultData.putExtra("text", text);
+ setResult(AppCompatActivity.RESULT_OK, resultData);
+ alertDialog.dismiss();
+ makeFullScreen();
+ finish();
+ }
+
+ private void makeFullScreen() {
+ if (Build.VERSION.SDK_INT >= 19)
+ this.getWindow().getDecorView().setSystemUiVisibility(
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
+ View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
+ View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+ }
+}
diff --git a/build/android/app/src/main/java/net/minetest/minetest/MainActivity.java b/build/android/app/src/main/java/net/minetest/minetest/MainActivity.java
new file mode 100644
index 000000000..2aa50d9ad
--- /dev/null
+++ b/build/android/app/src/main/java/net/minetest/minetest/MainActivity.java
@@ -0,0 +1,153 @@
+/*
+Minetest
+Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik <MoNTE48@mail.ua>
+Copyright (C) 2014-2020 ubulem, Bektur Mambetov <berkut87@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+package net.minetest.minetest;
+
+import android.Manifest;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static net.minetest.minetest.UnzipService.ACTION_FAILURE;
+import static net.minetest.minetest.UnzipService.ACTION_PROGRESS;
+import static net.minetest.minetest.UnzipService.ACTION_UPDATE;
+import static net.minetest.minetest.UnzipService.FAILURE;
+import static net.minetest.minetest.UnzipService.SUCCESS;
+
+public class MainActivity extends AppCompatActivity {
+ private final static int versionCode = BuildConfig.VERSION_CODE;
+ private final static int PERMISSIONS = 1;
+ private static final String[] REQUIRED_SDK_PERMISSIONS =
+ new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
+ private static final String SETTINGS = "MinetestSettings";
+ private static final String TAG_VERSION_CODE = "versionCode";
+ private ProgressBar mProgressBar;
+ private TextView mTextView;
+ private SharedPreferences sharedPreferences;
+ private final BroadcastReceiver myReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ int progress = 0;
+ if (intent != null)
+ progress = intent.getIntExtra(ACTION_PROGRESS, 0);
+ if (progress >= 0) {
+ if (mProgressBar != null) {
+ mProgressBar.setVisibility(View.VISIBLE);
+ mProgressBar.setProgress(progress);
+ }
+ mTextView.setVisibility(View.VISIBLE);
+ } else if (progress == FAILURE) {
+ Toast.makeText(MainActivity.this, intent.getStringExtra(ACTION_FAILURE), Toast.LENGTH_LONG).show();
+ finish();
+ } else if (progress == SUCCESS)
+ startNative();
+ }
+ };
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ IntentFilter filter = new IntentFilter(ACTION_UPDATE);
+ registerReceiver(myReceiver, filter);
+ mProgressBar = findViewById(R.id.progressBar);
+ mTextView = findViewById(R.id.textView);
+ sharedPreferences = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
+ checkPermission();
+ else
+ checkAppVersion();
+ }
+
+ private void checkPermission() {
+ final List<String> missingPermissions = new ArrayList<>();
+ for (final String permission : REQUIRED_SDK_PERMISSIONS) {
+ final int result = ContextCompat.checkSelfPermission(this, permission);
+ if (result != PackageManager.PERMISSION_GRANTED)
+ missingPermissions.add(permission);
+ }
+ if (!missingPermissions.isEmpty()) {
+ final String[] permissions = missingPermissions
+ .toArray(new String[0]);
+ ActivityCompat.requestPermissions(this, permissions, PERMISSIONS);
+ } else {
+ final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
+ Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
+ onRequestPermissionsResult(PERMISSIONS, REQUIRED_SDK_PERMISSIONS, grantResults);
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode,
+ @NonNull String[] permissions, @NonNull int[] grantResults) {
+ if (requestCode == PERMISSIONS) {
+ for (int grantResult : grantResults) {
+ if (grantResult != PackageManager.PERMISSION_GRANTED) {
+ Toast.makeText(this, R.string.not_granted, Toast.LENGTH_LONG).show();
+ finish();
+ }
+ }
+ checkAppVersion();
+ }
+ }
+
+ private void checkAppVersion() {
+ if (sharedPreferences.getInt(TAG_VERSION_CODE, 0) == versionCode)
+ startNative();
+ else
+ new CopyZipTask(this).execute(getCacheDir() + "/Minetest.zip");
+ }
+
+ private void startNative() {
+ sharedPreferences.edit().putInt(TAG_VERSION_CODE, versionCode).apply();
+ Intent intent = new Intent(this, GameActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ startActivity(intent);
+ }
+
+ @Override
+ public void onBackPressed() {
+ // Prevent abrupt interruption when copy game files from assets
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ unregisterReceiver(myReceiver);
+ }
+}
diff --git a/build/android/app/src/main/java/net/minetest/minetest/UnzipService.java b/build/android/app/src/main/java/net/minetest/minetest/UnzipService.java
new file mode 100644
index 000000000..b69f7f36e
--- /dev/null
+++ b/build/android/app/src/main/java/net/minetest/minetest/UnzipService.java
@@ -0,0 +1,157 @@
+/*
+Minetest
+Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik <MoNTE48@mail.ua>
+Copyright (C) 2014-2020 ubulem, Bektur Mambetov <berkut87@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+package net.minetest.minetest;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Environment;
+import android.widget.Toast;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
+
+public class UnzipService extends IntentService {
+ public static final String ACTION_UPDATE = "net.minetest.minetest.UPDATE";
+ public static final String ACTION_PROGRESS = "net.minetest.minetest.PROGRESS";
+ public static final String ACTION_FAILURE = "net.minetest.minetest.FAILURE";
+ public static final String EXTRA_KEY_IN_FILE = "file";
+ public static final int SUCCESS = -1;
+ public static final int FAILURE = -2;
+ private final int id = 1;
+ private NotificationManager mNotifyManager;
+ private boolean isSuccess = true;
+ private String failureMessage;
+
+ public UnzipService() {
+ super("net.minetest.minetest.UnzipService");
+ }
+
+ private void isDir(String dir, String location) {
+ File f = new File(location, dir);
+ if (!f.isDirectory())
+ f.mkdirs();
+ }
+
+ @Override
+ protected void onHandleIntent(Intent intent) {
+ createNotification();
+ unzip(intent);
+ }
+
+ private void createNotification() {
+ String name = "net.minetest.minetest";
+ String channelId = "Minetest channel";
+ String description = "notifications from Minetest";
+ Notification.Builder builder;
+ if (mNotifyManager == null)
+ mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ int importance = NotificationManager.IMPORTANCE_LOW;
+ NotificationChannel mChannel = null;
+ if (mNotifyManager != null)
+ mChannel = mNotifyManager.getNotificationChannel(channelId);
+ if (mChannel == null) {
+ mChannel = new NotificationChannel(channelId, name, importance);
+ mChannel.setDescription(description);
+ // Configure the notification channel, NO SOUND
+ mChannel.setSound(null, null);
+ mChannel.enableLights(false);
+ mChannel.enableVibration(false);
+ mNotifyManager.createNotificationChannel(mChannel);
+ }
+ builder = new Notification.Builder(this, channelId);
+ } else {
+ builder = new Notification.Builder(this);
+ }
+ builder.setContentTitle(getString(R.string.notification_title))
+ .setSmallIcon(R.mipmap.ic_launcher)
+ .setContentText(getString(R.string.notification_description));
+ mNotifyManager.notify(id, builder.build());
+ }
+
+ private void unzip(Intent intent) {
+ String zip = intent.getStringExtra(EXTRA_KEY_IN_FILE);
+ isDir("Minetest", Environment.getExternalStorageDirectory().toString());
+ String location = Environment.getExternalStorageDirectory() + File.separator + "Minetest" + File.separator;
+ int per = 0;
+ int size = getSummarySize(zip);
+ File zipFile = new File(zip);
+ int readLen;
+ byte[] readBuffer = new byte[8192];
+ try (FileInputStream fileInputStream = new FileInputStream(zipFile);
+ ZipInputStream zipInputStream = new ZipInputStream(fileInputStream)) {
+ ZipEntry ze;
+ while ((ze = zipInputStream.getNextEntry()) != null) {
+ if (ze.isDirectory()) {
+ ++per;
+ isDir(ze.getName(), location);
+ } else {
+ publishProgress(100 * ++per / size);
+ try (OutputStream outputStream = new FileOutputStream(location + ze.getName())) {
+ while ((readLen = zipInputStream.read(readBuffer)) != -1) {
+ outputStream.write(readBuffer, 0, readLen);
+ }
+ }
+ }
+ zipFile.delete();
+ }
+ } catch (IOException e) {
+ isSuccess = false;
+ failureMessage = e.getLocalizedMessage();
+ }
+ }
+
+ private void publishProgress(int progress) {
+ Intent intentUpdate = new Intent(ACTION_UPDATE);
+ intentUpdate.putExtra(ACTION_PROGRESS, progress);
+ if (!isSuccess) intentUpdate.putExtra(ACTION_FAILURE, failureMessage);
+ sendBroadcast(intentUpdate);
+ }
+
+ private int getSummarySize(String zip) {
+ int size = 0;
+ try {
+ ZipFile zipSize = new ZipFile(zip);
+ size += zipSize.size();
+ } catch (IOException e) {
+ Toast.makeText(this, e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
+ }
+ return size;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ mNotifyManager.cancel(id);
+ publishProgress(isSuccess ? SUCCESS : FAILURE);
+ }
+}
diff --git a/build/android/src/main/res/drawable/background.png b/build/android/app/src/main/res/drawable/background.png
index 43bd6089e..43bd6089e 100644
--- a/build/android/src/main/res/drawable/background.png
+++ b/build/android/app/src/main/res/drawable/background.png
Binary files differ
diff --git a/build/android/src/main/res/drawable/bg.xml b/build/android/app/src/main/res/drawable/bg.xml
index c76ec372d..903335ed9 100644
--- a/build/android/src/main/res/drawable/bg.xml
+++ b/build/android/app/src/main/res/drawable/bg.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/background"
- android:tileMode="repeat" /> \ No newline at end of file
+ android:tileMode="repeat" />
diff --git a/build/android/app/src/main/res/layout/activity_main.xml b/build/android/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 000000000..e6f461f14
--- /dev/null
+++ b/build/android/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,30 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/activity_main"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@drawable/bg">
+
+ <ProgressBar
+ android:id="@+id/progressBar"
+ style="@style/CustomProgressBar"
+ android:layout_width="match_parent"
+ android:layout_height="30dp"
+ android:layout_centerInParent="true"
+ android:layout_marginLeft="90dp"
+ android:layout_marginRight="90dp"
+ android:indeterminate="false"
+ android:max="100"
+ android:visibility="gone" />
+
+ <TextView
+ android:id="@+id/textView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/progressBar"
+ android:layout_centerInParent="true"
+ android:background="@android:color/transparent"
+ android:text="@string/loading"
+ android:textColor="#FEFEFE"
+ android:visibility="gone" />
+
+</RelativeLayout>
diff --git a/build/android/src/main/res/mipmap/ic_launcher.png b/build/android/app/src/main/res/mipmap/ic_launcher.png
index 88a83782c..88a83782c 100644
--- a/build/android/src/main/res/mipmap/ic_launcher.png
+++ b/build/android/app/src/main/res/mipmap/ic_launcher.png
Binary files differ
diff --git a/build/android/app/src/main/res/values/strings.xml b/build/android/app/src/main/res/values/strings.xml
new file mode 100644
index 000000000..a6fba70d5
--- /dev/null
+++ b/build/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="label">Minetest</string>
+ <string name="loading">Loading&#8230;</string>
+ <string name="not_granted">Required permission wasn\'t granted, Minetest can\'t run without it</string>
+ <string name="notification_title">Loading Minetest</string>
+ <string name="notification_description">Less than 1 minute&#8230;</string>
+
+</resources>
diff --git a/build/android/app/src/main/res/values/styles.xml b/build/android/app/src/main/res/values/styles.xml
new file mode 100644
index 000000000..618507e63
--- /dev/null
+++ b/build/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools">
+
+ <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
+ <item name="windowActionBar">false</item>
+ <item name="android:windowFullscreen">true</item>
+ <item name="android:windowBackground">@drawable/bg</item>
+ <item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="p">shortEdges</item>
+ </style>
+
+ <style name="InputTheme" parent="Theme.AppCompat.DayNight.Dialog">
+ <item name="windowNoTitle">true</item>
+ <item name="android:windowBackground">@android:color/transparent</item>
+ </style>
+
+ <style name="CustomProgressBar" parent="@style/Widget.AppCompat.ProgressBar.Horizontal">
+ <item name="android:indeterminateOnly">false</item>
+ <item name="android:minHeight">10dip</item>
+ <item name="android:maxHeight">20dip</item>
+ </style>
+
+</resources>
diff --git a/build/android/build.gradle b/build/android/build.gradle
index 3601434f5..8707b563c 100644
--- a/build/android/build.gradle
+++ b/build/android/build.gradle
@@ -1,10 +1,24 @@
+// 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", 3) // Version Minor
+project.ext.set("versionPatch", 0) // Version Patch
+project.ext.set("versionExtra", "-dev") // Version Extra
+project.ext.set("versionCode", 30) // Android Version Code
+// NOTE: +2 after each release!
+// +1 for ARM and +1 for ARM64 APK's, because
+// each APK must have a larger `versionCode` than the previous
+
buildscript {
repositories {
google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.5.1'
+ classpath 'com.android.tools.build:gradle:3.6.3'
+ classpath 'org.ajoberstar.grgit:grgit-gradle:4.0.2'
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
}
}
@@ -15,161 +29,6 @@ allprojects {
}
}
-def curl_version = "7.60.0"
-def irrlicht_revision = "5150"
-def openal_version = "1.18.2"
-def openssl_version = "1.0.2n"
-def sqlite3_version = "3240000"
-
-apply plugin: "com.android.application"
-
-android {
- compileSdkVersion 29
- buildToolsVersion '29.0.2'
-
- defaultConfig {
- versionCode 25
- versionName "${System.env.VERSION_STR}.${versionCode}"
- minSdkVersion 14
- targetSdkVersion 29
- applicationId "net.minetest.minetest"
- manifestPlaceholders = [package: "net.minetest.minetest", project: project.name]
- ndk {
- // Specifies the ABI configurations of your native
- // libraries Gradle should build and package with your APK.
- // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
- abiFilters 'armeabi-v7a', 'x86', 'arm64-v8a'
- }
- }
-
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
-
- lintOptions {
- disable "OldTargetApi", "GoogleAppIndexingWarning"
- }
-
- Properties props = new Properties()
- props.load(new FileInputStream(file("local.properties")))
-
- if (props.getProperty("keystore") != null) {
- signingConfigs {
- release {
- storeFile file(props["keystore"])
- storePassword props["keystore.password"]
- keyAlias props["key"]
- keyPassword props["key.password"]
- }
- }
-
- buildTypes {
- release {
- signingConfig signingConfigs.release
- }
- }
- }
-}
-
-task cleanAssets(type: Delete) {
- delete 'src/main/assets'
-}
-
-task copyAssets {
- dependsOn 'cleanAssets'
- mkdir "src/main/assets"
-
- def mtAssetsFolder = "src/main/assets/Minetest"
- def projRoot = "../.."
- def gameToCopy = "minetest_game"
-
- doLast {
- mkdir "${mtAssetsFolder}"
- mkdir "${mtAssetsFolder}/client"
- mkdir "${mtAssetsFolder}/fonts"
- mkdir "${mtAssetsFolder}/games"
- mkdir "${mtAssetsFolder}/media"
-
- copy {
- from "${projRoot}/minetest.conf.example", "${projRoot}/README.md" into mtAssetsFolder
- }
- copy {
- from "${projRoot}/doc/lgpl-2.1.txt" into "${mtAssetsFolder}/LICENSE.txt"
- }
- copy {
- from "${projRoot}/builtin" into "${mtAssetsFolder}/builtin"
- }
- copy {
- from "${projRoot}/client/shaders" into "${mtAssetsFolder}/client/shaders"
- }
- copy {
- from "${projRoot}/fonts" include "*.ttf" into "${mtAssetsFolder}/fonts"
- }
- copy {
- from "${projRoot}/games/${gameToCopy}" into "${mtAssetsFolder}/games/${gameToCopy}"
- }
- copy {
- from "${projRoot}/po" into "${mtAssetsFolder}/po"
- }
- copy {
- from "${projRoot}/textures" into "${mtAssetsFolder}/textures"
- }
- }
-}
-
-task cleanIconv(type: Delete) {
- delete 'deps/libiconv'
-}
-
-task cleanIrrlicht(type: Delete) {
- delete 'deps/irrlicht'
-}
-
-task cleanLevelDB(type: Delete) {
- delete 'deps/leveldb'
-}
-
-task cleanCURL(type: Delete) {
- delete 'deps/curl'
- delete 'deps/curl-' + curl_version
-}
-
-task cleanOpenSSL(type: Delete) {
- delete 'deps/openssl'
- delete 'deps/openssl-' + openssl_version
- delete 'deps/openssl-' + openssl_version + '.tar.gz'
-}
-
-task cleanOpenAL(type: Delete) {
- delete 'deps/openal-soft'
-}
-
-task cleanFreetype(type: Delete) {
- delete 'deps/freetype2-android'
-}
-
-task cleanOgg(type: Delete) {
- delete 'deps/libvorbis-libogg-android'
-}
-
-task cleanSQLite3(type: Delete) {
- delete 'deps/sqlite-amalgamation-' + sqlite3_version
- delete 'deps/sqlite-amalgamation-' + sqlite3_version + '.zip'
-}
-
-task cleanAll(type: Delete, dependsOn: [clean, cleanAssets, cleanIconv,
- cleanFreetype, cleanIrrlicht, cleanLevelDB, cleanSQLite3, cleanCURL,
- cleanOpenSSL, cleanOpenAL, cleanOgg]) {
- delete 'deps'
- delete 'gen'
- delete 'libs'
- delete 'obj'
- delete 'bin'
- delete 'Debug'
- delete 'and_env'
-}
-
-dependencies {
- implementation 'androidx.core:core:1.1.0'
+task clean(type: Delete) {
+ delete rootProject.buildDir
}
diff --git a/build/android/gradle.properties b/build/android/gradle.properties
index 5465fec0e..53b475cf9 100644
--- a/build/android/gradle.properties
+++ b/build/android/gradle.properties
@@ -1,2 +1,11 @@
+<#if isLowMemory>
+org.gradle.jvmargs=-Xmx4G -XX:MaxPermSize=2G -XX:+HeapDumpOnOutOfMemoryError
+<#else>
+org.gradle.jvmargs=-Xmx16G -XX:MaxPermSize=8G -XX:+HeapDumpOnOutOfMemoryError
+</#if>
+org.gradle.daemon=true
+org.gradle.parallel=true
+org.gradle.parallel.threads=8
+org.gradle.configureondemand=true
android.enableJetifier=true
-android.useAndroidX=true \ No newline at end of file
+android.useAndroidX=true
diff --git a/build/android/gradle/wrapper/gradle-wrapper.jar b/build/android/gradle/wrapper/gradle-wrapper.jar
index 6b6ea3ab4..5c2d1cf01 100644
--- a/build/android/gradle/wrapper/gradle-wrapper.jar
+++ b/build/android/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/build/android/gradle/wrapper/gradle-wrapper.properties b/build/android/gradle/wrapper/gradle-wrapper.properties
index 22ac96460..d612cf333 100644
--- a/build/android/gradle/wrapper/gradle-wrapper.properties
+++ b/build/android/gradle/wrapper/gradle-wrapper.properties
@@ -1 +1,2 @@
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
+#Mon Apr 06 00:06:16 CEST 2020
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip
diff --git a/build/android/gradlew b/build/android/gradlew
index cccdd3d51..83f2acfdc 100755
--- a/build/android/gradlew
+++ b/build/android/gradlew
@@ -1,5 +1,21 @@
#!/usr/bin/env sh
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
##############################################################################
##
## Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
@@ -109,8 +125,8 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
diff --git a/build/android/gradlew.bat b/build/android/gradlew.bat
index f9553162f..9618d8d96 100644
--- a/build/android/gradlew.bat
+++ b/build/android/gradlew.bat
@@ -1,3 +1,19 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk
deleted file mode 100644
index 72b0daab6..000000000
--- a/build/android/jni/Android.mk
+++ /dev/null
@@ -1,446 +0,0 @@
-LOCAL_PATH := $(call my-dir)/..
-
-#LOCAL_ADDRESS_SANITIZER:=true
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := Irrlicht
-LOCAL_SRC_FILES := deps/irrlicht/lib/Android/libIrrlicht.a
-include $(PREBUILT_STATIC_LIBRARY)
-
-ifeq ($(HAVE_LEVELDB), 1)
- include $(CLEAR_VARS)
- LOCAL_MODULE := LevelDB
- LOCAL_SRC_FILES := deps/leveldb/libleveldb.a
- include $(PREBUILT_STATIC_LIBRARY)
-endif
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := curl
-LOCAL_SRC_FILES := deps/curl/lib/.libs/libcurl.a
-include $(PREBUILT_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := freetype
-LOCAL_SRC_FILES := deps/freetype2-android/Android/obj/local/$(TARGET_ARCH_ABI)/libfreetype2-static.a
-include $(PREBUILT_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := iconv
-LOCAL_SRC_FILES := deps/libiconv/lib/.libs/libiconv.so
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := openal
-LOCAL_SRC_FILES := deps/openal-soft/libs/$(TARGET_LIBDIR)/libopenal.so
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := ogg
-LOCAL_SRC_FILES := deps/libvorbis-libogg-android/libs/$(TARGET_LIBDIR)/libogg.so
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := vorbis
-LOCAL_SRC_FILES := deps/libvorbis-libogg-android/libs/$(TARGET_LIBDIR)/libvorbis.so
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := ssl
-LOCAL_SRC_FILES := deps/openssl/libssl.a
-include $(PREBUILT_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := crypto
-LOCAL_SRC_FILES := deps/openssl/libcrypto.a
-include $(PREBUILT_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := minetest
-
-LOCAL_CPP_FEATURES += exceptions
-
-ifdef GPROF
-GPROF_DEF=-DGPROF
-endif
-
-LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ \
- -DHAVE_TOUCHSCREENGUI \
- -DENABLE_GLES=1 \
- -DUSE_CURL=1 \
- -DUSE_SOUND=1 \
- -DUSE_FREETYPE=1 \
- -DUSE_LEVELDB=$(HAVE_LEVELDB) \
- $(GPROF_DEF) \
- -pipe -fstrict-aliasing
-
-ifndef NDEBUG
-LOCAL_CFLAGS += -g -D_DEBUG -O0 -fno-omit-frame-pointer
-else
-LOCAL_CFLAGS += $(TARGET_CFLAGS_ADDON)
-endif
-
-ifdef GPROF
-PROFILER_LIBS := android-ndk-profiler
-LOCAL_CFLAGS += -pg
-endif
-
-# LOCAL_CFLAGS += -fsanitize=address
-# LOCAL_LDFLAGS += -fsanitize=address
-
-ifeq ($(TARGET_ABI),x86)
-LOCAL_CFLAGS += -fno-stack-protector
-endif
-
-LOCAL_C_INCLUDES := \
- jni/src \
- jni/src/script \
- jni/lib/gmp \
- jni/lib/lua/src \
- jni/lib/jsoncpp \
- jni/src/cguittfont \
- deps/irrlicht/include \
- deps/libiconv/include \
- deps/freetype2-android/include \
- deps/curl/include \
- deps/openal-soft/jni/OpenAL/include \
- deps/libvorbis-libogg-android/jni/include \
- deps/leveldb/include \
- deps/sqlite/
-
-LOCAL_SRC_FILES := \
- jni/src/ban.cpp \
- jni/src/chat.cpp \
- jni/src/client/activeobjectmgr.cpp \
- jni/src/client/camera.cpp \
- jni/src/client/client.cpp \
- jni/src/client/clientenvironment.cpp \
- jni/src/client/clientlauncher.cpp \
- jni/src/client/clientmap.cpp \
- jni/src/client/clientmedia.cpp \
- jni/src/client/clientobject.cpp \
- jni/src/client/clouds.cpp \
- jni/src/client/content_cao.cpp \
- jni/src/client/content_cso.cpp \
- jni/src/client/content_mapblock.cpp \
- jni/src/client/filecache.cpp \
- jni/src/client/fontengine.cpp \
- jni/src/client/game.cpp \
- jni/src/client/gameui.cpp \
- jni/src/client/guiscalingfilter.cpp \
- jni/src/client/hud.cpp \
- jni/src/clientiface.cpp \
- jni/src/client/imagefilters.cpp \
- jni/src/client/inputhandler.cpp \
- jni/src/client/joystick_controller.cpp \
- jni/src/client/keycode.cpp \
- jni/src/client/localplayer.cpp \
- jni/src/client/mapblock_mesh.cpp \
- jni/src/client/mesh.cpp \
- jni/src/client/meshgen/collector.cpp \
- jni/src/client/mesh_generator_thread.cpp \
- jni/src/client/minimap.cpp \
- jni/src/client/particles.cpp \
- jni/src/client/render/anaglyph.cpp \
- jni/src/client/render/core.cpp \
- jni/src/client/render/factory.cpp \
- jni/src/client/renderingengine.cpp \
- jni/src/client/render/interlaced.cpp \
- jni/src/client/render/pageflip.cpp \
- jni/src/client/render/plain.cpp \
- jni/src/client/render/sidebyside.cpp \
- jni/src/client/render/stereo.cpp \
- jni/src/client/shader.cpp \
- jni/src/client/sky.cpp \
- jni/src/client/sound.cpp \
- jni/src/client/sound_openal.cpp \
- jni/src/client/tile.cpp \
- jni/src/client/wieldmesh.cpp \
- jni/src/collision.cpp \
- jni/src/content/content.cpp \
- jni/src/content_mapnode.cpp \
- jni/src/content/mods.cpp \
- jni/src/content_nodemeta.cpp \
- jni/src/content/packages.cpp \
- jni/src/content_sao.cpp \
- jni/src/content/subgames.cpp \
- jni/src/convert_json.cpp \
- jni/src/craftdef.cpp \
- jni/src/database/database.cpp \
- jni/src/database/database-dummy.cpp \
- jni/src/database/database-files.cpp \
- jni/src/database/database-leveldb.cpp \
- jni/src/database/database-sqlite3.cpp \
- jni/src/debug.cpp \
- jni/src/defaultsettings.cpp \
- jni/src/emerge.cpp \
- jni/src/environment.cpp \
- jni/src/face_position_cache.cpp \
- jni/src/filesys.cpp \
- jni/src/genericobject.cpp \
- jni/src/gettext.cpp \
- jni/src/gui/guiAnimatedImage.cpp \
- jni/src/gui/guiBackgroundImage.cpp \
- jni/src/gui/guiBox.cpp \
- jni/src/gui/guiButton.cpp \
- jni/src/gui/guiButtonImage.cpp \
- jni/src/gui/guiButtonItemImage.cpp \
- jni/src/gui/guiChatConsole.cpp \
- jni/src/gui/guiConfirmRegistration.cpp \
- jni/src/gui/guiEditBoxWithScrollbar.cpp \
- jni/src/gui/guiEngine.cpp \
- jni/src/gui/guiFormSpecMenu.cpp \
- jni/src/gui/guiHyperText.cpp \
- jni/src/gui/guiInventoryList.cpp \
- jni/src/gui/guiItemImage.cpp \
- jni/src/gui/guiKeyChangeMenu.cpp \
- jni/src/gui/guiPasswordChange.cpp \
- jni/src/gui/guiPathSelectMenu.cpp \
- jni/src/gui/guiScrollBar.cpp \
- jni/src/gui/guiSkin.cpp \
- jni/src/gui/guiTable.cpp \
- jni/src/gui/guiVolumeChange.cpp \
- jni/src/gui/intlGUIEditBox.cpp \
- jni/src/gui/modalMenu.cpp \
- jni/src/gui/profilergraph.cpp \
- jni/src/gui/touchscreengui.cpp \
- jni/src/httpfetch.cpp \
- jni/src/hud.cpp \
- jni/src/inventory.cpp \
- jni/src/inventorymanager.cpp \
- jni/src/irrlicht_changes/CGUITTFont.cpp \
- jni/src/irrlicht_changes/static_text.cpp \
- jni/src/itemdef.cpp \
- jni/src/itemstackmetadata.cpp \
- jni/src/light.cpp \
- jni/src/log.cpp \
- jni/src/main.cpp \
- jni/src/mapblock.cpp \
- jni/src/map.cpp \
- jni/src/mapgen/cavegen.cpp \
- jni/src/mapgen/dungeongen.cpp \
- jni/src/mapgen/mapgen_carpathian.cpp \
- jni/src/mapgen/mapgen.cpp \
- jni/src/mapgen/mapgen_flat.cpp \
- jni/src/mapgen/mapgen_fractal.cpp \
- jni/src/mapgen/mapgen_singlenode.cpp \
- jni/src/mapgen/mapgen_v5.cpp \
- jni/src/mapgen/mapgen_v6.cpp \
- jni/src/mapgen/mapgen_v7.cpp \
- jni/src/mapgen/mapgen_valleys.cpp \
- jni/src/mapgen/mg_biome.cpp \
- jni/src/mapgen/mg_decoration.cpp \
- jni/src/mapgen/mg_ore.cpp \
- jni/src/mapgen/mg_schematic.cpp \
- jni/src/mapgen/treegen.cpp \
- jni/src/mapnode.cpp \
- jni/src/mapsector.cpp \
- jni/src/map_settings_manager.cpp \
- jni/src/metadata.cpp \
- jni/src/modchannels.cpp \
- jni/src/nameidmapping.cpp \
- jni/src/nodedef.cpp \
- jni/src/nodemetadata.cpp \
- jni/src/nodetimer.cpp \
- jni/src/noise.cpp \
- jni/src/objdef.cpp \
- jni/src/object_properties.cpp \
- jni/src/pathfinder.cpp \
- jni/src/player.cpp \
- jni/src/porting_android.cpp \
- jni/src/porting.cpp \
- jni/src/profiler.cpp \
- jni/src/raycast.cpp \
- jni/src/reflowscan.cpp \
- jni/src/remoteplayer.cpp \
- jni/src/rollback.cpp \
- jni/src/rollback_interface.cpp \
- jni/src/serialization.cpp \
- jni/src/server/activeobjectmgr.cpp \
- jni/src/server.cpp \
- jni/src/serverenvironment.cpp \
- jni/src/serverlist.cpp \
- jni/src/server/mods.cpp \
- jni/src/serverobject.cpp \
- jni/src/settings.cpp \
- jni/src/staticobject.cpp \
- jni/src/tileanimation.cpp \
- jni/src/tool.cpp \
- jni/src/translation.cpp \
- jni/src/unittest/test_authdatabase.cpp \
- jni/src/unittest/test_collision.cpp \
- jni/src/unittest/test_compression.cpp \
- jni/src/unittest/test_connection.cpp \
- jni/src/unittest/test.cpp \
- jni/src/unittest/test_filepath.cpp \
- jni/src/unittest/test_gameui.cpp \
- jni/src/unittest/test_inventory.cpp \
- jni/src/unittest/test_mapnode.cpp \
- jni/src/unittest/test_map_settings_manager.cpp \
- jni/src/unittest/test_nodedef.cpp \
- jni/src/unittest/test_noderesolver.cpp \
- jni/src/unittest/test_noise.cpp \
- jni/src/unittest/test_objdef.cpp \
- jni/src/unittest/test_profiler.cpp \
- jni/src/unittest/test_random.cpp \
- jni/src/unittest/test_schematic.cpp \
- jni/src/unittest/test_serialization.cpp \
- jni/src/unittest/test_settings.cpp \
- jni/src/unittest/test_socket.cpp \
- jni/src/unittest/test_utilities.cpp \
- jni/src/unittest/test_voxelalgorithms.cpp \
- jni/src/unittest/test_voxelmanipulator.cpp \
- jni/src/util/areastore.cpp \
- jni/src/util/auth.cpp \
- jni/src/util/base64.cpp \
- jni/src/util/directiontables.cpp \
- jni/src/util/enriched_string.cpp \
- jni/src/util/ieee_float.cpp \
- jni/src/util/numeric.cpp \
- jni/src/util/pointedthing.cpp \
- jni/src/util/quicktune.cpp \
- jni/src/util/serialize.cpp \
- jni/src/util/sha1.cpp \
- jni/src/util/srp.cpp \
- jni/src/util/string.cpp \
- jni/src/util/timetaker.cpp \
- jni/src/version.cpp \
- jni/src/voxelalgorithms.cpp \
- jni/src/voxel.cpp
-
-
-# intentionally kept out (we already build openssl itself): jni/src/util/sha256.c
-
-# Network
-LOCAL_SRC_FILES += \
- jni/src/network/address.cpp \
- jni/src/network/connection.cpp \
- jni/src/network/networkpacket.cpp \
- jni/src/network/clientopcodes.cpp \
- jni/src/network/clientpackethandler.cpp \
- jni/src/network/connectionthreads.cpp \
- jni/src/network/serveropcodes.cpp \
- jni/src/network/serverpackethandler.cpp \
- jni/src/network/socket.cpp \
-
-# lua api
-LOCAL_SRC_FILES += \
- jni/src/script/common/c_content.cpp \
- jni/src/script/common/c_converter.cpp \
- jni/src/script/common/c_internal.cpp \
- jni/src/script/common/c_types.cpp \
- jni/src/script/common/helper.cpp \
- jni/src/script/cpp_api/s_async.cpp \
- jni/src/script/cpp_api/s_base.cpp \
- jni/src/script/cpp_api/s_client.cpp \
- jni/src/script/cpp_api/s_entity.cpp \
- jni/src/script/cpp_api/s_env.cpp \
- jni/src/script/cpp_api/s_inventory.cpp \
- jni/src/script/cpp_api/s_item.cpp \
- jni/src/script/cpp_api/s_mainmenu.cpp \
- jni/src/script/cpp_api/s_modchannels.cpp \
- jni/src/script/cpp_api/s_node.cpp \
- jni/src/script/cpp_api/s_nodemeta.cpp \
- jni/src/script/cpp_api/s_player.cpp \
- jni/src/script/cpp_api/s_security.cpp \
- jni/src/script/cpp_api/s_server.cpp \
- jni/src/script/lua_api/l_areastore.cpp \
- jni/src/script/lua_api/l_auth.cpp \
- jni/src/script/lua_api/l_base.cpp \
- jni/src/script/lua_api/l_camera.cpp \
- jni/src/script/lua_api/l_client.cpp \
- jni/src/script/lua_api/l_craft.cpp \
- jni/src/script/lua_api/l_env.cpp \
- jni/src/script/lua_api/l_inventory.cpp \
- jni/src/script/lua_api/l_item.cpp \
- jni/src/script/lua_api/l_itemstackmeta.cpp\
- jni/src/script/lua_api/l_localplayer.cpp \
- jni/src/script/lua_api/l_mainmenu.cpp \
- jni/src/script/lua_api/l_mapgen.cpp \
- jni/src/script/lua_api/l_metadata.cpp \
- jni/src/script/lua_api/l_minimap.cpp \
- jni/src/script/lua_api/l_modchannels.cpp \
- jni/src/script/lua_api/l_nodemeta.cpp \
- jni/src/script/lua_api/l_nodetimer.cpp \
- jni/src/script/lua_api/l_noise.cpp \
- jni/src/script/lua_api/l_object.cpp \
- jni/src/script/lua_api/l_playermeta.cpp \
- jni/src/script/lua_api/l_particles.cpp \
- jni/src/script/lua_api/l_particles_local.cpp\
- jni/src/script/lua_api/l_rollback.cpp \
- jni/src/script/lua_api/l_server.cpp \
- jni/src/script/lua_api/l_settings.cpp \
- jni/src/script/lua_api/l_sound.cpp \
- jni/src/script/lua_api/l_http.cpp \
- jni/src/script/lua_api/l_storage.cpp \
- jni/src/script/lua_api/l_util.cpp \
- jni/src/script/lua_api/l_vmanip.cpp \
- jni/src/script/scripting_client.cpp \
- jni/src/script/scripting_server.cpp \
- jni/src/script/scripting_mainmenu.cpp
-
-#freetype2 support
-#LOCAL_SRC_FILES += jni/src/cguittfont/xCGUITTFont.cpp
-
-# GMP
-LOCAL_SRC_FILES += jni/lib/gmp/mini-gmp.c
-
-# Lua
-LOCAL_SRC_FILES += \
- jni/lib/lua/src/lapi.c \
- jni/lib/lua/src/lauxlib.c \
- jni/lib/lua/src/lbaselib.c \
- jni/lib/lua/src/lcode.c \
- jni/lib/lua/src/ldblib.c \
- jni/lib/lua/src/ldebug.c \
- jni/lib/lua/src/ldo.c \
- jni/lib/lua/src/ldump.c \
- jni/lib/lua/src/lfunc.c \
- jni/lib/lua/src/lgc.c \
- jni/lib/lua/src/linit.c \
- jni/lib/lua/src/liolib.c \
- jni/lib/lua/src/llex.c \
- jni/lib/lua/src/lmathlib.c \
- jni/lib/lua/src/lmem.c \
- jni/lib/lua/src/loadlib.c \
- jni/lib/lua/src/lobject.c \
- jni/lib/lua/src/lopcodes.c \
- jni/lib/lua/src/loslib.c \
- jni/lib/lua/src/lparser.c \
- jni/lib/lua/src/lstate.c \
- jni/lib/lua/src/lstring.c \
- jni/lib/lua/src/lstrlib.c \
- jni/lib/lua/src/ltable.c \
- jni/lib/lua/src/ltablib.c \
- jni/lib/lua/src/ltm.c \
- jni/lib/lua/src/lundump.c \
- jni/lib/lua/src/lvm.c \
- jni/lib/lua/src/lzio.c \
- jni/lib/lua/src/print.c
-
-# SQLite3
-LOCAL_SRC_FILES += deps/sqlite/sqlite3.c
-
-# Threading
-LOCAL_SRC_FILES += \
- jni/src/threading/event.cpp \
- jni/src/threading/semaphore.cpp \
- jni/src/threading/thread.cpp
-
-# JSONCPP
-LOCAL_SRC_FILES += jni/lib/jsoncpp/jsoncpp.cpp
-
-LOCAL_SHARED_LIBRARIES := iconv openal ogg vorbis
-LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS)
-
-ifeq ($(HAVE_LEVELDB), 1)
- LOCAL_STATIC_LIBRARIES += LevelDB
-endif
-LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid
-
-include $(BUILD_SHARED_LIBRARY)
-
-# at the end of Android.mk
-ifdef GPROF
-$(call import-module,android-ndk-profiler)
-endif
-$(call import-module,android/native_app_glue)
diff --git a/build/android/jni/Application.mk b/build/android/jni/Application.mk
deleted file mode 100644
index f5eb96ed1..000000000
--- a/build/android/jni/Application.mk
+++ /dev/null
@@ -1,9 +0,0 @@
-APP_PLATFORM := ${APP_PLATFORM}
-APP_ABI := ${TARGET_ABI}
-APP_STL := c++_shared
-APP_MODULES := minetest
-ifndef NDEBUG
-APP_OPTIM := debug
-endif
-
-APP_CPPFLAGS += -fexceptions -std=c++11 -frtti
diff --git a/build/android/jni/Deps.mk b/build/android/jni/Deps.mk
deleted file mode 100644
index 73db2353f..000000000
--- a/build/android/jni/Deps.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-APP_PLATFORM := ${APP_PLATFORM}
-APP_ABI := ${TARGET_ABI}
-APP_STL := c++_shared
-APP_DEPRECATED_HEADERS := true
-
-APP_CFLAGS += ${TARGET_CFLAGS_ADDON}
-APP_CPPFLAGS += ${TARGET_CXXFLAGS_ADDON} -fexceptions -std=c++11
diff --git a/build/android/jni/Irrlicht.mk b/build/android/jni/Irrlicht.mk
deleted file mode 100644
index cedfe3139..000000000
--- a/build/android/jni/Irrlicht.mk
+++ /dev/null
@@ -1,8 +0,0 @@
-APP_PLATFORM := ${APP_PLATFORM}
-APP_ABI := ${TARGET_ABI}
-APP_STL := c++_shared
-APP_DEPRECATED_HEADERS := true
-APP_MODULES := Irrlicht
-
-APP_CLAFGS += ${TARGET_CFLAGS_ADDON}
-APP_CPPFLAGS += ${TARGET_CXXFLAGS_ADDON} -fexceptions
diff --git a/build/android/native/build.gradle b/build/android/native/build.gradle
new file mode 100644
index 000000000..cbd50db6a
--- /dev/null
+++ b/build/android/native/build.gradle
@@ -0,0 +1,59 @@
+apply plugin: 'com.android.library'
+import org.ajoberstar.grgit.Grgit
+
+android {
+ compileSdkVersion 29
+ buildToolsVersion '29.0.3'
+ ndkVersion '21.1.6352462'
+ defaultConfig {
+ minSdkVersion 16
+ targetSdkVersion 29
+ externalNativeBuild {
+ ndkBuild {
+ arguments '-j8',
+ "versionMajor=${versionMajor}",
+ "versionMinor=${versionMinor}",
+ "versionPatch=${versionPatch}",
+ "versionExtra=${versionExtra}"
+ }
+ }
+ }
+
+ externalNativeBuild {
+ ndkBuild {
+ path file('jni/Android.mk')
+ }
+ }
+
+ // supported architectures
+ splits {
+ abi {
+ enable true
+ reset()
+ include 'armeabi-v7a', 'arm64-v8a'//, 'x86'
+ }
+ }
+
+ buildTypes {
+ release {
+ externalNativeBuild {
+ ndkBuild {
+ arguments 'NDEBUG=1'
+ }
+ }
+ }
+ }
+}
+
+task cloneGitRepo() {
+ def destination = file('deps')
+ if(!destination.exists()) {
+ def grgit = Grgit.clone(
+ dir: destination,
+ uri: 'https://github.com/minetest/minetest_android_deps_binaries'
+ )
+ grgit.close()
+ }
+}
+
+preBuild.dependsOn cloneGitRepo
diff --git a/build/android/native/jni/Android.mk b/build/android/native/jni/Android.mk
new file mode 100644
index 000000000..140947e6a
--- /dev/null
+++ b/build/android/native/jni/Android.mk
@@ -0,0 +1,219 @@
+LOCAL_PATH := $(call my-dir)/..
+
+#LOCAL_ADDRESS_SANITIZER:=true
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := Curl
+LOCAL_SRC_FILES := deps/Android/Curl/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libcurl.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := Freetype
+LOCAL_SRC_FILES := deps/Android/Freetype/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libfreetype.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := Irrlicht
+LOCAL_SRC_FILES := deps/Android/Irrlicht/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libIrrlicht.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+#include $(CLEAR_VARS)
+#LOCAL_MODULE := LevelDB
+#LOCAL_SRC_FILES := deps/Android/LevelDB/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libleveldb.a
+#include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := LuaJIT
+LOCAL_SRC_FILES := deps/Android/LuaJIT/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libluajit.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := mbedTLS
+LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedtls.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := mbedx509
+LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedx509.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := mbedcrypto
+LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedcrypto.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := OpenAL
+LOCAL_SRC_FILES := deps/Android/OpenAL-Soft/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libopenal.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+# You can use `OpenSSL and Crypto` instead `mbedTLS mbedx509 mbedcrypto`,
+#but it increase APK size on ~0.7MB
+#include $(CLEAR_VARS)
+#LOCAL_MODULE := OpenSSL
+#LOCAL_SRC_FILES := deps/Android/OpenSSL/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libssl.a
+#include $(PREBUILT_STATIC_LIBRARY)
+
+#include $(CLEAR_VARS)
+#LOCAL_MODULE := Crypto
+#LOCAL_SRC_FILES := deps/Android/OpenSSL/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libcrypto.a
+#include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := Vorbis
+LOCAL_SRC_FILES := deps/Android/Vorbis/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libvorbis.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := Minetest
+
+LOCAL_CFLAGS += \
+ -DJSONCPP_NO_LOCALE_SUPPORT \
+ -DHAVE_TOUCHSCREENGUI \
+ -DENABLE_GLES=1 \
+ -DUSE_CURL=1 \
+ -DUSE_SOUND=1 \
+ -DUSE_FREETYPE=1 \
+ -DUSE_LEVELDB=0 \
+ -DUSE_LUAJIT=1 \
+ -DVERSION_MAJOR=${versionMajor} \
+ -DVERSION_MINOR=${versionMinor} \
+ -DVERSION_PATCH=${versionPatch} \
+ -DVERSION_EXTRA=${versionExtra} \
+ $(GPROF_DEF)
+
+ifdef NDEBUG
+ LOCAL_CFLAGS += -DNDEBUG=1
+endif
+
+ifdef GPROF
+ GPROF_DEF := -DGPROF
+ PROFILER_LIBS := android-ndk-profiler
+ LOCAL_CFLAGS += -pg
+endif
+
+LOCAL_C_INCLUDES := \
+ ../../../src \
+ ../../../src/script \
+ ../../../lib/gmp \
+ ../../../lib/jsoncpp \
+ deps/Android/Curl/include \
+ deps/Android/Freetype/include \
+ deps/Android/Irrlicht/include \
+ deps/Android/LevelDB/include \
+ deps/Android/libiconv/include \
+ deps/Android/libiconv/libcharset/include \
+ deps/Android/LuaJIT/src \
+ deps/Android/OpenAL-Soft/include \
+ deps/Android/sqlite \
+ deps/Android/Vorbis/include
+
+LOCAL_SRC_FILES := \
+ $(wildcard ../../../src/client/*.cpp) \
+ $(wildcard ../../../src/client/*/*.cpp) \
+ $(wildcard ../../../src/content/*.cpp) \
+ ../../../src/database/database.cpp \
+ ../../../src/database/database-dummy.cpp \
+ ../../../src/database/database-files.cpp \
+ ../../../src/database/database-sqlite3.cpp \
+ $(wildcard ../../../src/gui/*.cpp) \
+ $(wildcard ../../../src/irrlicht_changes/*.cpp) \
+ $(wildcard ../../../src/mapgen/*.cpp) \
+ $(wildcard ../../../src/network/*.cpp) \
+ $(wildcard ../../../src/script/*.cpp) \
+ $(wildcard ../../../src/script/*/*.cpp) \
+ $(wildcard ../../../src/server/*.cpp) \
+ $(wildcard ../../../src/threading/*.cpp) \
+ $(wildcard ../../../src/util/*.c) \
+ $(wildcard ../../../src/util/*.cpp) \
+ ../../../src/ban.cpp \
+ ../../../src/chat.cpp \
+ ../../../src/clientiface.cpp \
+ ../../../src/collision.cpp \
+ ../../../src/content_mapnode.cpp \
+ ../../../src/content_nodemeta.cpp \
+ ../../../src/convert_json.cpp \
+ ../../../src/craftdef.cpp \
+ ../../../src/debug.cpp \
+ ../../../src/defaultsettings.cpp \
+ ../../../src/emerge.cpp \
+ ../../../src/environment.cpp \
+ ../../../src/face_position_cache.cpp \
+ ../../../src/filesys.cpp \
+ ../../../src/gettext.cpp \
+ ../../../src/httpfetch.cpp \
+ ../../../src/hud.cpp \
+ ../../../src/inventory.cpp \
+ ../../../src/inventorymanager.cpp \
+ ../../../src/itemdef.cpp \
+ ../../../src/itemstackmetadata.cpp \
+ ../../../src/light.cpp \
+ ../../../src/log.cpp \
+ ../../../src/main.cpp \
+ ../../../src/map.cpp \
+ ../../../src/map_settings_manager.cpp \
+ ../../../src/mapblock.cpp \
+ ../../../src/mapnode.cpp \
+ ../../../src/mapsector.cpp \
+ ../../../src/metadata.cpp \
+ ../../../src/modchannels.cpp \
+ ../../../src/nameidmapping.cpp \
+ ../../../src/nodedef.cpp \
+ ../../../src/nodemetadata.cpp \
+ ../../../src/nodetimer.cpp \
+ ../../../src/noise.cpp \
+ ../../../src/objdef.cpp \
+ ../../../src/object_properties.cpp \
+ ../../../src/particles.cpp \
+ ../../../src/pathfinder.cpp \
+ ../../../src/player.cpp \
+ ../../../src/porting.cpp \
+ ../../../src/porting_android.cpp \
+ ../../../src/profiler.cpp \
+ ../../../src/raycast.cpp \
+ ../../../src/reflowscan.cpp \
+ ../../../src/remoteplayer.cpp \
+ ../../../src/rollback.cpp \
+ ../../../src/rollback_interface.cpp \
+ ../../../src/serialization.cpp \
+ ../../../src/server.cpp \
+ ../../../src/serverenvironment.cpp \
+ ../../../src/serverlist.cpp \
+ ../../../src/settings.cpp \
+ ../../../src/staticobject.cpp \
+ ../../../src/texture_override.cpp \
+ ../../../src/tileanimation.cpp \
+ ../../../src/tool.cpp \
+ ../../../src/translation.cpp \
+ ../../../src/version.cpp \
+ ../../../src/voxel.cpp \
+ ../../../src/voxelalgorithms.cpp
+
+# LevelDB backend is disabled
+# ../../../src/database/database-leveldb.cpp
+
+# GMP
+LOCAL_SRC_FILES += ../../../lib/gmp/mini-gmp.c
+
+# JSONCPP
+LOCAL_SRC_FILES += ../../../lib/jsoncpp/jsoncpp.cpp
+
+# iconv
+LOCAL_SRC_FILES += \
+ deps/Android/libiconv/lib/iconv.c \
+ deps/Android/libiconv/libcharset/lib/localcharset.c
+
+# SQLite3
+LOCAL_SRC_FILES += deps/Android/sqlite/sqlite3.c
+
+LOCAL_STATIC_LIBRARIES += Curl Freetype Irrlicht OpenAL mbedTLS mbedx509 mbedcrypto Vorbis LuaJIT android_native_app_glue $(PROFILER_LIBS) #LevelDB
+#OpenSSL Crypto
+
+LOCAL_LDLIBS := -lEGL -lGLESv1_CM -lGLESv2 -landroid -lOpenSLES
+
+include $(BUILD_SHARED_LIBRARY)
+
+ifdef GPROF
+$(call import-module,android-ndk-profiler)
+endif
+$(call import-module,android/native_app_glue)
diff --git a/build/android/native/jni/Application.mk b/build/android/native/jni/Application.mk
new file mode 100644
index 000000000..82f0148f0
--- /dev/null
+++ b/build/android/native/jni/Application.mk
@@ -0,0 +1,32 @@
+APP_PLATFORM := ${APP_PLATFORM}
+APP_ABI := ${TARGET_ABI}
+APP_STL := c++_shared
+NDK_TOOLCHAIN_VERSION := clang
+APP_SHORT_COMMANDS := true
+APP_MODULES := Minetest
+
+APP_CPPFLAGS := -Ofast -fvisibility=hidden -fexceptions -Wno-deprecated-declarations -Wno-extra-tokens
+
+ifeq ($(APP_ABI),armeabi-v7a)
+APP_CPPFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb
+endif
+
+#ifeq ($(APP_ABI),x86)
+#APP_CPPFLAGS += -march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32 -funroll-loops
+#endif
+
+ifndef NDEBUG
+APP_CPPFLAGS := -g -D_DEBUG -O0 -fno-omit-frame-pointer -fexceptions
+endif
+
+APP_CFLAGS := $(APP_CPPFLAGS) -Wno-parentheses-equality #-Werror=shorten-64-to-32
+APP_CXXFLAGS := $(APP_CPPFLAGS) -frtti -std=gnu++17
+APP_LDFLAGS := -Wl,--no-warn-mismatch,--gc-sections,--icf=safe
+
+ifeq ($(APP_ABI),arm64-v8a)
+APP_LDFLAGS := -Wl,--no-warn-mismatch,--gc-sections
+endif
+
+ifndef NDEBUG
+APP_LDFLAGS :=
+endif
diff --git a/build/android/native/src/main/AndroidManifest.xml b/build/android/native/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..19451c7fd
--- /dev/null
+++ b/build/android/native/src/main/AndroidManifest.xml
@@ -0,0 +1 @@
+<manifest package="net.minetest" />
diff --git a/build/android/patches/irrlicht-back_button.patch b/build/android/patches/irrlicht-back_button.patch
deleted file mode 100644
index e17b81347..000000000
--- a/build/android/patches/irrlicht-back_button.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp.orig 2015-08-29 15:43:09.000000000 +0300
-+++ irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp 2016-05-13 21:36:22.880388505 +0300
-@@ -486,7 +486,7 @@
- event.KeyInput.Char = 0;
- }
-
-- device->postEventFromUser(event);
-+ status = device->postEventFromUser(event);
- }
- break;
- default:
-@@ -543,7 +543,7 @@
- KeyMap[1] = KEY_LBUTTON; // AKEYCODE_SOFT_LEFT
- KeyMap[2] = KEY_RBUTTON; // AKEYCODE_SOFT_RIGHT
- KeyMap[3] = KEY_HOME; // AKEYCODE_HOME
-- KeyMap[4] = KEY_BACK; // AKEYCODE_BACK
-+ KeyMap[4] = KEY_CANCEL; // AKEYCODE_BACK
- KeyMap[5] = KEY_UNKNOWN; // AKEYCODE_CALL
- KeyMap[6] = KEY_UNKNOWN; // AKEYCODE_ENDCALL
- KeyMap[7] = KEY_KEY_0; // AKEYCODE_0
diff --git a/build/android/patches/irrlicht-native_activity.patch b/build/android/patches/irrlicht-native_activity.patch
deleted file mode 100644
index a9d2610c3..000000000
--- a/build/android/patches/irrlicht-native_activity.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- irrlicht/source/Irrlicht/CEGLManager.cpp.orig 2018-09-11 18:19:51.453403631 +0300
-+++ irrlicht/source/Irrlicht/CEGLManager.cpp 2018-09-11 18:36:24.603471869 +0300
-@@ -9,6 +9,10 @@
- #include "irrString.h"
- #include "os.h"
-
-+#if defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
-+#include <android/native_activity.h>
-+#endif
-+
- namespace irr
- {
- namespace video
diff --git a/build/android/patches/irrlicht-texturehack.patch b/build/android/patches/irrlicht-texturehack.patch
deleted file mode 100644
index a458ede72..000000000
--- a/build/android/patches/irrlicht-texturehack.patch
+++ /dev/null
@@ -1,240 +0,0 @@
---- irrlicht/source/Irrlicht/COGLESTexture.cpp.orig 2014-06-22 17:01:13.266568869 +0200
-+++ irrlicht/source/Irrlicht/COGLESTexture.cpp 2014-06-22 17:03:59.298572810 +0200
-@@ -366,112 +366,140 @@
- void(*convert)(const void*, s32, void*) = 0;
- getFormatParameters(ColorFormat, InternalFormat, filtering, PixelFormat, PixelType, convert);
-
-- // make sure we don't change the internal format of existing images
-- if (!newTexture)
-- InternalFormat = oldInternalFormat;
--
-- Driver->setActiveTexture(0, this);
--
-- if (Driver->testGLError())
-- os::Printer::log("Could not bind Texture", ELL_ERROR);
--
-- // mipmap handling for main texture
-- if (!level && newTexture)
-- {
-- // auto generate if possible and no mipmap data is given
-- if (!IsCompressed && HasMipMaps && !mipmapData && Driver->queryFeature(EVDF_MIP_MAP_AUTO_UPDATE))
-- {
-- if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_SPEED))
-- glHint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
-- else if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_QUALITY))
-- glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
-- else
-- glHint(GL_GENERATE_MIPMAP_HINT, GL_DONT_CARE);
-+ bool retry = false;
-+
-+ do {
-+ if (retry) {
-+ InternalFormat = GL_RGBA;
-+ PixelFormat = GL_RGBA;
-+ convert = CColorConverter::convert_A8R8G8B8toA8B8G8R8;
-+ }
-+ // make sure we don't change the internal format of existing images
-+ if (!newTexture)
-+ InternalFormat = oldInternalFormat;
-
-- glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
-- AutomaticMipmapUpdate=true;
-- }
-+ Driver->setActiveTexture(0, this);
-
-- // enable bilinear filter without mipmaps
-- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering);
-- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering);
-- }
-+ if (Driver->testGLError())
-+ os::Printer::log("Could not bind Texture", ELL_ERROR);
-
-- // now get image data and upload to GPU
-+ // mipmap handling for main texture
-+ if (!level && newTexture)
-+ {
-+ // auto generate if possible and no mipmap data is given
-+ if (!IsCompressed && HasMipMaps && !mipmapData && Driver->queryFeature(EVDF_MIP_MAP_AUTO_UPDATE))
-+ {
-+ if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_SPEED))
-+ glHint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
-+ else if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_QUALITY))
-+ glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
-+ else
-+ glHint(GL_GENERATE_MIPMAP_HINT, GL_DONT_CARE);
-+
-+ glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
-+ AutomaticMipmapUpdate=true;
-+ }
-+
-+ // enable bilinear filter without mipmaps
-+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering);
-+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering);
-+ }
-
-- u32 compressedImageSize = IImage::getCompressedImageSize(ColorFormat, image->getDimension().Width, image->getDimension().Height);
-+ // now get image data and upload to GPU
-
-- void* source = image->lock();
-+ u32 compressedImageSize = IImage::getCompressedImageSize(ColorFormat, image->getDimension().Width, image->getDimension().Height);
-
-- IImage* tmpImage = 0;
-+ void* source = image->lock();
-
-- if (convert)
-- {
-- tmpImage = new CImage(image->getColorFormat(), image->getDimension());
-- void* dest = tmpImage->lock();
-- convert(source, image->getDimension().getArea(), dest);
-- image->unlock();
-- source = dest;
-- }
-+ IImage* tmpImage = 0;
-
-- if (newTexture)
-- {
-- if (IsCompressed)
-+ if (convert)
- {
-- glCompressedTexImage2D(GL_TEXTURE_2D, 0, InternalFormat, image->getDimension().Width,
-- image->getDimension().Height, 0, compressedImageSize, source);
-+ tmpImage = new CImage(image->getColorFormat(), image->getDimension());
-+ void* dest = tmpImage->lock();
-+ convert(source, image->getDimension().getArea(), dest);
-+ image->unlock();
-+ source = dest;
- }
-- else
-- glTexImage2D(GL_TEXTURE_2D, level, InternalFormat, image->getDimension().Width,
-- image->getDimension().Height, 0, PixelFormat, PixelType, source);
-- }
-- else
-- {
-- if (IsCompressed)
-+
-+ if (newTexture)
- {
-- glCompressedTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width,
-- image->getDimension().Height, PixelFormat, compressedImageSize, source);
-+ if (IsCompressed)
-+ {
-+ glCompressedTexImage2D(GL_TEXTURE_2D, 0, InternalFormat, image->getDimension().Width,
-+ image->getDimension().Height, 0, compressedImageSize, source);
-+ }
-+ else
-+ glTexImage2D(GL_TEXTURE_2D, level, InternalFormat, image->getDimension().Width,
-+ image->getDimension().Height, 0, PixelFormat, PixelType, source);
- }
- else
-- glTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width,
-- image->getDimension().Height, PixelFormat, PixelType, source);
-- }
--
-- if (convert)
-- {
-- tmpImage->unlock();
-- tmpImage->drop();
-- }
-- else
-- image->unlock();
--
-- if (!level && newTexture)
-- {
-- if (IsCompressed && !mipmapData)
- {
-- if (image->hasMipMaps())
-- mipmapData = static_cast<u8*>(image->lock())+compressedImageSize;
-+ if (IsCompressed)
-+ {
-+ glCompressedTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width,
-+ image->getDimension().Height, PixelFormat, compressedImageSize, source);
-+ }
- else
-- HasMipMaps = false;
-+ glTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width,
-+ image->getDimension().Height, PixelFormat, PixelType, source);
- }
-
-- regenerateMipMapLevels(mipmapData);
--
-- if (HasMipMaps) // might have changed in regenerateMipMapLevels
-+ if (convert)
- {
-- // enable bilinear mipmap filter
-- GLint filteringMipMaps = GL_LINEAR_MIPMAP_NEAREST;
--
-- if (filtering != GL_LINEAR)
-- filteringMipMaps = GL_NEAREST_MIPMAP_NEAREST;
-+ tmpImage->unlock();
-+ tmpImage->drop();
-+ }
-+ else
-+ image->unlock();
-+
-+ if (glGetError() != GL_NO_ERROR) {
-+ static bool warned = false;
-+ if ((!retry) && (ColorFormat == ECF_A8R8G8B8)) {
-+
-+ if (!warned) {
-+ os::Printer::log("Your driver claims to support GL_BGRA but fails on trying to upload a texture, converting to GL_RGBA and trying again", ELL_ERROR);
-+ warned = true;
-+ }
-+ }
-+ else if (retry) {
-+ os::Printer::log("Neither uploading texture as GL_BGRA nor, converted one using GL_RGBA succeeded", ELL_ERROR);
-+ }
-+ retry = !retry;
-+ continue;
-+ } else {
-+ retry = false;
-+ }
-
-- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filteringMipMaps);
-- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering);
-+ if (!level && newTexture)
-+ {
-+ if (IsCompressed && !mipmapData)
-+ {
-+ if (image->hasMipMaps())
-+ mipmapData = static_cast<u8*>(image->lock())+compressedImageSize;
-+ else
-+ HasMipMaps = false;
-+ }
-+
-+ regenerateMipMapLevels(mipmapData);
-+
-+ if (HasMipMaps) // might have changed in regenerateMipMapLevels
-+ {
-+ // enable bilinear mipmap filter
-+ GLint filteringMipMaps = GL_LINEAR_MIPMAP_NEAREST;
-+
-+ if (filtering != GL_LINEAR)
-+ filteringMipMaps = GL_NEAREST_MIPMAP_NEAREST;
-+
-+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filteringMipMaps);
-+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering);
-+ }
- }
-- }
-
-- if (Driver->testGLError())
-- os::Printer::log("Could not glTexImage2D", ELL_ERROR);
-+ if (Driver->testGLError())
-+ os::Printer::log("Could not glTexImage2D", ELL_ERROR);
-+ }
-+ while(retry);
- }
-
-
---- irrlicht/source/Irrlicht/COGLESTexture.cpp.orig 2014-06-25 00:28:50.820501856 +0200
-+++ irrlicht/source/Irrlicht/COGLESTexture.cpp 2014-06-25 00:08:37.712544692 +0200
-@@ -422,6 +422,9 @@
- source = dest;
- }
-
-+ //clear old error
-+ glGetError();
-+
- if (newTexture)
- {
- if (IsCompressed)
diff --git a/build/android/patches/irrlicht-touchcount.patch b/build/android/patches/irrlicht-touchcount.patch
deleted file mode 100644
index d4e4b9c3e..000000000
--- a/build/android/patches/irrlicht-touchcount.patch
+++ /dev/null
@@ -1,30 +0,0 @@
---- irrlicht.orig/include/IEventReceiver.h 2014-06-03 19:43:50.433713133 +0200
-+++ irrlicht/include/IEventReceiver.h 2014-06-03 19:44:36.993711489 +0200
-@@ -375,6 +375,9 @@
- // Y position of simple touch.
- s32 Y;
-
-+ // number of current touches
-+ s32 touchedCount;
-+
- //! Type of touch event.
- ETOUCH_INPUT_EVENT Event;
- };
---- irrlicht.orig/source/Irrlicht/Android/CIrrDeviceAndroid.cpp 2014-06-03 19:43:50.505713130 +0200
-+++ irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp 2014-06-03 19:45:37.265709359 +0200
-@@ -315,6 +315,7 @@
- event.TouchInput.ID = AMotionEvent_getPointerId(androidEvent, i);
- event.TouchInput.X = AMotionEvent_getX(androidEvent, i);
- event.TouchInput.Y = AMotionEvent_getY(androidEvent, i);
-+ event.TouchInput.touchedCount = AMotionEvent_getPointerCount(androidEvent);
-
- device->postEventFromUser(event);
- }
-@@ -326,6 +327,7 @@
- event.TouchInput.ID = AMotionEvent_getPointerId(androidEvent, pointerIndex);
- event.TouchInput.X = AMotionEvent_getX(androidEvent, pointerIndex);
- event.TouchInput.Y = AMotionEvent_getY(androidEvent, pointerIndex);
-+ event.TouchInput.touchedCount = AMotionEvent_getPointerCount(androidEvent);
-
- device->postEventFromUser(event);
- }
diff --git a/build/android/patches/libvorbis-libogg-fpu.patch b/build/android/patches/libvorbis-libogg-fpu.patch
deleted file mode 100644
index 52ab397ac..000000000
--- a/build/android/patches/libvorbis-libogg-fpu.patch
+++ /dev/null
@@ -1,37 +0,0 @@
---- libvorbis-libogg-android/jni/libvorbis-jni/Android.mk.orig 2014-06-17 19:22:50.621559073 +0200
-+++ libvorbis-libogg-android/jni/libvorbis-jni/Android.mk 2014-06-17 19:38:20.641581140 +0200
-@@ -4,9 +4,6 @@
-
- LOCAL_MODULE := vorbis-jni
- LOCAL_CFLAGS += -I$(LOCAL_PATH)/../include -fsigned-char
--ifeq ($(TARGET_ARCH),arm)
-- LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp
--endif
-
- LOCAL_SHARED_LIBRARIES := libogg libvorbis
-
---- libvorbis-libogg-android/jni/libvorbis/Android.mk.orig 2014-06-17 19:22:39.077558797 +0200
-+++ libvorbis-libogg-android/jni/libvorbis/Android.mk 2014-06-17 19:38:52.121581887 +0200
-@@ -4,9 +4,6 @@
-
- LOCAL_MODULE := libvorbis
- LOCAL_CFLAGS += -I$(LOCAL_PATH)/../include -ffast-math -fsigned-char
--ifeq ($(TARGET_ARCH),arm)
-- LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp
--endif
- LOCAL_SHARED_LIBRARIES := libogg
-
- LOCAL_SRC_FILES := \
---- libvorbis-libogg-android/jni/libogg/Android.mk.orig 2014-06-17 19:22:33.965558675 +0200
-+++ libvorbis-libogg-android/jni/libogg/Android.mk 2014-06-17 19:38:25.337581252 +0200
-@@ -4,10 +4,6 @@
-
- LOCAL_MODULE := libogg
- LOCAL_CFLAGS += -I$(LOCAL_PATH)/../include -ffast-math -fsigned-char
--ifeq ($(TARGET_ARCH),arm)
-- LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp
--endif
--
-
- LOCAL_SRC_FILES := \
- bitwise.c \
diff --git a/build/android/patches/openssl_arch.patch b/build/android/patches/openssl_arch.patch
deleted file mode 100644
index d15e2b137..000000000
--- a/build/android/patches/openssl_arch.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- openssl-1.0.2e.orig/Configure 2015-12-03 15:04:23.000000000 +0100
-+++ openssl-1.0.2e/Configure 2015-12-14 21:01:40.351265968 +0100
-@@ -464,8 +464,10 @@
- # Android: linux-* but without pointers to headers and libs.
- "android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
- "android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"android-arm","gcc:-march=armv4 -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
- "android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
- "android-mips","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"android-mips32","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-
- #### *BSD [do see comment about ${BSDthreads} above!]
- "BSD-generic32","gcc:-O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
diff --git a/build/android/settings.gradle b/build/android/settings.gradle
index b0cee5dad..b048fca7c 100644
--- a/build/android/settings.gradle
+++ b/build/android/settings.gradle
@@ -1 +1,2 @@
rootProject.name = "Minetest"
+include ':app', ':native'
diff --git a/build/android/src/main/java/net.minetest.minetest/MainActivity.java b/build/android/src/main/java/net.minetest.minetest/MainActivity.java
deleted file mode 100644
index 71b0ce144..000000000
--- a/build/android/src/main/java/net.minetest.minetest/MainActivity.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package net.minetest.minetest;
-
-import android.Manifest;
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-import androidx.core.app.ActivityCompat;
-import androidx.core.content.ContextCompat;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class MainActivity extends Activity {
- private final static int PERMISSIONS = 1;
- private static final String[] REQUIRED_SDK_PERMISSIONS = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- checkPermission();
- } else {
- next();
- }
- }
-
- private void checkPermission() {
- final List<String> missingPermissions = new ArrayList<>();
- // check required permission
- for (final String permission : REQUIRED_SDK_PERMISSIONS) {
- final int result = ContextCompat.checkSelfPermission(this, permission);
- if (result != PackageManager.PERMISSION_GRANTED) {
- missingPermissions.add(permission);
- }
- }
- if (!missingPermissions.isEmpty()) {
- // request permission
- final String[] permissions = missingPermissions
- .toArray(new String[0]);
- ActivityCompat.requestPermissions(this, permissions, PERMISSIONS);
- } else {
- final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
- Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
- onRequestPermissionsResult(PERMISSIONS, REQUIRED_SDK_PERMISSIONS,
- grantResults);
- }
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
- @NonNull int[] grantResults) {
- if (requestCode == PERMISSIONS) {
- for (int index = 0; index < permissions.length; index++) {
- if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
- // permission not granted - toast and exit
- Toast.makeText(this, R.string.not_granted, Toast.LENGTH_LONG).show();
- finish();
- return;
- }
- }
- // permission were granted - run
- next();
- }
- }
-
- private void next() {
- Intent intent = new Intent(this, MtNativeActivity.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK);
- startActivity(intent);
- }
-}
diff --git a/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java b/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java
deleted file mode 100644
index 84cfca796..000000000
--- a/build/android/src/main/java/net.minetest.minetest/MinetestAssetCopy.java
+++ /dev/null
@@ -1,371 +0,0 @@
-package net.minetest.minetest;
-
-import android.annotation.SuppressLint;
-import android.app.Activity;
-import android.content.res.AssetFileDescriptor;
-import android.os.AsyncTask;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Environment;
-import android.util.Log;
-import android.view.Display;
-import android.view.View;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.util.Vector;
-
-public class MinetestAssetCopy extends Activity {
- private ProgressBar m_ProgressBar;
- private TextView m_Filename;
- private copyAssetTask m_AssetCopy;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.assetcopy);
- m_ProgressBar = findViewById(R.id.progressBar1);
- m_Filename = findViewById(R.id.textView1);
- Display display = getWindowManager().getDefaultDisplay();
- m_ProgressBar.getLayoutParams().width = (int) (display.getWidth() * 0.8);
- m_ProgressBar.invalidate();
-
- /* check if there's already a copy in progress and reuse in case it is*/
- MinetestAssetCopy prevActivity =
- (MinetestAssetCopy) getLastNonConfigurationInstance();
- if (prevActivity != null) {
- m_AssetCopy = prevActivity.m_AssetCopy;
- } else {
- m_AssetCopy = new copyAssetTask();
- m_AssetCopy.execute();
- }
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- makeFullScreen();
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if (m_AssetCopy != null) {
- m_AssetCopy.cancel(true);
- }
- }
-
- private void makeFullScreen() {
- if (Build.VERSION.SDK_INT >= 19)
- this.getWindow().getDecorView().setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
- }
-
- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- super.onWindowFocusChanged(hasFocus);
- if (hasFocus)
- makeFullScreen();
- }
-
- /* preserve asset copy background task to prevent restart of copying */
- /* this way of doing it is not recommended for latest android version */
- /* but the recommended way isn't available on android 2.x */
- public Object onRetainNonConfigurationInstance() {
- return this;
- }
-
- @SuppressLint("StaticFieldLeak")
- private class copyAssetTask extends AsyncTask<String, Integer, String> {
- boolean m_copy_started = false;
- String m_Foldername = "media";
- Vector<String> m_foldernames;
- Vector<String> m_filenames;
- Vector<String> m_tocopy;
- Vector<String> m_asset_size_unknown;
-
- private long getFullSize(String filename) {
- long size = 0;
- try {
- InputStream src = getAssets().open(filename);
- byte[] buf = new byte[4096];
-
- int len;
- while ((len = src.read(buf)) > 0) {
- size += len;
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- return size;
- }
-
- @Override
- protected String doInBackground(String... files) {
- m_foldernames = new Vector<>();
- m_filenames = new Vector<>();
- m_tocopy = new Vector<>();
- m_asset_size_unknown = new Vector<>();
- String baseDir =
- Environment.getExternalStorageDirectory().getAbsolutePath()
- + "/";
-
-
- // prepare temp folder
- File TempFolder = new File(baseDir + "Minetest/tmp/");
-
- if (!TempFolder.exists()) {
- TempFolder.mkdir();
- } else {
- File[] todel = TempFolder.listFiles();
-
- for (File file : todel) {
- Log.v("MinetestAssetCopy", "deleting: " + file.getAbsolutePath());
- file.delete();
- }
- }
-
- // add a .nomedia file
- try {
- OutputStream dst = new FileOutputStream(baseDir + "Minetest/.nomedia");
- dst.close();
- } catch (IOException e) {
- Log.e("MinetestAssetCopy", "Failed to create .nomedia file");
- e.printStackTrace();
- }
-
-
- // build lists from prepared data
- BuildFolderList();
- BuildFileList();
-
- // scan filelist
- ProcessFileList();
-
- // doing work
- m_copy_started = true;
- m_ProgressBar.setMax(m_tocopy.size());
-
- for (int i = 0; i < m_tocopy.size(); i++) {
- try {
- String filename = m_tocopy.get(i);
- publishProgress(i);
-
- boolean asset_size_unknown = false;
- long filesize = -1;
-
- if (m_asset_size_unknown.contains(filename)) {
- File testme = new File(baseDir + "/" + filename);
-
- if (testme.exists())
- filesize = testme.length();
-
- asset_size_unknown = true;
- }
-
- InputStream src;
- try {
- src = getAssets().open(filename);
- } catch (IOException e) {
- Log.e("MinetestAssetCopy", "Copying file: " + filename + " FAILED (not in assets)");
- e.printStackTrace();
- continue;
- }
-
- // Transfer bytes from in to out
- byte[] buf = new byte[1024];
- int len = src.read(buf, 0, 1024);
-
- /* following handling is crazy but we need to deal with */
- /* compressed assets.Flash chips limited livetime due to */
- /* write operations, we can't allow large files to destroy */
- /* users flash. */
- if (asset_size_unknown) {
- if ((len > 0) && (len < buf.length) && (len == filesize)) {
- src.close();
- continue;
- }
-
- if (len == buf.length) {
- src.close();
- long size = getFullSize(filename);
- if (size == filesize) {
- continue;
- }
- src = getAssets().open(filename);
- len = src.read(buf, 0, 1024);
- }
- }
- if (len > 0) {
- int total_filesize = 0;
- OutputStream dst;
- try {
- dst = new FileOutputStream(baseDir + "/" + filename);
- } catch (IOException e) {
- Log.e("MinetestAssetCopy", "Copying file: " + baseDir +
- "/" + filename + " FAILED (couldn't open output file)");
- e.printStackTrace();
- src.close();
- continue;
- }
- dst.write(buf, 0, len);
- total_filesize += len;
-
- while ((len = src.read(buf)) > 0) {
- dst.write(buf, 0, len);
- total_filesize += len;
- }
-
- dst.close();
- Log.v("MinetestAssetCopy", "Copied file: " +
- m_tocopy.get(i) + " (" + total_filesize +
- " bytes)");
- } else if (len < 0) {
- Log.e("MinetestAssetCopy", "Copying file: " +
- m_tocopy.get(i) + " failed, size < 0");
- }
- src.close();
- } catch (IOException e) {
- Log.e("MinetestAssetCopy", "Copying file: " +
- m_tocopy.get(i) + " failed");
- e.printStackTrace();
- }
- }
- return "";
- }
-
- /**
- * update progress bar
- */
- protected void onProgressUpdate(Integer... progress) {
-
- if (m_copy_started) {
- String todisplay = m_tocopy.get(progress[0]);
- m_ProgressBar.setProgress(progress[0]);
- m_Filename.setText(todisplay);
- } else {
- String todisplay = m_Foldername;
- String full_text = "scanning " + todisplay + " ...";
- m_Filename.setText(full_text);
- }
- }
-
- /**
- * check all files and folders in filelist
- */
- void ProcessFileList() {
- String FlashBaseDir =
- Environment.getExternalStorageDirectory().getAbsolutePath();
-
- for (String current_path : m_filenames) {
- String FlashPath = FlashBaseDir + "/" + current_path;
-
- if (isAssetFolder(current_path)) {
- /* store information and update gui */
- m_Foldername = current_path;
- publishProgress(0);
-
- /* open file in order to check if it's a folder */
- File current_folder = new File(FlashPath);
- if (!current_folder.exists()) {
- if (!current_folder.mkdirs()) {
- Log.e("MinetestAssetCopy", "\t failed create folder: " +
- FlashPath);
- } else {
- Log.v("MinetestAssetCopy", "\t created folder: " +
- FlashPath);
- }
- }
-
- continue;
- }
-
- /* if it's not a folder it's most likely a file */
- boolean refresh = true;
-
- File testme = new File(FlashPath);
-
- long asset_filesize = -1;
- long stored_filesize;
-
- if (testme.exists()) {
- try {
- AssetFileDescriptor fd = getAssets().openFd(current_path);
- asset_filesize = fd.getLength();
- fd.close();
- } catch (IOException e) {
- m_asset_size_unknown.add(current_path);
- Log.e("MinetestAssetCopy", "Failed to open asset file \"" +
- FlashPath + "\" for size check");
- }
-
- stored_filesize = testme.length();
-
- if (asset_filesize == stored_filesize)
- refresh = false;
-
- }
-
- if (refresh)
- m_tocopy.add(current_path);
- }
- }
-
- /**
- * read list of folders prepared on package build
- */
- void BuildFolderList() {
- try {
- InputStream is = getAssets().open("index.txt");
- BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-
- String line = reader.readLine();
- while (line != null) {
- m_foldernames.add(line);
- line = reader.readLine();
- }
- is.close();
- } catch (IOException e1) {
- Log.e("MinetestAssetCopy", "Error on processing index.txt");
- e1.printStackTrace();
- }
- }
-
- /**
- * read list of asset files prepared on package build
- */
- void BuildFileList() {
- long entrycount = 0;
- try {
- InputStream is = getAssets().open("filelist.txt");
- BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-
- String line = reader.readLine();
- while (line != null) {
- m_filenames.add(line);
- line = reader.readLine();
- entrycount++;
- }
- is.close();
- } catch (IOException e1) {
- Log.e("MinetestAssetCopy", "Error on processing filelist.txt");
- e1.printStackTrace();
- }
- }
-
- protected void onPostExecute(String result) {
- finish();
- }
-
- boolean isAssetFolder(String path) {
- return m_foldernames.contains(path);
- }
- }
-}
diff --git a/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java b/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java
deleted file mode 100644
index cb7ba8d3b..000000000
--- a/build/android/src/main/java/net.minetest.minetest/MinetestTextEntry.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package net.minetest.minetest;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.os.Bundle;
-import android.text.InputType;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.View.OnKeyListener;
-import android.widget.EditText;
-
-public class MinetestTextEntry extends Activity {
- private final int MultiLineTextInput = 1;
- private final int SingleLineTextInput = 2;
- private final int SingleLinePasswordInput = 3;
- private AlertDialog mTextInputDialog;
- private EditText mTextInputWidget;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Bundle b = getIntent().getExtras();
- String acceptButton = b.getString("EnterButton");
- String hint = b.getString("hint");
- String current = b.getString("current");
- int editType = b.getInt("editType");
-
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- mTextInputWidget = new EditText(this);
- mTextInputWidget.setHint(hint);
- mTextInputWidget.setText(current);
- mTextInputWidget.setMinWidth(300);
- if (editType == SingleLinePasswordInput) {
- mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT |
- InputType.TYPE_TEXT_VARIATION_PASSWORD);
- } else {
- mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT);
- }
-
- builder.setView(mTextInputWidget);
-
- if (editType == MultiLineTextInput) {
- builder.setPositiveButton(acceptButton, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- pushResult(mTextInputWidget.getText().toString());
- }
- });
- }
-
- builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- cancelDialog();
- }
- });
-
- mTextInputWidget.setOnKeyListener(new OnKeyListener() {
- @Override
- public boolean onKey(View view, int KeyCode, KeyEvent event) {
- if (KeyCode == KeyEvent.KEYCODE_ENTER) {
-
- pushResult(mTextInputWidget.getText().toString());
- return true;
- }
- return false;
- }
- });
-
- mTextInputDialog = builder.create();
- mTextInputDialog.show();
- }
-
- private void pushResult(String text) {
- Intent resultData = new Intent();
- resultData.putExtra("text", text);
- setResult(Activity.RESULT_OK, resultData);
- mTextInputDialog.dismiss();
- finish();
- }
-
- private void cancelDialog() {
- setResult(Activity.RESULT_CANCELED);
- mTextInputDialog.dismiss();
- finish();
- }
-}
diff --git a/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java b/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java
deleted file mode 100644
index f49d078fe..000000000
--- a/build/android/src/main/java/net.minetest.minetest/MtNativeActivity.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package net.minetest.minetest;
-
-import android.app.NativeActivity;
-import android.content.Intent;
-import android.os.Build;
-import android.os.Bundle;
-import android.view.View;
-import android.view.WindowManager;
-
-public class MtNativeActivity extends NativeActivity {
-
- static {
- System.loadLibrary("c++_shared");
- System.loadLibrary("openal");
- System.loadLibrary("ogg");
- System.loadLibrary("vorbis");
- System.loadLibrary("iconv");
- System.loadLibrary("minetest");
- }
-
- private int m_MessagReturnCode;
- private String m_MessageReturnValue;
-
- public static native void putMessageBoxResult(String text);
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- m_MessagReturnCode = -1;
- m_MessageReturnValue = "";
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- makeFullScreen();
- }
-
- private void makeFullScreen() {
- if (Build.VERSION.SDK_INT >= 19)
- this.getWindow().getDecorView().setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
- }
-
- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- super.onWindowFocusChanged(hasFocus);
- if (hasFocus)
- makeFullScreen();
- }
-
- public void copyAssets() {
- Intent intent = new Intent(this, MinetestAssetCopy.class);
- startActivity(intent);
- }
-
- public void showDialog(String acceptButton, String hint, String current,
- int editType) {
-
- Intent intent = new Intent(this, MinetestTextEntry.class);
- Bundle params = new Bundle();
- params.putString("acceptButton", acceptButton);
- params.putString("hint", hint);
- params.putString("current", current);
- params.putInt("editType", editType);
- intent.putExtras(params);
- startActivityForResult(intent, 101);
- m_MessageReturnValue = "";
- m_MessagReturnCode = -1;
- }
-
- /* ugly code to workaround putMessageBoxResult not beeing found */
- public int getDialogState() {
- return m_MessagReturnCode;
- }
-
- public String getDialogValue() {
- m_MessagReturnCode = -1;
- return m_MessageReturnValue;
- }
-
- public float getDensity() {
- return getResources().getDisplayMetrics().density;
- }
-
- public int getDisplayWidth() {
- return getResources().getDisplayMetrics().widthPixels;
- }
-
- public int getDisplayHeight() {
- return getResources().getDisplayMetrics().heightPixels;
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode,
- Intent data) {
- if (requestCode == 101) {
- if (resultCode == RESULT_OK) {
- String text = data.getStringExtra("text");
- m_MessagReturnCode = 0;
- m_MessageReturnValue = text;
- } else {
- m_MessagReturnCode = 1;
- }
- }
- }
-}
diff --git a/build/android/src/main/res/layout/assetcopy.xml b/build/android/src/main/res/layout/assetcopy.xml
deleted file mode 100644
index b3da2f027..000000000
--- a/build/android/src/main/res/layout/assetcopy.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/activity_main"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <ProgressBar
- android:id="@+id/progressBar1"
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:layout_centerInParent="true"
- android:layout_marginLeft="90dp"
- android:layout_marginRight="90dp" />
-
- <TextView
- android:id="@+id/textView1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@+id/progressBar1"
- android:layout_centerInParent="true"
- android:text="@string/preparing_media" />
-
-</RelativeLayout>
diff --git a/build/android/src/main/res/values-v21/styles.xml b/build/android/src/main/res/values-v21/styles.xml
deleted file mode 100644
index 8b0777467..000000000
--- a/build/android/src/main/res/values-v21/styles.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources xmlns:tools="http://schemas.android.com/tools">
-
- <style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar.Fullscreen">
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowBackground">@drawable/bg</item>
- <item name="android:windowLayoutInDisplayCutoutMode" tools:ignore="NewApi" tools:targetApi="o_mr1">
- shortEdges
- </item>
- </style>
-
- <style name="Theme.Dialog" parent="@android:style/Theme.Material.Light.Dialog.NoActionBar">
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowBackground">@android:color/transparent</item>
- </style>
-
-</resources>
diff --git a/build/android/src/main/res/values/strings.xml b/build/android/src/main/res/values/strings.xml
deleted file mode 100644
index a5eaef5d1..000000000
--- a/build/android/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="preparing_media">Preparing media&#8230;</string>
- <string name="not_granted">Required permission wasn\'t granted, Minetest can\'t run without it</string>
-</resources> \ No newline at end of file
diff --git a/build/android/src/main/res/values/styles.xml b/build/android/src/main/res/values/styles.xml
deleted file mode 100644
index 1bd41ae76..000000000
--- a/build/android/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar.Fullscreen">
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowBackground">@drawable/bg</item>
- </style>
-
- <style name="Theme.Dialog" parent="android:Theme.Holo.Light.Dialog.NoActionBar">
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowBackground">@android:color/transparent</item>
- </style>
-
-</resources>
diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua
index c904bccfc..bd27a01dc 100644
--- a/builtin/common/misc_helpers.lua
+++ b/builtin/common/misc_helpers.lua
@@ -20,6 +20,8 @@ local function basic_dump(o)
-- dump's output is intended for humans.
--elseif tp == "function" then
-- return string.format("loadstring(%q)", string.dump(o))
+ elseif tp == "userdata" then
+ return tostring(o)
else
return string.format("<%s>", tp)
end
@@ -290,7 +292,8 @@ if INIT == "game" then
return
end
local undef = core.registered_nodes[unode.name]
- if undef and undef.on_rightclick then
+ local sneaking = placer and placer:get_player_control().sneak
+ if undef and undef.on_rightclick and not sneaking then
return undef.on_rightclick(pointed_thing.under, unode, placer,
itemstack, pointed_thing)
end
@@ -344,18 +347,12 @@ if INIT == "game" then
--Wrapper for rotate_and_place() to check for sneak and assume Creative mode
--implies infinite stacks when performing a 6d rotation.
--------------------------------------------------------------------------------
- local creative_mode_cache = core.settings:get_bool("creative_mode")
- local function is_creative(name)
- return creative_mode_cache or
- core.check_player_privs(name, {creative = true})
- end
-
core.rotate_node = function(itemstack, placer, pointed_thing)
local name = placer and placer:get_player_name() or ""
local invert_wall = placer and placer:get_player_control().sneak or false
return core.rotate_and_place(itemstack, placer, pointed_thing,
- is_creative(name),
- {invert_wall = invert_wall}, true)
+ core.is_creative_enabled(name),
+ {invert_wall = invert_wall}, true)
end
end
diff --git a/builtin/common/serialize.lua b/builtin/common/serialize.lua
index 163aa67ad..300b394c6 100644
--- a/builtin/common/serialize.lua
+++ b/builtin/common/serialize.lua
@@ -120,15 +120,8 @@ function core.serialize(x)
elseif tp == "function" then
return string.format("loadstring(%q)", string.dump(x))
elseif tp == "number" then
- -- Serialize integers with string.format to prevent
- -- scientific notation, which doesn't preserve
- -- precision and breaks things like node position
- -- hashes. Serialize floats normally.
- if math.floor(x) == x then
- return string.format("%d", x)
- else
- return tostring(x)
- end
+ -- Serialize numbers reversibly with string.format
+ return string.format("%.17g", x)
elseif tp == "table" then
local vals = {}
local idx_dumped = {}
diff --git a/builtin/common/tests/serialize_spec.lua b/builtin/common/tests/serialize_spec.lua
index c41b0a372..17c6a60f7 100644
--- a/builtin/common/tests/serialize_spec.lua
+++ b/builtin/common/tests/serialize_spec.lua
@@ -18,6 +18,18 @@ describe("serialize", function()
assert.same(test_in, test_out)
end)
+ it("handles precise numbers", function()
+ local test_in = 0.2695949158945771
+ local test_out = core.deserialize(core.serialize(test_in))
+ assert.same(test_in, test_out)
+ end)
+
+ it("handles big integers", function()
+ local test_in = 269594915894577
+ local test_out = core.deserialize(core.serialize(test_in))
+ assert.same(test_in, test_out)
+ end)
+
it("handles recursive structures", function()
local test_in = { hello = "world" }
test_in.foo = test_in
diff --git a/builtin/common/tests/vector_spec.lua b/builtin/common/tests/vector_spec.lua
index 79f032f28..6f308a4a8 100644
--- a/builtin/common/tests/vector_spec.lua
+++ b/builtin/common/tests/vector_spec.lua
@@ -43,4 +43,146 @@ describe("vector", function()
it("add()", function()
assert.same({ x = 2, y = 4, z = 6 }, vector.add(vector.new(1, 2, 3), { x = 1, y = 2, z = 3 }))
end)
+
+ -- This function is needed because of floating point imprecision.
+ local function almost_equal(a, b)
+ if type(a) == "number" then
+ return math.abs(a - b) < 0.00000000001
+ end
+ return vector.distance(a, b) < 0.000000000001
+ end
+
+ describe("rotate_around_axis()", function()
+ it("rotates", function()
+ assert.True(almost_equal({x = -1, y = 0, z = 0},
+ vector.rotate_around_axis({x = 1, y = 0, z = 0}, {x = 0, y = 1, z = 0}, math.pi)))
+ assert.True(almost_equal({x = 0, y = 1, z = 0},
+ vector.rotate_around_axis({x = 0, y = 0, z = 1}, {x = 1, y = 0, z = 0}, math.pi / 2)))
+ assert.True(almost_equal({x = 4, y = 1, z = 1},
+ vector.rotate_around_axis({x = 4, y = 1, z = 1}, {x = 4, y = 1, z = 1}, math.pi / 6)))
+ end)
+ it("keeps distance to axis", function()
+ local rotate1 = {x = 1, y = 3, z = 1}
+ local axis1 = {x = 1, y = 3, z = 2}
+ local rotated1 = vector.rotate_around_axis(rotate1, axis1, math.pi / 13)
+ assert.True(almost_equal(vector.distance(axis1, rotate1), vector.distance(axis1, rotated1)))
+ local rotate2 = {x = 1, y = 1, z = 3}
+ local axis2 = {x = 2, y = 6, z = 100}
+ local rotated2 = vector.rotate_around_axis(rotate2, axis2, math.pi / 23)
+ assert.True(almost_equal(vector.distance(axis2, rotate2), vector.distance(axis2, rotated2)))
+ local rotate3 = {x = 1, y = -1, z = 3}
+ local axis3 = {x = 2, y = 6, z = 100}
+ local rotated3 = vector.rotate_around_axis(rotate3, axis3, math.pi / 2)
+ assert.True(almost_equal(vector.distance(axis3, rotate3), vector.distance(axis3, rotated3)))
+ end)
+ it("rotates back", function()
+ local rotate1 = {x = 1, y = 3, z = 1}
+ local axis1 = {x = 1, y = 3, z = 2}
+ local rotated1 = vector.rotate_around_axis(rotate1, axis1, math.pi / 13)
+ rotated1 = vector.rotate_around_axis(rotated1, axis1, -math.pi / 13)
+ assert.True(almost_equal(rotate1, rotated1))
+ local rotate2 = {x = 1, y = 1, z = 3}
+ local axis2 = {x = 2, y = 6, z = 100}
+ local rotated2 = vector.rotate_around_axis(rotate2, axis2, math.pi / 23)
+ rotated2 = vector.rotate_around_axis(rotated2, axis2, -math.pi / 23)
+ assert.True(almost_equal(rotate2, rotated2))
+ local rotate3 = {x = 1, y = -1, z = 3}
+ local axis3 = {x = 2, y = 6, z = 100}
+ local rotated3 = vector.rotate_around_axis(rotate3, axis3, math.pi / 2)
+ rotated3 = vector.rotate_around_axis(rotated3, axis3, -math.pi / 2)
+ assert.True(almost_equal(rotate3, rotated3))
+ end)
+ it("is right handed", function()
+ local v_before1 = {x = 0, y = 1, z = -1}
+ local v_after1 = vector.rotate_around_axis(v_before1, {x = 1, y = 0, z = 0}, math.pi / 4)
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after1, v_before1)), {x = 1, y = 0, z = 0}))
+
+ local v_before2 = {x = 0, y = 3, z = 4}
+ local v_after2 = vector.rotate_around_axis(v_before2, {x = 1, y = 0, z = 0}, 2 * math.pi / 5)
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after2, v_before2)), {x = 1, y = 0, z = 0}))
+
+ local v_before3 = {x = 1, y = 0, z = -1}
+ local v_after3 = vector.rotate_around_axis(v_before3, {x = 0, y = 1, z = 0}, math.pi / 4)
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after3, v_before3)), {x = 0, y = 1, z = 0}))
+
+ local v_before4 = {x = 3, y = 0, z = 4}
+ local v_after4 = vector.rotate_around_axis(v_before4, {x = 0, y = 1, z = 0}, 2 * math.pi / 5)
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after4, v_before4)), {x = 0, y = 1, z = 0}))
+
+ local v_before5 = {x = 1, y = -1, z = 0}
+ local v_after5 = vector.rotate_around_axis(v_before5, {x = 0, y = 0, z = 1}, math.pi / 4)
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after5, v_before5)), {x = 0, y = 0, z = 1}))
+
+ local v_before6 = {x = 3, y = 4, z = 0}
+ local v_after6 = vector.rotate_around_axis(v_before6, {x = 0, y = 0, z = 1}, 2 * math.pi / 5)
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after6, v_before6)), {x = 0, y = 0, z = 1}))
+ end)
+ end)
+
+ describe("rotate()", function()
+ it("rotates", function()
+ assert.True(almost_equal({x = -1, y = 0, z = 0},
+ vector.rotate({x = 1, y = 0, z = 0}, {x = 0, y = math.pi, z = 0})))
+ assert.True(almost_equal({x = 0, y = -1, z = 0},
+ vector.rotate({x = 1, y = 0, z = 0}, {x = 0, y = 0, z = math.pi / 2})))
+ assert.True(almost_equal({x = 1, y = 0, z = 0},
+ vector.rotate({x = 1, y = 0, z = 0}, {x = math.pi / 123, y = 0, z = 0})))
+ end)
+ it("is counterclockwise", function()
+ local v_before1 = {x = 0, y = 1, z = -1}
+ local v_after1 = vector.rotate(v_before1, {x = math.pi / 4, y = 0, z = 0})
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after1, v_before1)), {x = 1, y = 0, z = 0}))
+
+ local v_before2 = {x = 0, y = 3, z = 4}
+ local v_after2 = vector.rotate(v_before2, {x = 2 * math.pi / 5, y = 0, z = 0})
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after2, v_before2)), {x = 1, y = 0, z = 0}))
+
+ local v_before3 = {x = 1, y = 0, z = -1}
+ local v_after3 = vector.rotate(v_before3, {x = 0, y = math.pi / 4, z = 0})
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after3, v_before3)), {x = 0, y = 1, z = 0}))
+
+ local v_before4 = {x = 3, y = 0, z = 4}
+ local v_after4 = vector.rotate(v_before4, {x = 0, y = 2 * math.pi / 5, z = 0})
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after4, v_before4)), {x = 0, y = 1, z = 0}))
+
+ local v_before5 = {x = 1, y = -1, z = 0}
+ local v_after5 = vector.rotate(v_before5, {x = 0, y = 0, z = math.pi / 4})
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after5, v_before5)), {x = 0, y = 0, z = 1}))
+
+ local v_before6 = {x = 3, y = 4, z = 0}
+ local v_after6 = vector.rotate(v_before6, {x = 0, y = 0, z = 2 * math.pi / 5})
+ assert.True(almost_equal(vector.normalize(vector.cross(v_after6, v_before6)), {x = 0, y = 0, z = 1}))
+ end)
+ end)
+
+ it("dir_to_rotation()", function()
+ -- Comparing rotations (pitch, yaw, roll) is hard because of certain ambiguities,
+ -- e.g. (pi, 0, pi) looks exactly the same as (0, pi, 0)
+ -- So instead we convert the rotation back to vectors and compare these.
+ local function forward_at_rot(rot)
+ return vector.rotate(vector.new(0, 0, 1), rot)
+ end
+ local function up_at_rot(rot)
+ return vector.rotate(vector.new(0, 1, 0), rot)
+ end
+ local rot1 = vector.dir_to_rotation({x = 1, y = 0, z = 0}, {x = 0, y = 1, z = 0})
+ assert.True(almost_equal({x = 1, y = 0, z = 0}, forward_at_rot(rot1)))
+ assert.True(almost_equal({x = 0, y = 1, z = 0}, up_at_rot(rot1)))
+ local rot2 = vector.dir_to_rotation({x = 1, y = 1, z = 0}, {x = 0, y = 0, z = 1})
+ assert.True(almost_equal({x = 1/math.sqrt(2), y = 1/math.sqrt(2), z = 0}, forward_at_rot(rot2)))
+ assert.True(almost_equal({x = 0, y = 0, z = 1}, up_at_rot(rot2)))
+ for i = 1, 1000 do
+ local rand_vec = vector.new(math.random(), math.random(), math.random())
+ if vector.length(rand_vec) ~= 0 then
+ local rot_1 = vector.dir_to_rotation(rand_vec)
+ local rot_2 = {
+ x = math.atan2(rand_vec.y, math.sqrt(rand_vec.z * rand_vec.z + rand_vec.x * rand_vec.x)),
+ y = -math.atan2(rand_vec.x, rand_vec.z),
+ z = 0
+ }
+ assert.True(almost_equal(rot_1, rot_2))
+ end
+ end
+
+ end)
end)
diff --git a/builtin/common/vector.lua b/builtin/common/vector.lua
index ca6541eb4..1fd784ce2 100644
--- a/builtin/common/vector.lua
+++ b/builtin/common/vector.lua
@@ -141,3 +141,96 @@ function vector.sort(a, b)
return {x = math.min(a.x, b.x), y = math.min(a.y, b.y), z = math.min(a.z, b.z)},
{x = math.max(a.x, b.x), y = math.max(a.y, b.y), z = math.max(a.z, b.z)}
end
+
+local function sin(x)
+ if x % math.pi == 0 then
+ return 0
+ else
+ return math.sin(x)
+ end
+end
+
+local function cos(x)
+ if x % math.pi == math.pi / 2 then
+ return 0
+ else
+ return math.cos(x)
+ end
+end
+
+function vector.rotate_around_axis(v, axis, angle)
+ local cosangle = cos(angle)
+ local sinangle = sin(angle)
+ axis = vector.normalize(axis)
+ -- https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula
+ local dot_axis = vector.multiply(axis, vector.dot(axis, v))
+ local cross = vector.cross(v, axis)
+ return vector.new(
+ cross.x * sinangle + (v.x - dot_axis.x) * cosangle + dot_axis.x,
+ cross.y * sinangle + (v.y - dot_axis.y) * cosangle + dot_axis.y,
+ cross.z * sinangle + (v.z - dot_axis.z) * cosangle + dot_axis.z
+ )
+end
+
+function vector.rotate(v, rot)
+ local sinpitch = sin(-rot.x)
+ local sinyaw = sin(-rot.y)
+ local sinroll = sin(-rot.z)
+ local cospitch = cos(rot.x)
+ local cosyaw = cos(rot.y)
+ local cosroll = math.cos(rot.z)
+ -- Rotation matrix that applies yaw, pitch and roll
+ local matrix = {
+ {
+ sinyaw * sinpitch * sinroll + cosyaw * cosroll,
+ sinyaw * sinpitch * cosroll - cosyaw * sinroll,
+ sinyaw * cospitch,
+ },
+ {
+ cospitch * sinroll,
+ cospitch * cosroll,
+ -sinpitch,
+ },
+ {
+ cosyaw * sinpitch * sinroll - sinyaw * cosroll,
+ cosyaw * sinpitch * cosroll + sinyaw * sinroll,
+ cosyaw * cospitch,
+ },
+ }
+ -- Compute matrix multiplication: `matrix` * `v`
+ return vector.new(
+ matrix[1][1] * v.x + matrix[1][2] * v.y + matrix[1][3] * v.z,
+ matrix[2][1] * v.x + matrix[2][2] * v.y + matrix[2][3] * v.z,
+ matrix[3][1] * v.x + matrix[3][2] * v.y + matrix[3][3] * v.z
+ )
+end
+
+function vector.dir_to_rotation(forward, up)
+ forward = vector.normalize(forward)
+ local rot = {x = math.asin(forward.y), y = -math.atan2(forward.x, forward.z), z = 0}
+ if not up then
+ return rot
+ end
+ assert(vector.dot(forward, up) < 0.000001,
+ "Invalid vectors passed to vector.dir_to_rotation().")
+ up = vector.normalize(up)
+ -- Calculate vector pointing up with roll = 0, just based on forward vector.
+ local forwup = vector.rotate({x = 0, y = 1, z = 0}, rot)
+ -- 'forwup' and 'up' are now in a plane with 'forward' as normal.
+ -- The angle between them is the absolute of the roll value we're looking for.
+ rot.z = vector.angle(forwup, up)
+
+ -- Since vector.angle never returns a negative value or a value greater
+ -- than math.pi, rot.z has to be inverted sometimes.
+ -- To determine wether this is the case, we rotate the up vector back around
+ -- the forward vector and check if it worked out.
+ local back = vector.rotate_around_axis(up, forward, -rot.z)
+
+ -- We don't use vector.equals for this because of floating point imprecision.
+ if (back.x - forwup.x) * (back.x - forwup.x) +
+ (back.y - forwup.y) * (back.y - forwup.y) +
+ (back.z - forwup.z) * (back.z - forwup.z) > 0.0000001 then
+ rot.z = -rot.z
+ end
+ return rot
+end
diff --git a/builtin/fstk/dialog.lua b/builtin/fstk/dialog.lua
index df887f413..ea57df1d2 100644
--- a/builtin/fstk/dialog.lua
+++ b/builtin/fstk/dialog.lua
@@ -67,3 +67,22 @@ function dialog_create(name,get_formspec,buttonhandler,eventhandler)
ui.add(self)
return self
end
+
+function messagebox(name, message)
+ return dialog_create(name,
+ function()
+ return ([[
+ formspec_version[3]
+ size[8,3]
+ textarea[0.375,0.375;7.25,1.2;;;%s]
+ button[3,1.825;2,0.8;ok;%s]
+ ]]):format(message, fgettext("OK"))
+ end,
+ function(this, fields)
+ if fields.ok then
+ this:delete()
+ return true
+ end
+ end,
+ nil)
+end
diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua
index 884100543..6d26aabf0 100644
--- a/builtin/fstk/ui.lua
+++ b/builtin/fstk/ui.lua
@@ -85,7 +85,7 @@ function ui.update()
"box[0.5,1.2;13,5;#000]",
("textarea[0.5,1.2;13,5;;%s;%s]"):format(
error_title, error_message),
- "button[5,6.6;4,1;btn_error_confirm;" .. fgettext("Ok") .. "]"
+ "button[5,6.6;4,1;btn_error_confirm;" .. fgettext("OK") .. "]"
}
else
local active_toplevel_ui_elements = 0
diff --git a/builtin/game/auth.lua b/builtin/game/auth.lua
index 7aedfc82e..fc061666c 100644
--- a/builtin/game/auth.lua
+++ b/builtin/game/auth.lua
@@ -41,7 +41,6 @@ core.builtin_auth_handler = {
return {
password = auth_entry.password,
privileges = privileges,
- -- Is set to nil if unknown
last_login = auth_entry.last_login,
}
end,
@@ -53,7 +52,7 @@ core.builtin_auth_handler = {
name = name,
password = password,
privileges = core.string_to_privs(core.settings:get("default_privs")),
- last_login = os.time(),
+ last_login = -1, -- Defer login time calculation until record_login (called by on_joinplayer)
})
end,
delete_auth = function(name)
diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua
index fd1379162..aae811794 100644
--- a/builtin/game/chat.lua
+++ b/builtin/game/chat.lua
@@ -239,57 +239,76 @@ core.register_chatcommand("grantme", {
end,
})
+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."
+ end
+
+ if not core.get_auth_handler().get_auth(revokename) then
+ return false, "Player " .. revokename .. " does not exist."
+ end
+
+ local revokeprivs = core.string_to_privs(revokeprivstr)
+ local privs = core.get_player_privs(revokename)
+ local basic_privs =
+ core.string_to_privs(core.settings:get("basic_privs") or "interact,shout")
+ for priv, _ in pairs(revokeprivs) do
+ if not basic_privs[priv] and not caller_privs.privs then
+ return false, "Your privileges are insufficient."
+ end
+ end
+
+ if revokeprivstr == "all" then
+ revokeprivs = privs
+ privs = {}
+ else
+ for priv, _ in pairs(revokeprivs) do
+ privs[priv] = nil
+ end
+ end
+
+ for priv, _ in pairs(revokeprivs) do
+ -- call the on_revoke callbacks
+ core.run_priv_callbacks(revokename, priv, caller, "revoke")
+ end
+
+ core.set_player_privs(revokename, privs)
+ core.log("action", caller..' revoked ('
+ ..core.privs_to_string(revokeprivs, ', ')
+ ..') privileges from '..revokename)
+ if revokename ~= caller then
+ core.chat_send_player(revokename, caller
+ .. " revoked privileges from you: "
+ .. core.privs_to_string(revokeprivs, ' '))
+ end
+ return true, "Privileges of " .. revokename .. ": "
+ .. core.privs_to_string(
+ core.get_player_privs(revokename), ' ')
+end
+
core.register_chatcommand("revoke", {
params = "<name> (<privilege> | all)",
description = "Remove privileges from player",
privs = {},
func = function(name, param)
- if not core.check_player_privs(name, {privs=true}) and
- not core.check_player_privs(name, {basic_privs=true}) then
- return false, "Your privileges are insufficient."
- end
- local revoke_name, revoke_priv_str = string.match(param, "([^ ]+) (.+)")
- if not revoke_name or not revoke_priv_str then
+ local revokename, revokeprivstr = string.match(param, "([^ ]+) (.+)")
+ if not revokename or not revokeprivstr then
return false, "Invalid parameters (see /help revoke)"
- elseif not core.get_auth_handler().get_auth(revoke_name) then
- return false, "Player " .. revoke_name .. " does not exist."
- end
- local revoke_privs = core.string_to_privs(revoke_priv_str)
- local privs = core.get_player_privs(revoke_name)
- local basic_privs =
- core.string_to_privs(core.settings:get("basic_privs") or "interact,shout")
- for priv, _ in pairs(revoke_privs) do
- if not basic_privs[priv] and
- not core.check_player_privs(name, {privs=true}) then
- return false, "Your privileges are insufficient."
- end
- end
- if revoke_priv_str == "all" then
- revoke_privs = privs
- privs = {}
- else
- for priv, _ in pairs(revoke_privs) do
- privs[priv] = nil
- end
- end
-
- for priv, _ in pairs(revoke_privs) do
- -- call the on_revoke callbacks
- core.run_priv_callbacks(revoke_name, priv, name, "revoke")
end
+ return handle_revoke_command(name, revokename, revokeprivstr)
+ end,
+})
- core.set_player_privs(revoke_name, privs)
- core.log("action", name..' revoked ('
- ..core.privs_to_string(revoke_privs, ', ')
- ..') privileges from '..revoke_name)
- if revoke_name ~= name then
- core.chat_send_player(revoke_name, name
- .. " revoked privileges from you: "
- .. core.privs_to_string(revoke_privs, ' '))
+core.register_chatcommand("revokeme", {
+ params = "<privilege> | all",
+ description = "Revoke privileges from yourself",
+ privs = {},
+ func = function(name, param)
+ if param == "" then
+ return false, "Invalid parameters (see /help revokeme)"
end
- return true, "Privileges of " .. revoke_name .. ": "
- .. core.privs_to_string(
- core.get_player_privs(revoke_name), ' ')
+ return handle_revoke_command(name, name, param)
end,
})
@@ -424,6 +443,9 @@ core.register_chatcommand("teleport", {
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
@@ -441,6 +463,9 @@ core.register_chatcommand("teleport", {
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
@@ -461,6 +486,9 @@ core.register_chatcommand("teleport", {
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!"
+ end
teleportee:set_pos(p)
return true, "Teleporting " .. teleportee_name
.. " to " .. core.pos_to_string(p)
@@ -479,6 +507,9 @@ core.register_chatcommand("teleport", {
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
@@ -717,8 +748,9 @@ core.register_chatcommand("spawnentity", {
end
end
p.y = p.y + 1
- core.add_entity(p, entityname)
- return true, ("%q spawned."):format(entityname)
+ local obj = core.add_entity(p, entityname)
+ local msg = obj and "%q spawned." or "%q failed to spawn."
+ return true, msg:format(entityname)
end,
})
@@ -757,7 +789,7 @@ 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",
+ .. " 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
@@ -808,7 +840,7 @@ core.register_chatcommand("rollback_check", {
core.register_chatcommand("rollback", {
params = "(<name> [<seconds>]) | (:<actor> [<seconds>])",
- description = "Revert actions of a player. Default for <seconds> is 60",
+ description = "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
@@ -1036,7 +1068,7 @@ core.register_chatcommand("last-login", {
param = name
end
local pauth = core.get_auth_handler().get_auth(param)
- if pauth and pauth.last_login then
+ if pauth and pauth.last_login and pauth.last_login ~= -1 then
-- Time in UTC, ISO 8601 format
return true, "Last login time was " ..
os.date("!%Y-%m-%dT%H:%M:%SZ", pauth.last_login)
diff --git a/builtin/game/constants.lua b/builtin/game/constants.lua
index 0ee2a7237..54eeea50f 100644
--- a/builtin/game/constants.lua
+++ b/builtin/game/constants.lua
@@ -24,7 +24,7 @@ core.MAP_BLOCKSIZE = 16
-- Default maximal HP of a player
core.PLAYER_MAX_HP_DEFAULT = 20
-- Default maximal breath of a player
-core.PLAYER_MAX_BREATH_DEFAULT = 11
+core.PLAYER_MAX_BREATH_DEFAULT = 10
-- light.h
-- Maximum value for node 'light_source' parameter
diff --git a/builtin/game/deprecated.lua b/builtin/game/deprecated.lua
index 73e105eb8..20f0482eb 100644
--- a/builtin/game/deprecated.lua
+++ b/builtin/game/deprecated.lua
@@ -70,3 +70,19 @@ core.setting_get = setting_proxy("get")
core.setting_setbool = setting_proxy("set_bool")
core.setting_getbool = setting_proxy("get_bool")
core.setting_save = setting_proxy("write")
+
+--
+-- core.register_on_auth_fail
+--
+
+function core.register_on_auth_fail(func)
+ core.log("deprecated", "core.register_on_auth_fail " ..
+ "is obsolete and should be replaced by " ..
+ "core.register_on_authplayer instead.")
+
+ core.register_on_authplayer(function (player_name, ip, is_success)
+ if not is_success then
+ func(player_name, ip)
+ end
+ end)
+end
diff --git a/builtin/game/falling.lua b/builtin/game/falling.lua
index ea02e3694..714506a5f 100644
--- a/builtin/game/falling.lua
+++ b/builtin/game/falling.lua
@@ -30,6 +30,8 @@ local facedir_to_euler = {
{y = math.pi/2, x = math.pi, z = 0}
}
+local gravity = tonumber(core.settings:get("movement_gravity")) or 9.81
+
--
-- Falling stuff
--
@@ -41,12 +43,13 @@ core.register_entity(":__builtin:falling_node", {
textures = {},
physical = true,
is_visible = false,
- collide_with_objects = false,
+ collide_with_objects = true,
collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},
node = {},
meta = {},
+ floats = false,
set_node = function(self, node, meta)
self.node = node
@@ -71,6 +74,11 @@ core.register_entity(":__builtin:falling_node", {
return
end
self.meta = meta
+
+ -- Cache whether we're supposed to float on water
+ self.floats = core.get_item_group(node.name, "float") ~= 0
+
+ -- Set entity visuals
if def.drawtype == "torchlike" or def.drawtype == "signlike" then
local textures
if def.tiles and def.tiles[1] then
@@ -101,6 +109,7 @@ core.register_entity(":__builtin:falling_node", {
if core.is_colored_paramtype(def.paramtype2) then
itemstring = core.itemstring_with_palette(itemstring, node.param2)
end
+ -- FIXME: solution needed for paramtype2 == "leveled"
local vsize
if def.visual_scale then
local s = def.visual_scale * SCALE
@@ -113,6 +122,25 @@ core.register_entity(":__builtin:falling_node", {
glow = def.light_source,
})
end
+
+ -- Set collision box (certain nodeboxes only for now)
+ local nb_types = {fixed=true, leveled=true, connected=true}
+ if def.drawtype == "nodebox" and def.node_box and
+ nb_types[def.node_box.type] then
+ local box = table.copy(def.node_box.fixed)
+ if type(box[1]) == "table" then
+ box = #box == 1 and box[1] or nil -- We can only use a single box
+ end
+ if box then
+ if def.paramtype2 == "leveled" and (self.node.level or 0) > 0 then
+ box[5] = -0.5 + self.node.level / 64
+ end
+ self.object:set_properties({
+ collisionbox = box
+ })
+ end
+ end
+
-- Rotate entity
if def.drawtype == "torchlike" then
self.object:set_yaw(math.pi*0.25)
@@ -172,6 +200,7 @@ core.register_entity(":__builtin:falling_node", {
on_activate = function(self, staticdata)
self.object:set_armor_groups({immortal = 1})
+ self.object:set_acceleration({x = 0, y = -gravity, z = 0})
local ds = core.deserialize(staticdata)
if ds and ds.node then
@@ -183,85 +212,159 @@ core.register_entity(":__builtin:falling_node", {
end
end,
- on_step = function(self, dtime)
- -- Set gravity
- local acceleration = self.object:get_acceleration()
- if not vector.equals(acceleration, {x = 0, y = -10, z = 0}) then
- self.object:set_acceleration({x = 0, y = -10, z = 0})
+ try_place = function(self, bcp, bcn)
+ local bcd = core.registered_nodes[bcn.name]
+ -- Add levels if dropped on same leveled node
+ if bcd and bcd.paramtype2 == "leveled" and
+ bcn.name == self.node.name then
+ local addlevel = self.node.level
+ if (addlevel or 0) <= 0 then
+ addlevel = bcd.leveled
+ end
+ if core.add_node_level(bcp, addlevel) < addlevel then
+ return true
+ elseif bcd.buildable_to then
+ -- Node level has already reached max, don't place anything
+ return true
+ end
end
- -- Turn to actual node when colliding with ground, or continue to move
- local pos = self.object:get_pos()
- -- Position of bottom center point
- local bcp = {x = pos.x, y = pos.y - 0.7, z = pos.z}
- -- 'bcn' is nil for unloaded nodes
- local bcn = core.get_node_or_nil(bcp)
- -- Delete on contact with ignore at world edges
- if bcn and bcn.name == "ignore" then
- self.object:remove()
- return
+
+ -- Decide if we're replacing the node or placing on top
+ local np = vector.new(bcp)
+ if bcd and bcd.buildable_to and
+ (not self.floats or bcd.liquidtype == "none") then
+ core.remove_node(bcp)
+ else
+ np.y = np.y + 1
end
- local bcd = bcn and core.registered_nodes[bcn.name]
- if bcn and
- (not bcd or bcd.walkable or
- (core.get_item_group(self.node.name, "float") ~= 0 and
- bcd.liquidtype ~= "none")) then
- if bcd and bcd.leveled and
- bcn.name == self.node.name then
- local addlevel = self.node.level
- if not addlevel or addlevel <= 0 then
- addlevel = bcd.leveled
+
+ -- Check what's here
+ local n2 = core.get_node(np)
+ local nd = core.registered_nodes[n2.name]
+ -- If it's not air or liquid, remove node and replace it with
+ -- it's drops
+ if n2.name ~= "air" and (not nd or nd.liquidtype == "none") then
+ if nd and nd.buildable_to == false then
+ nd.on_dig(np, n2, nil)
+ -- If it's still there, it might be protected
+ if core.get_node(np).name == n2.name then
+ return false
end
- if core.add_node_level(bcp, addlevel) == 0 then
+ else
+ core.remove_node(np)
+ end
+ end
+
+ -- Create node
+ local def = core.registered_nodes[self.node.name]
+ if def then
+ core.add_node(np, self.node)
+ if self.meta then
+ core.get_meta(np):from_table(self.meta)
+ end
+ if def.sounds and def.sounds.place then
+ core.sound_play(def.sounds.place, {pos = np}, true)
+ end
+ end
+ core.check_for_falling(np)
+ return true
+ end,
+
+ on_step = function(self, dtime, moveresult)
+ -- Fallback code since collision detection can't tell us
+ -- about liquids (which do not collide)
+ if self.floats then
+ local pos = self.object:get_pos()
+
+ local bcp = vector.round({x = pos.x, y = pos.y - 0.7, z = pos.z})
+ local bcn = core.get_node(bcp)
+
+ local bcd = core.registered_nodes[bcn.name]
+ if bcd and bcd.liquidtype ~= "none" then
+ if self:try_place(bcp, bcn) then
self.object:remove()
return
end
- elseif bcd and bcd.buildable_to and
- (core.get_item_group(self.node.name, "float") == 0 or
- bcd.liquidtype == "none") then
- core.remove_node(bcp)
- return
end
- local np = {x = bcp.x, y = bcp.y + 1, z = bcp.z}
- -- Check what's here
- local n2 = core.get_node(np)
- local nd = core.registered_nodes[n2.name]
- -- If it's not air or liquid, remove node and replace it with
- -- it's drops
- if n2.name ~= "air" and (not nd or nd.liquidtype == "none") then
- core.remove_node(np)
- if nd and nd.buildable_to == false then
- -- Add dropped items
- local drops = core.get_node_drops(n2, "")
- for _, dropped_item in pairs(drops) do
- core.add_item(np, dropped_item)
+ end
+
+ assert(moveresult)
+ if not moveresult.collides then
+ return -- Nothing to do :)
+ end
+
+ local bcp, bcn
+ local player_collision
+ if moveresult.touching_ground then
+ for _, info in ipairs(moveresult.collisions) do
+ if info.type == "object" then
+ if info.axis == "y" and info.object:is_player() then
+ player_collision = info
end
- end
- -- Run script hook
- for _, callback in pairs(core.registered_on_dignodes) do
- callback(np, n2)
+ elseif info.axis == "y" then
+ bcp = info.node_pos
+ bcn = core.get_node(bcp)
+ break
end
end
- -- Create node and remove entity
- local def = core.registered_nodes[self.node.name]
- if def then
- core.add_node(np, self.node)
- if self.meta then
- local meta = core.get_meta(np)
- meta:from_table(self.meta)
- end
- if def.sounds and def.sounds.place then
- core.sound_play(def.sounds.place, {pos = np}, true)
- end
+ end
+
+ if not bcp then
+ -- We're colliding with something, but not the ground. Irrelevant to us.
+ if player_collision then
+ -- Continue falling through players by moving a little into
+ -- their collision box
+ -- TODO: this hack could be avoided in the future if objects
+ -- could choose who to collide with
+ local vel = self.object:get_velocity()
+ self.object:set_velocity({
+ x = vel.x,
+ y = player_collision.old_velocity.y,
+ z = vel.z
+ })
+ self.object:set_pos(vector.add(self.object:get_pos(),
+ {x = 0, y = -0.5, z = 0}))
end
+ return
+ elseif bcn.name == "ignore" then
+ -- Delete on contact with ignore at world edges
self.object:remove()
- core.check_for_falling(np)
return
end
- local vel = self.object:get_velocity()
- if vector.equals(vel, {x = 0, y = 0, z = 0}) then
- local npos = self.object:get_pos()
- self.object:set_pos(vector.round(npos))
+
+ local failure = false
+
+ local pos = self.object:get_pos()
+ local distance = vector.apply(vector.subtract(pos, bcp), math.abs)
+ if distance.x >= 1 or distance.z >= 1 then
+ -- We're colliding with some part of a node that's sticking out
+ -- Since we don't want to visually teleport, drop as item
+ failure = true
+ elseif distance.y >= 2 then
+ -- Doors consist of a hidden top node and a bottom node that is
+ -- the actual door. Despite the top node being solid, the moveresult
+ -- almost always indicates collision with the bottom node.
+ -- Compensate for this by checking the top node
+ bcp.y = bcp.y + 1
+ bcn = core.get_node(bcp)
+ local def = core.registered_nodes[bcn.name]
+ if not (def and def.walkable) then
+ failure = true -- This is unexpected, fail
+ end
+ end
+
+ -- Try to actually place ourselves
+ if not failure then
+ failure = not self:try_place(bcp, bcn)
+ end
+
+ if failure then
+ local drops = core.get_node_drops(self.node, "")
+ for _, item in pairs(drops) do
+ core.add_item(pos, item)
+ end
end
+ self.object:remove()
end
})
@@ -270,6 +373,7 @@ local function convert_to_falling_node(pos, node)
if not obj then
return false
end
+ -- remember node level, the entities' set_node() uses this
node.level = core.get_node_level(pos)
local meta = core.get_meta(pos)
local metatable = meta and meta:to_table() or {}
@@ -355,18 +459,23 @@ function core.check_single_for_falling(p)
-- Only spawn falling node if node below is loaded
local n_bottom = core.get_node_or_nil(p_bottom)
local d_bottom = n_bottom and core.registered_nodes[n_bottom.name]
- if d_bottom and
-
- (core.get_item_group(n.name, "float") == 0 or
- d_bottom.liquidtype == "none") and
-
- (n.name ~= n_bottom.name or (d_bottom.leveled and
- core.get_node_level(p_bottom) <
- core.get_node_max_level(p_bottom))) and
-
- (not d_bottom.walkable or d_bottom.buildable_to) then
- convert_to_falling_node(p, n)
- return true
+ if d_bottom then
+ local same = n.name == n_bottom.name
+ -- Let leveled nodes fall if it can merge with the bottom node
+ if same and d_bottom.paramtype2 == "leveled" and
+ core.get_node_level(p_bottom) <
+ core.get_node_max_level(p_bottom) then
+ convert_to_falling_node(p, n)
+ return true
+ end
+ -- Otherwise only if the bottom node is considered "fall through"
+ if not same and
+ (not d_bottom.walkable or d_bottom.buildable_to) and
+ (core.get_item_group(n.name, "float") == 0 or
+ d_bottom.liquidtype == "none") then
+ convert_to_falling_node(p, n)
+ return true
+ end
end
end
diff --git a/builtin/game/features.lua b/builtin/game/features.lua
index 623f8183b..a15475333 100644
--- a/builtin/game/features.lua
+++ b/builtin/game/features.lua
@@ -16,6 +16,7 @@ core.features = {
formspec_version_element = true,
area_store_persistent_ids = true,
pathfinder_works = true,
+ object_step_has_moveresult = true,
}
function core.has_feature(arg)
diff --git a/builtin/game/item.lua b/builtin/game/item.lua
index 513c3a5e1..f680ce0d4 100644
--- a/builtin/game/item.lua
+++ b/builtin/game/item.lua
@@ -582,7 +582,7 @@ function core.node_dig(pos, node, digger)
wielded = wdef.after_use(wielded, digger, node, dp) or wielded
else
-- Wear out tool
- if not core.settings:get_bool("creative_mode") then
+ if not core.is_creative_enabled(diggername) then
wielded:add_wear(dp.wear)
if wielded:get_count() == 0 and wdef.sound and wdef.sound.breaks then
core.sound_play(wdef.sound.breaks, {
@@ -675,6 +675,8 @@ end
-- Item definition defaults
--
+local default_stack_max = tonumber(minetest.settings:get("default_stack_max")) or 99
+
core.nodedef_default = {
-- Item properties
type="node",
@@ -684,7 +686,7 @@ core.nodedef_default = {
inventory_image = "",
wield_image = "",
wield_scale = {x=1,y=1,z=1},
- stack_max = 99,
+ stack_max = default_stack_max,
usable = false,
liquids_pointable = false,
tool_capabilities = nil,
@@ -748,7 +750,7 @@ core.craftitemdef_default = {
inventory_image = "",
wield_image = "",
wield_scale = {x=1,y=1,z=1},
- stack_max = 99,
+ stack_max = default_stack_max,
liquids_pointable = false,
tool_capabilities = nil,
@@ -786,7 +788,7 @@ core.noneitemdef_default = { -- This is used for the hand and unknown items
inventory_image = "",
wield_image = "",
wield_scale = {x=1,y=1,z=1},
- stack_max = 99,
+ stack_max = default_stack_max,
liquids_pointable = false,
tool_capabilities = nil,
diff --git a/builtin/game/item_entity.lua b/builtin/game/item_entity.lua
index 1d66799f6..20dd18044 100644
--- a/builtin/game/item_entity.lua
+++ b/builtin/game/item_entity.lua
@@ -27,14 +27,11 @@ core.register_entity(":__builtin:item", {
visual = "wielditem",
visual_size = {x = 0.4, y = 0.4},
textures = {""},
- spritediv = {x = 1, y = 1},
- initial_sprite_basepos = {x = 0, y = 0},
is_visible = false,
},
itemstring = "",
moving_state = true,
- slippery_state = false,
physical_state = true,
-- Item expiry
age = 0,
@@ -57,18 +54,15 @@ core.register_entity(":__builtin:item", {
local max_count = stack:get_stack_max()
local count = math.min(stack:get_count(), max_count)
local size = 0.2 + 0.1 * (count / max_count) ^ (1 / 3)
- local coll_height = size * 0.75
local def = core.registered_nodes[itemname]
- local glow = def and def.light_source
+ local glow = def and math.floor(def.light_source / 2 + 0.5)
self.object:set_properties({
is_visible = true,
visual = "wielditem",
textures = {itemname},
visual_size = {x = size, y = size},
- collisionbox = {-size, -coll_height, -size,
- size, coll_height, size},
- selectionbox = {-size, -size, -size, size, size, size},
+ collisionbox = {-size, -size, -size, size, size, size},
automatic_rotate = math.pi * 0.5 * 0.2 / size,
wield_item = self.itemstring,
glow = glow,
@@ -157,7 +151,7 @@ core.register_entity(":__builtin:item", {
end
end,
- on_step = function(self, dtime)
+ on_step = function(self, dtime, moveresult)
self.age = self.age + dtime
if time_to_live > 0 and self.age > time_to_live then
self.itemstring = ""
@@ -178,6 +172,38 @@ core.register_entity(":__builtin:item", {
return
end
+ if self.force_out then
+ -- This code runs after the entity got a push from the is_stuck code.
+ -- It makes sure the entity is entirely outside the solid node
+ local c = self.object:get_properties().collisionbox
+ local s = self.force_out_start
+ local f = self.force_out
+ local ok = (f.x > 0 and pos.x + c[1] > s.x + 0.5) or
+ (f.y > 0 and pos.y + c[2] > s.y + 0.5) or
+ (f.z > 0 and pos.z + c[3] > s.z + 0.5) or
+ (f.x < 0 and pos.x + c[4] < s.x - 0.5) or
+ (f.z < 0 and pos.z + c[6] < s.z - 0.5)
+ if ok then
+ -- Item was successfully forced out
+ self.force_out = nil
+ self:enable_physics()
+ return
+ end
+ end
+
+ if not self.physical_state then
+ return -- Don't do anything
+ end
+
+ assert(moveresult,
+ "Collision info missing, this is caused by an out-of-date/buggy mod or game")
+
+ if not moveresult.collides then
+ -- future TODO: items should probably decelerate in air
+ return
+ end
+
+ -- Push item out when stuck inside solid node
local is_stuck = false
local snode = core.get_node_or_nil(pos)
if snode then
@@ -187,7 +213,6 @@ core.register_entity(":__builtin:item", {
and (sdef.node_box == nil or sdef.node_box.type == "regular")
end
- -- Push item out when stuck inside solid node
if is_stuck then
local shootdir
local order = {
@@ -223,69 +248,49 @@ core.register_entity(":__builtin:item", {
self.force_out_start = vector.round(pos)
return
end
- elseif self.force_out then
- -- This code runs after the entity got a push from the above code.
- -- It makes sure the entity is entirely outside the solid node
- local c = self.object:get_properties().collisionbox
- local s = self.force_out_start
- local f = self.force_out
- local ok = (f.x > 0 and pos.x + c[1] > s.x + 0.5) or
- (f.y > 0 and pos.y + c[2] > s.y + 0.5) or
- (f.z > 0 and pos.z + c[3] > s.z + 0.5) or
- (f.x < 0 and pos.x + c[4] < s.x - 0.5) or
- (f.z < 0 and pos.z + c[6] < s.z - 0.5)
- if ok then
- -- Item was successfully forced out
- self.force_out = nil
- self:enable_physics()
- end
end
- if not self.physical_state then
- return -- Don't do anything
+ node = nil -- ground node we're colliding with
+ if moveresult.touching_ground then
+ for _, info in ipairs(moveresult.collisions) do
+ if info.axis == "y" then
+ node = core.get_node(info.node_pos)
+ break
+ end
+ end
end
-- Slide on slippery nodes
- local vel = self.object:get_velocity()
local def = node and core.registered_nodes[node.name]
- local is_moving = (def and not def.walkable) or
- vel.x ~= 0 or vel.y ~= 0 or vel.z ~= 0
- local is_slippery = false
+ local keep_movement = false
- if def and def.walkable then
+ if def then
local slippery = core.get_item_group(node.name, "slippery")
- is_slippery = slippery ~= 0
- if is_slippery and (math.abs(vel.x) > 0.2 or math.abs(vel.z) > 0.2) then
+ local vel = self.object:get_velocity()
+ if slippery ~= 0 and (math.abs(vel.x) > 0.1 or math.abs(vel.z) > 0.1) then
-- Horizontal deceleration
- local slip_factor = 4.0 / (slippery + 4)
- self.object:set_acceleration({
- x = -vel.x * slip_factor,
+ local factor = math.min(4 / (slippery + 4) * dtime, 1)
+ self.object:set_velocity({
+ x = vel.x * (1 - factor),
y = 0,
- z = -vel.z * slip_factor
+ z = vel.z * (1 - factor)
})
- elseif vel.y == 0 then
- is_moving = false
+ keep_movement = true
end
end
- if self.moving_state == is_moving and
- self.slippery_state == is_slippery then
- -- Do not update anything until the moving state changes
- return
+ if not keep_movement then
+ self.object:set_velocity({x=0, y=0, z=0})
end
- self.moving_state = is_moving
- self.slippery_state = is_slippery
-
- if is_moving then
- self.object:set_acceleration({x = 0, y = -gravity, z = 0})
- else
- self.object:set_acceleration({x = 0, y = 0, z = 0})
- self.object:set_velocity({x = 0, y = 0, z = 0})
+ if self.moving_state == keep_movement then
+ -- Do not update anything until the moving state changes
+ return
end
+ self.moving_state = keep_movement
- --Only collect items if not moving
- if is_moving then
+ -- Only collect items if not moving
+ if self.moving_state then
return
end
-- Collect the items around to merge with
diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua
index 0ed11ada0..341e613c2 100644
--- a/builtin/game/misc.lua
+++ b/builtin/game/misc.lua
@@ -164,6 +164,12 @@ function core.record_protection_violation(pos, name)
end
end
+-- To be overridden by Creative mods
+
+local creative_mode_cache = core.settings:get_bool("creative_mode")
+function core.is_creative_enabled(name)
+ return creative_mode_cache
+end
-- Checks if specified volume intersects a protected volume
diff --git a/builtin/game/register.lua b/builtin/game/register.lua
index eb6c2897c..1034d4f2b 100644
--- a/builtin/game/register.lua
+++ b/builtin/game/register.lua
@@ -607,9 +607,9 @@ core.registered_on_item_eats, core.register_on_item_eat = make_registration()
core.registered_on_punchplayers, core.register_on_punchplayer = make_registration()
core.registered_on_priv_grant, core.register_on_priv_grant = make_registration()
core.registered_on_priv_revoke, core.register_on_priv_revoke = make_registration()
+core.registered_on_authplayers, core.register_on_authplayer = make_registration()
core.registered_can_bypass_userlimit, core.register_can_bypass_userlimit = make_registration()
core.registered_on_modchannel_message, core.register_on_modchannel_message = make_registration()
-core.registered_on_auth_fail, core.register_on_auth_fail = make_registration()
core.registered_on_player_inventory_actions, core.register_on_player_inventory_action = make_registration()
core.registered_allow_player_inventory_actions, core.register_allow_player_inventory_action = make_registration()
diff --git a/builtin/game/statbars.lua b/builtin/game/statbars.lua
index 46c947b60..d192029c5 100644
--- a/builtin/game/statbars.lua
+++ b/builtin/game/statbars.lua
@@ -3,22 +3,26 @@ local enable_damage = core.settings:get_bool("enable_damage")
local health_bar_definition = {
hud_elem_type = "statbar",
- position = { x=0.5, y=1 },
+ position = {x = 0.5, y = 1},
text = "heart.png",
+ text2 = "heart_gone.png",
number = core.PLAYER_MAX_HP_DEFAULT,
+ item = core.PLAYER_MAX_HP_DEFAULT,
direction = 0,
- size = { x=24, y=24 },
- offset = { x=(-10*24)-25, y=-(48+24+16)},
+ size = {x = 24, y = 24},
+ offset = {x = (-10 * 24) - 25, y = -(48 + 24 + 16)},
}
local breath_bar_definition = {
hud_elem_type = "statbar",
- position = { x=0.5, y=1 },
+ position = {x = 0.5, y = 1},
text = "bubble.png",
+ text2 = "bubble_gone.png",
number = core.PLAYER_MAX_BREATH_DEFAULT,
+ item = core.PLAYER_MAX_BREATH_DEFAULT * 2,
direction = 0,
- size = { x=24, y=24 },
- offset = {x=25,y=-(48+24+16)},
+ size = {x = 24, y = 24},
+ offset = {x = 25, y= -(48 + 24 + 16)},
}
local hud_ids = {}
@@ -26,7 +30,7 @@ local hud_ids = {}
local function scaleToDefault(player, field)
-- Scale "hp" or "breath" to the default dimensions
local current = player["get_" .. field](player)
- local nominal = core["PLAYER_MAX_".. field:upper() .. "_DEFAULT"]
+ local nominal = core["PLAYER_MAX_" .. field:upper() .. "_DEFAULT"]
local max_display = math.max(nominal,
math.max(player:get_properties()[field .. "_max"], current))
return current / max_display * nominal
@@ -49,6 +53,7 @@ local function update_builtin_statbars(player)
local hud = hud_ids[name]
local immortal = player:get_armor_groups().immortal == 1
+
if flags.healthbar and enable_damage and not immortal then
local number = scaleToDefault(player, "hp")
if hud.id_healthbar == nil then
@@ -63,19 +68,28 @@ local function update_builtin_statbars(player)
hud.id_healthbar = nil
end
+ local show_breathbar = flags.breathbar and enable_damage and not immortal
+
+ local breath = player:get_breath()
local breath_max = player:get_properties().breath_max
- if flags.breathbar and enable_damage and not immortal and
- player:get_breath() < breath_max then
+ if show_breathbar and breath <= breath_max then
local number = 2 * scaleToDefault(player, "breath")
- if hud.id_breathbar == nil then
+ if not hud.id_breathbar and breath < breath_max then
local hud_def = table.copy(breath_bar_definition)
hud_def.number = number
hud.id_breathbar = player:hud_add(hud_def)
- else
+ elseif hud.id_breathbar then
player:hud_change(hud.id_breathbar, "number", number)
end
- elseif hud.id_breathbar then
- player:hud_remove(hud.id_breathbar)
+ 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)
+ if player then
+ player:hud_remove(breath_bar)
+ end
+ end, name, hud.id_breathbar)
hud.id_breathbar = nil
end
end
diff --git a/builtin/init.lua b/builtin/init.lua
index f76174be7..75bb3db85 100644
--- a/builtin/init.lua
+++ b/builtin/init.lua
@@ -36,6 +36,7 @@ dofile(commonpath .. "misc_helpers.lua")
if INIT == "game" then
dofile(gamepath .. "init.lua")
+ assert(not core.get_http_api)
elseif INIT == "mainmenu" then
local mm_script = core.settings:get("main_menu_script")
if mm_script and mm_script ~= "" then
diff --git a/builtin/common/async_event.lua b/builtin/mainmenu/async_event.lua
index 988af79b9..04bfb78d6 100644
--- a/builtin/common/async_event.lua
+++ b/builtin/mainmenu/async_event.lua
@@ -8,15 +8,7 @@ local function handle_job(jobid, serialized_retval)
core.async_jobs[jobid] = nil
end
-if core.register_globalstep then
- core.register_globalstep(function(dtime)
- for i, job in ipairs(core.get_finished_jobs()) do
- handle_job(job.jobid, job.retval)
- end
- end)
-else
- core.async_event_handler = handle_job
-end
+core.async_event_handler = handle_job
function core.handle_async(func, parameter, callback)
-- Serialize function
diff --git a/builtin/mainmenu/dlg_config_world.lua b/builtin/mainmenu/dlg_config_world.lua
index 97218df9c..2cf70c9c9 100644
--- a/builtin/mainmenu/dlg_config_world.lua
+++ b/builtin/mainmenu/dlg_config_world.lua
@@ -23,7 +23,49 @@ local function modname_valid(name)
return not name:find("[^a-z0-9_]")
end
+local function init_data(data)
+ data.list = filterlist.create(
+ pkgmgr.preparemodlist,
+ pkgmgr.comparemod,
+ function(element, uid)
+ if element.name == uid then
+ return true
+ end
+ end,
+ function(element, criteria)
+ if criteria.hide_game and
+ element.is_game_content then
+ return false
+ end
+
+ if criteria.hide_modpackcontents and
+ element.modpack ~= nil then
+ return false
+ end
+ return true
+ end,
+ {
+ worldpath = data.worldspec.path,
+ gameid = data.worldspec.gameid
+ })
+
+ if data.selected_mod > data.list:size() then
+ data.selected_mod = 0
+ end
+
+ data.list:set_filtercriteria({
+ hide_game = data.hide_gamemods,
+ hide_modpackcontents = data.hide_modpackcontents
+ })
+ data.list:add_sort_mechanism("alphabetic", sort_mod_list)
+ data.list:set_sortmode("alphabetic")
+end
+
local function get_formspec(data)
+ if not data.list then
+ init_data(data)
+ end
+
local mod = data.list:get_list()[data.selected_mod] or {name = ""}
local retval =
@@ -85,11 +127,14 @@ local function get_formspec(data)
end
end
end
+
retval = retval ..
"button[3.25,7;2.5,0.5;btn_config_world_save;" ..
fgettext("Save") .. "]" ..
"button[5.75,7;2.5,0.5;btn_config_world_cancel;" ..
- fgettext("Cancel") .. "]"
+ fgettext("Cancel") .. "]" ..
+ "button[9,7;2.5,0.5;btn_config_world_cdb;" ..
+ fgettext("Find More Mods") .. "]"
if mod.name ~= "" and not mod.is_game_content then
if mod.is_modpack then
@@ -198,6 +243,16 @@ local function handle_buttons(this, fields)
return true
end
+ if fields.btn_config_world_cdb then
+ this.data.list = nil
+
+ local dlg = create_store_dlg("mod")
+ dlg:set_parent(this)
+ this:hide()
+ dlg:show()
+ return true
+ end
+
if fields.btn_enable_all_mods then
local list = this.data.list:get_raw_list()
@@ -247,43 +302,5 @@ function create_configure_world_dlg(worldidx)
return
end
- dlg.data.list = filterlist.create(
- pkgmgr.preparemodlist,
- pkgmgr.comparemod,
- function(element, uid)
- if element.name == uid then
- return true
- end
- end,
- function(element, criteria)
- if criteria.hide_game and
- element.is_game_content then
- return false
- end
-
- if criteria.hide_modpackcontents and
- element.modpack ~= nil then
- return false
- end
- return true
- end,
- {
- worldpath = dlg.data.worldspec.path,
- gameid = dlg.data.worldspec.gameid
- }
- )
-
-
- if dlg.data.selected_mod > dlg.data.list:size() then
- dlg.data.selected_mod = 0
- end
-
- dlg.data.list:set_filtercriteria({
- hide_game = dlg.data.hide_gamemods,
- hide_modpackcontents = dlg.data.hide_modpackcontents
- })
- dlg.data.list:add_sort_mechanism("alphabetic", sort_mod_list)
- dlg.data.list:set_sortmode("alphabetic")
-
return dlg
end
diff --git a/builtin/mainmenu/dlg_contentstore.lua b/builtin/mainmenu/dlg_contentstore.lua
index 3bc5f60bb..01c42be0b 100644
--- a/builtin/mainmenu/dlg_contentstore.lua
+++ b/builtin/mainmenu/dlg_contentstore.lua
@@ -1,5 +1,5 @@
--Minetest
---Copyright (C) 2018 rubenwardy
+--Copyright (C) 2018-20 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
@@ -15,8 +15,17 @@
--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
+ function create_store_dlg()
+ return messagebox("store",
+ fgettext("ContentDB is not available when Minetest was compiled without cURL"))
+ end
+ return
+end
+
local store = { packages = {}, packages_full = {} }
-local package_dialog = {}
+
+local http = minetest.get_http_api()
-- Screenshot
local screenshot_dir = core.get_cache_path() .. DIR_DELIM .. "cdb"
@@ -44,19 +53,15 @@ local filter_types_type = {
}
-
-
local function download_package(param)
if core.download_file(param.package.url, param.filename) then
return {
- package = param.package,
filename = param.filename,
successful = true,
}
else
core.log("error", "downloading " .. dump(param.package.url) .. " failed")
return {
- package = param.package,
successful = false,
}
end
@@ -70,9 +75,9 @@ local function start_install(calling_dialog, package)
local function callback(result)
if result.successful then
- local path, msg = pkgmgr.install(result.package.type,
- result.filename, result.package.name,
- result.package.path)
+ local path, msg = pkgmgr.install(package.type,
+ result.filename, package.name,
+ package.path)
if not path then
gamedata.errormessage = msg
else
@@ -80,33 +85,33 @@ local function start_install(calling_dialog, package)
local conf_path
local name_is_title = false
- if result.package.type == "mod" then
+ if package.type == "mod" then
local actual_type = pkgmgr.get_folder_type(path)
if actual_type.type == "modpack" then
conf_path = path .. DIR_DELIM .. "modpack.conf"
else
conf_path = path .. DIR_DELIM .. "mod.conf"
end
- elseif result.package.type == "game" then
+ elseif package.type == "game" then
conf_path = path .. DIR_DELIM .. "game.conf"
name_is_title = true
- elseif result.package.type == "txp" then
+ elseif package.type == "txp" then
conf_path = path .. DIR_DELIM .. "texture_pack.conf"
end
if conf_path then
local conf = Settings(conf_path)
if name_is_title then
- conf:set("name", result.package.title)
+ conf:set("name", package.title)
else
- conf:set("title", result.package.title)
- conf:set("name", result.package.name)
+ conf:set("title", package.title)
+ conf:set("name", package.name)
end
if not conf:get("description") then
- conf:set("description", result.package.short_description)
+ conf:set("description", package.short_description)
end
- conf:set("author", result.package.author)
- conf:set("release", result.package.release)
+ conf:set("author", package.author)
+ conf:set("release", package.release)
conf:write()
end
end
@@ -115,37 +120,22 @@ local function start_install(calling_dialog, package)
gamedata.errormessage = fgettext("Failed to download $1", package.name)
end
- if gamedata.errormessage == nil then
- core.button_handler({btn_hidden_close_download=result})
- else
- core.button_handler({btn_hidden_close_download={successful=false}})
- end
+ package.downloading = false
+ ui.update()
end
+ package.downloading = true
+
if not core.handle_async(download_package, params, callback) then
core.log("error", "ERROR: async event failed")
gamedata.errormessage = fgettext("Failed to download $1", package.name)
+ return
end
+end
- local new_dlg = dialog_create("store_downloading",
- function(data)
- return "size[7,2]label[0.25,0.75;" ..
- fgettext("Downloading and installing $1, please wait...", data.title) .. "]"
- end,
- function(this,fields)
- if fields["btn_hidden_close_download"] ~= nil then
- this:delete()
- return true
- end
-
- return false
- end,
- nil)
-
- new_dlg:set_parent(calling_dialog)
- new_dlg.data.title = package.title
- calling_dialog:hide()
- new_dlg:show()
+local function get_file_extension(path)
+ local parts = path:split(".")
+ return parts[#parts]
end
local function get_screenshot(package)
@@ -156,8 +146,9 @@ local function get_screenshot(package)
end
-- Get tmp screenshot path
+ local ext = get_file_extension(package.thumbnail)
local filepath = screenshot_dir .. DIR_DELIM ..
- package.type .. "-" .. package.author .. "-" .. package.name .. ".png"
+ ("%s-%s-%s.%s"):format(package.type, package.author, package.name, ext)
-- Return if already downloaded
local file = io.open(filepath, "r")
@@ -195,84 +186,12 @@ local function get_screenshot(package)
return defaulttexturedir .. "loading_screenshot.png"
end
-
-
-function package_dialog.get_formspec()
- local package = package_dialog.package
-
- store.update_paths()
-
- local formspec = {
- "size[9,4;true]",
- "image[0,1;4.5,3;", core.formspec_escape(get_screenshot(package)), ']',
- "label[3.8,1;",
- minetest.colorize(mt_color_green, core.formspec_escape(package.title)), "\n",
- minetest.colorize('#BFBFBF', "by " .. core.formspec_escape(package.author)), "]",
- "textarea[4,2;5.3,2;;;", core.formspec_escape(package.short_description), "]",
- "button[0,0;2,1;back;", fgettext("Back"), "]",
- }
-
- if not package.path then
- formspec[#formspec + 1] = "button[7,0;2,1;install;"
- formspec[#formspec + 1] = fgettext("Install")
- formspec[#formspec + 1] = "]"
- elseif package.installed_release < package.release then
- -- The install_ action also handles updating
- formspec[#formspec + 1] = "button[7,0;2,1;install;"
- formspec[#formspec + 1] = fgettext("Update")
- formspec[#formspec + 1] = "]"
- formspec[#formspec + 1] = "button[5,0;2,1;uninstall;"
- formspec[#formspec + 1] = fgettext("Uninstall")
- formspec[#formspec + 1] = "]"
- else
- formspec[#formspec + 1] = "button[7,0;2,1;uninstall;"
- formspec[#formspec + 1] = fgettext("Uninstall")
- formspec[#formspec + 1] = "]"
- end
-
- return table.concat(formspec, "")
-end
-
-function package_dialog.handle_submit(this, fields)
- if fields.back then
- this:delete()
- return true
- end
-
- if fields.install then
- start_install(this, package_dialog.package)
- return true
- end
-
- if fields.uninstall then
- local dlg_delmod = create_delete_content_dlg(package_dialog.package)
- dlg_delmod:set_parent(this)
- this:hide()
- dlg_delmod:show()
- return true
- end
-
- return false
-end
-
-function package_dialog.create(package)
- package_dialog.package = package
- return dialog_create("package_view",
- package_dialog.get_formspec,
- package_dialog.handle_submit,
- nil)
-end
-
function store.load()
- local tmpdir = os.tempfolder()
- local target = tmpdir .. DIR_DELIM .. "packages.json"
-
- assert(core.create_dir(tmpdir))
-
- local base_url = core.settings:get("contentdb_url")
+ local version = core.get_version()
+ local base_url = core.settings:get("contentdb_url")
local url = base_url ..
"/api/packages/?type=mod&type=game&type=txp&protocol_version=" ..
- core.get_max_supp_proto()
+ core.get_max_supp_proto() .. "&engine_version=" .. version.string
for _, item in pairs(core.settings:get("contentdb_flag_blacklist"):split(",")) do
item = item:trim()
@@ -281,31 +200,29 @@ function store.load()
end
end
- core.download_file(url, target)
+ local timeout = tonumber(minetest.settings:get("curl_file_download_timeout"))
+ local response = http.fetch_sync({ url = url, timeout = timeout })
+ if not response.succeeded then
+ return
+ end
- local file = io.open(target, "r")
- if file then
- store.packages_full = core.parse_json(file:read("*all")) or {}
- file:close()
+ store.packages_full = core.parse_json(response.data) or {}
- for _, package in pairs(store.packages_full) do
- package.url = base_url .. "/packages/" ..
+ for _, package in pairs(store.packages_full) do
+ package.url = base_url .. "/packages/" ..
package.author .. "/" .. package.name ..
"/releases/" .. package.release .. "/download/"
- local name_len = #package.name
- if package.type == "game" and name_len > 5 and package.name:sub(name_len - 4) == "_game" then
- package.id = package.author:lower() .. "/" .. package.name:sub(1, name_len - 5)
- else
- package.id = package.author:lower() .. "/" .. package.name
- end
+ local name_len = #package.name
+ if package.type == "game" and name_len > 5 and package.name:sub(name_len - 4) == "_game" then
+ package.id = package.author:lower() .. "/" .. package.name:sub(1, name_len - 5)
+ else
+ package.id = package.author:lower() .. "/" .. package.name
end
-
- store.packages = store.packages_full
- store.loaded = true
end
- core.delete_dir(tmpdir)
+ store.packages = store.packages_full
+ store.loaded = true
end
function store.update_paths()
@@ -395,34 +312,35 @@ function store.get_formspec(dlgdata)
cur_page = 1
end
+ local W = 15.75
+ local H = 9.5
+
local formspec
if #store.packages_full > 0 then
formspec = {
- "size[12,7;true]",
+ "formspec_version[3]",
+ "size[15.75,9.5]",
"position[0.5,0.55]",
- "field[0.2,0.1;7.8,1;search_string;;",
- core.formspec_escape(search_string), "]",
+ "container[0.375,0.375]",
+ "field[0,0;10.225,0.8;search_string;;", core.formspec_escape(search_string), "]",
"field_close_on_enter[search_string;false]",
- "button[7.7,-0.2;2,1;search;",
- fgettext("Search"), "]",
- "dropdown[9.7,-0.1;2.4;type;",
- table.concat(filter_types_titles, ","),
- ";", filter_type, "]",
- -- "textlist[0,1;2.4,5.6;a;",
- -- table.concat(taglist, ","), "]",
+ "button[10.225,0;2,0.8;search;", fgettext("Search"), "]",
+ "dropdown[12.6,0;2.4,0.8;type;", table.concat(filter_types_titles, ","), ";", filter_type, "]",
+ "container_end[]",
-- Page nav buttons
- "container[0,",
- num_per_page + 1.5, "]",
- "button[-0.1,0;3,1;back;",
- fgettext("Back to Main Menu"), "]",
- "button[7.1,0;1,1;pstart;<<]",
- "button[8.1,0;1,1;pback;<]",
- "label[9.2,0.2;",
- tonumber(cur_page), " / ",
- tonumber(dlgdata.pagemax), "]",
- "button[10.1,0;1,1;pnext;>]",
- "button[11.1,0;1,1;pend;>>]",
+ "container[0,", H - 0.8 - 0.375, "]",
+ "button[0.375,0;4,0.8;back;", fgettext("Back to Main Menu"), "]",
+
+ "container[", W - 0.375 - 0.8*4 - 2, ",0]",
+ "image_button[0,0;0.8,0.8;", core.formspec_escape(defaulttexturedir), "start_icon.png;pstart;]",
+ "image_button[0.8,0;0.8,0.8;", core.formspec_escape(defaulttexturedir), "prev_icon.png;pback;]",
+ "style[pagenum;border=false]",
+ "button[1.6,0;2,0.8;pagenum;", tonumber(cur_page), " / ", tonumber(dlgdata.pagemax), "]",
+ "image_button[3.6,0;0.8,0.8;", core.formspec_escape(defaulttexturedir), "next_icon.png;pnext;]",
+ "image_button[4.4,0;0.8,0.8;", core.formspec_escape(defaulttexturedir), "end_icon.png;pend;]",
+ "container_end[]",
+
"container_end[]",
}
@@ -433,73 +351,84 @@ function store.get_formspec(dlgdata)
end
else
formspec = {
- "size[12,7;true]",
+ "size[12,7]",
"position[0.5,0.55]",
"label[4,3;", fgettext("No packages could be retrieved"), "]",
- "button[-0.1,",
- num_per_page + 1.5,
- ";3,1;back;",
- fgettext("Back to Main Menu"), "]",
+ "container[0,", H - 0.8 - 0.375, "]",
+ "button[0,0;4,0.8;back;", fgettext("Back to Main Menu"), "]",
+ "container_end[]",
}
end
local start_idx = (cur_page - 1) * num_per_page + 1
for i=start_idx, math.min(#store.packages, start_idx+num_per_page-1) do
local package = store.packages[i]
- formspec[#formspec + 1] = "container[0.5,"
- formspec[#formspec + 1] = (i - start_idx) * 1.1 + 1
+ formspec[#formspec + 1] = "container[0.375,"
+ formspec[#formspec + 1] = (i - start_idx) * 1.375 + (2*0.375 + 0.8)
formspec[#formspec + 1] = "]"
-- image
- formspec[#formspec + 1] = "image[-0.4,0;1.5,1;"
+ formspec[#formspec + 1] = "image[0,0;1.5,1;"
formspec[#formspec + 1] = core.formspec_escape(get_screenshot(package))
formspec[#formspec + 1] = "]"
-- title
- formspec[#formspec + 1] = "label[1,-0.1;"
+ 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))
formspec[#formspec + 1] = "]"
- -- description
- if package.path and package.installed_release < package.release then
- formspec[#formspec + 1] = "textarea[1.25,0.3;7.5,1;;;"
- else
- formspec[#formspec + 1] = "textarea[1.25,0.3;9,1;;;"
- end
- formspec[#formspec + 1] = core.formspec_escape(package.short_description)
- formspec[#formspec + 1] = "]"
-
-- buttons
- if not package.path then
- formspec[#formspec + 1] = "button[9.9,0;1.5,1;install_"
+ local description_width = W - 0.375*5 - 1 - 2*1.5
+ formspec[#formspec + 1] = "container["
+ formspec[#formspec + 1] = W - 0.375*2
+ formspec[#formspec + 1] = ",0.1]"
+
+ if package.downloading then
+ formspec[#formspec + 1] = "style[download;border=false]"
+
+ formspec[#formspec + 1] = "button[-3.5,0;2,0.8;download;"
+ formspec[#formspec + 1] = fgettext("Downloading...")
+ formspec[#formspec + 1] = "]"
+ elseif not package.path then
+ formspec[#formspec + 1] = "button[-3,0;1.5,0.8;install_"
formspec[#formspec + 1] = tostring(i)
formspec[#formspec + 1] = ";"
formspec[#formspec + 1] = fgettext("Install")
formspec[#formspec + 1] = "]"
else
if package.installed_release < package.release then
+ description_width = description_width - 1.5
+
-- The install_ action also handles updating
- formspec[#formspec + 1] = "button[8.4,0;1.5,1;install_"
+ formspec[#formspec + 1] = "button[-4.5,0;1.5,0.8;install_"
formspec[#formspec + 1] = tostring(i)
formspec[#formspec + 1] = ";"
formspec[#formspec + 1] = fgettext("Update")
formspec[#formspec + 1] = "]"
end
- formspec[#formspec + 1] = "button[9.9,0;1.5,1;uninstall_"
+ formspec[#formspec + 1] = "button[-3,0;1.5,0.8;uninstall_"
formspec[#formspec + 1] = tostring(i)
formspec[#formspec + 1] = ";"
formspec[#formspec + 1] = fgettext("Uninstall")
formspec[#formspec + 1] = "]"
end
- --formspec[#formspec + 1] = "button[9.9,0;1.5,1;view_"
- --formspec[#formspec + 1] = tostring(i)
- --formspec[#formspec + 1] = ";"
- --formspec[#formspec + 1] = fgettext("View")
- --formspec[#formspec + 1] = "]"
+ formspec[#formspec + 1] = "button[-1.5,0;1.5,0.8;view_"
+ formspec[#formspec + 1] = tostring(i)
+ formspec[#formspec + 1] = ";"
+ formspec[#formspec + 1] = fgettext("View")
+ formspec[#formspec + 1] = "]"
+ formspec[#formspec + 1] = "container_end[]"
+
+ -- description
+ formspec[#formspec + 1] = "textarea[1.855,0.3;"
+ formspec[#formspec + 1] = tostring(description_width)
+ formspec[#formspec + 1] = ",0.8;;;"
+ formspec[#formspec + 1] = core.formspec_escape(package.short_description)
+ formspec[#formspec + 1] = "]"
formspec[#formspec + 1] = "container_end[]"
end
@@ -576,10 +505,9 @@ function store.handle_submit(this, fields)
end
if fields["view_" .. i] then
- local dlg = package_dialog.create(package)
- dlg:set_parent(this)
- this:hide()
- dlg:show()
+ local url = ("%s/packages/%s?protocol_version=%d"):format(
+ core.settings:get("contentdb_url"), package.id, core.get_max_supp_proto())
+ core.open_url(url)
return true
end
end
@@ -594,6 +522,17 @@ function create_store_dlg(type)
search_string = ""
cur_page = 1
+
+ if type then
+ -- table.indexof does not work on tables that contain `nil`
+ for i, v in pairs(filter_types_type) do
+ if v == type then
+ filter_type = i
+ break
+ end
+ end
+ end
+
store.filter_packages(search_string)
return dialog_create("store",
diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua
index 31d41d693..36df23cce 100644
--- a/builtin/mainmenu/dlg_create_world.lua
+++ b/builtin/mainmenu/dlg_create_world.lua
@@ -17,13 +17,110 @@
local worldname = ""
+local function table_to_flags(ftable)
+ -- Convert e.g. { jungles = true, caves = false } to "jungles,nocaves"
+ local str = {}
+ for flag, is_set in pairs(ftable) do
+ str[#str + 1] = is_set and flag or ("no" .. flag)
+ end
+ return table.concat(str, ",")
+end
+
+-- Same as check_flag but returns a string
+local function strflag(flags, flag)
+ return (flags[flag] == true) and "true" or "false"
+end
+
+local cb_caverns = { "caverns", fgettext("Caverns"), "caverns",
+ fgettext("Very large caverns deep in the underground") }
+local tt_sea_rivers = fgettext("Sea level rivers")
+
+local flag_checkboxes = {
+ v5 = {
+ cb_caverns,
+ },
+ v7 = {
+ cb_caverns,
+ { "ridges", fgettext("Rivers"), "ridges", tt_sea_rivers },
+ { "mountains", fgettext("Mountains"), "mountains" },
+ { "floatlands", fgettext("Floatlands (experimental)"), "floatlands",
+ fgettext("Floating landmasses in the sky") },
+ },
+ carpathian = {
+ cb_caverns,
+ { "rivers", fgettext("Rivers"), "rivers", tt_sea_rivers },
+ },
+ valleys = {
+ { "altitude-chill", fgettext("Altitude chill"), "altitude_chill",
+ fgettext("Reduces heat with altitude") },
+ { "altitude-dry", fgettext("Altitude dry"), "altitude_dry",
+ fgettext("Reduces humidity with altitude") },
+ { "humid-rivers", fgettext("Humid rivers"), "humid_rivers",
+ fgettext("Increases humidity around rivers") },
+ { "vary-river-depth", fgettext("Vary river depth"), "vary_river_depth",
+ fgettext("Low humidity and high heat causes shallow or dry rivers") },
+ },
+ flat = {
+ { "hills", fgettext("Hills"), "hills" },
+ { "lakes", fgettext("Lakes"), "lakes" },
+ },
+ fractal = {
+ { "terrain", fgettext("Additional terrain"), "terrain",
+ fgettext("Generate non-fractal terrain: Oceans and underground") },
+ },
+ v6 = {
+ { "trees", fgettext("Trees and jungle grass"), "trees" },
+ { "flat", fgettext("Flat terrain"), "flat" },
+ { "mudflow", fgettext("Mud flow"), "mudflow",
+ fgettext("Terrain surface erosion") },
+ -- Biome settings are in mgv6_biomes below
+ },
+}
+
+local mgv6_biomes = {
+ {
+ fgettext("Temperate, Desert, Jungle, Tundra, Taiga"),
+ {jungles = true, snowbiomes = true}
+ },
+ {
+ fgettext("Temperate, Desert, Jungle"),
+ {jungles = true, snowbiomes = false}
+ },
+ {
+ fgettext("Temperate, Desert"),
+ {jungles = false, snowbiomes = false}
+ },
+}
+
local function create_world_formspec(dialogdata)
+
+ -- Error out when no games found
+ if #pkgmgr.games == 0 then
+ return "size[12.25,3,true]" ..
+ "box[0,0;12,2;#ff8800]" ..
+ "textarea[0.3,0;11.7,2;;;"..
+ fgettext("You have no games installed.") .. "\n" ..
+ fgettext("Download one from minetest.net") .. "]" ..
+ "button[4.75,2.5;3,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]"
+ end
+
local mapgens = core.get_mapgen_names()
local current_seed = core.settings:get("fixed_map_seed") or ""
local current_mg = core.settings:get("mg_name")
local gameid = core.settings:get("menu_last_game")
+ local flags = {
+ main = core.settings:get_flags("mg_flags"),
+ v5 = core.settings:get_flags("mgv5_spflags"),
+ v6 = core.settings:get_flags("mgv6_spflags"),
+ v7 = core.settings:get_flags("mgv7_spflags"),
+ fractal = core.settings:get_flags("mgfractal_spflags"),
+ carpathian = core.settings:get_flags("mgcarpathian_spflags"),
+ valleys = core.settings:get_flags("mgvalleys_spflags"),
+ flat = core.settings:get_flags("mgflat_spflags"),
+ }
+
local gameidx = 0
if gameid ~= nil then
local _
@@ -35,15 +132,29 @@ local function create_world_formspec(dialogdata)
end
local game_by_gameidx = core.get_game(gameidx)
+ local disallowed_mapgen_settings = {}
if game_by_gameidx ~= nil then
local gamepath = game_by_gameidx.path
local gameconfig = Settings(gamepath.."/game.conf")
+ local allowed_mapgens = (gameconfig:get("allowed_mapgens") or ""):split()
+ for key, value in pairs(allowed_mapgens) do
+ allowed_mapgens[key] = value:trim()
+ end
+
local disallowed_mapgens = (gameconfig:get("disallowed_mapgens") or ""):split()
for key, value in pairs(disallowed_mapgens) do
disallowed_mapgens[key] = value:trim()
end
+ if #allowed_mapgens > 0 then
+ for i = #mapgens, 1, -1 do
+ if table.indexof(allowed_mapgens, mapgens[i]) == -1 then
+ table.remove(mapgens, i)
+ end
+ end
+ end
+
if disallowed_mapgens then
for i = #mapgens, 1, -1 do
if table.indexof(disallowed_mapgens, mapgens[i]) > 0 then
@@ -51,49 +162,193 @@ local function create_world_formspec(dialogdata)
end
end
end
+
+ local ds = (gameconfig:get("disallowed_mapgen_settings") or ""):split()
+ for _, value in pairs(ds) do
+ disallowed_mapgen_settings[value:trim()] = true
+ end
end
local mglist = ""
- local selindex = 1
+ local selindex
local i = 1
+ local first_mg
for k,v in pairs(mapgens) do
+ if not first_mg then
+ first_mg = v
+ end
if current_mg == v then
selindex = i
end
i = i + 1
mglist = mglist .. v .. ","
end
+ if not selindex then
+ selindex = 1
+ current_mg = first_mg
+ end
mglist = mglist:sub(1, -2)
- current_seed = core.formspec_escape(current_seed)
- local retval =
- "size[11.5,6.5,true]" ..
- "label[2,0;" .. fgettext("World name") .. "]"..
- "field[4.5,0.4;6,0.5;te_world_name;;" .. minetest.formspec_escape(worldname) .. "]" ..
+ local mg_main_flags = function(mapgen, y)
+ if mapgen == "singlenode" then
+ return "", y
+ end
+ if disallowed_mapgen_settings["mg_flags"] then
+ return "", y
+ end
- "label[2,1;" .. fgettext("Seed") .. "]"..
- "field[4.5,1.4;6,0.5;te_seed;;".. current_seed .. "]" ..
+ local form = "checkbox[0," .. y .. ";flag_mg_caves;" ..
+ fgettext("Caves") .. ";"..strflag(flags.main, "caves").."]"
+ y = y + 0.5
- "label[2,2;" .. fgettext("Mapgen") .. "]"..
- "dropdown[4.2,2;6.3;dd_mapgen;" .. mglist .. ";" .. selindex .. "]" ..
+ form = form .. "checkbox[0,"..y..";flag_mg_dungeons;" ..
+ fgettext("Dungeons") .. ";"..strflag(flags.main, "dungeons").."]"
+ y = y + 0.5
- "label[2,3;" .. fgettext("Game") .. "]"..
- "textlist[4.2,3;5.8,2.3;games;" .. pkgmgr.gamelist() ..
- ";" .. gameidx .. ";true]" ..
+ local d_name = fgettext("Decorations")
+ local d_tt
+ if mapgen == "v6" then
+ d_tt = fgettext("Structures appearing on the terrain (no effect on trees and jungle grass created by v6)")
+ else
+ d_tt = fgettext("Structures appearing on the terrain, typically trees and plants")
+ end
+ form = form .. "checkbox[0,"..y..";flag_mg_decorations;" ..
+ d_name .. ";" ..
+ strflag(flags.main, "decorations").."]" ..
+ "tooltip[flag_mg_decorations;" ..
+ d_tt ..
+ "]"
+ y = y + 0.5
- "button[3.25,6;2.5,0.5;world_create_confirm;" .. fgettext("Create") .. "]" ..
- "button[5.75,6;2.5,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]"
+ form = form .. "tooltip[flag_mg_caves;" ..
+ fgettext("Network of tunnels and caves")
+ .. "]"
+ return form, y
+ end
- if #pkgmgr.games == 0 then
- retval = retval .. "box[2,4;8,1;#ff8800]label[2.25,4;" ..
- fgettext("You have no games installed.") .. "]label[2.25,4.4;" ..
- fgettext("Download one from minetest.net") .. "]"
- elseif #pkgmgr.games == 1 and pkgmgr.games[1].id == "minimal" then
- retval = retval .. "box[1.75,4;8.7,1;#ff8800]label[2,4;" ..
- fgettext("Warning: The minimal development test is meant for developers.") .. "]label[2,4.4;" ..
+ local mg_specific_flags = function(mapgen, y)
+ if not flag_checkboxes[mapgen] then
+ return "", y
+ end
+ if disallowed_mapgen_settings["mg"..mapgen.."_spflags"] then
+ return "", y
+ end
+ local form = ""
+ for _,tab in pairs(flag_checkboxes[mapgen]) do
+ local id = "flag_mg"..mapgen.."_"..tab[1]
+ form = form .. ("checkbox[0,%f;%s;%s;%s]"):
+ format(y, id, tab[2], strflag(flags[mapgen], tab[3]))
+
+ if tab[4] then
+ form = form .. "tooltip["..id..";"..tab[4].."]"
+ end
+ y = y + 0.5
+ end
+
+ if mapgen ~= "v6" then
+ -- No special treatment
+ return form, y
+ end
+ -- Special treatment for v6 (add biome widgets)
+
+ -- Biome type (jungles, snowbiomes)
+ local biometype
+ if flags.v6.snowbiomes == true then
+ biometype = 1
+ elseif flags.v6.jungles == true then
+ biometype = 2
+ else
+ biometype = 3
+ end
+ y = y + 0.3
+
+ form = form .. "label[0,"..(y+0.1)..";" .. fgettext("Biomes") .. "]"
+ y = y + 0.6
+
+ form = form .. "dropdown[0,"..y..";6.3;mgv6_biomes;"
+ for b=1, #mgv6_biomes do
+ form = form .. mgv6_biomes[b][1]
+ if b < #mgv6_biomes then
+ form = form .. ","
+ end
+ end
+ form = form .. ";" .. biometype.. "]"
+
+ -- biomeblend
+ y = y + 0.55
+ form = form .. "checkbox[0,"..y..";flag_mgv6_biomeblend;" ..
+ fgettext("Biome blending") .. ";"..strflag(flags.v6, "biomeblend").."]" ..
+ "tooltip[flag_mgv6_biomeblend;" ..
+ fgettext("Smooth transition between biomes") .. "]"
+
+ return form, y
+ end
+
+ current_seed = core.formspec_escape(current_seed)
+
+ local y_start = 0.0
+ local y = y_start
+ local str_flags, str_spflags
+ local label_flags, label_spflags = "", ""
+ y = y + 0.3
+ str_flags, y = mg_main_flags(current_mg, y)
+ if str_flags ~= "" then
+ label_flags = "label[0,"..y_start..";" .. fgettext("Mapgen flags") .. "]"
+ y_start = y + 0.4
+ else
+ y_start = 0.0
+ end
+ y = y_start + 0.3
+ str_spflags = mg_specific_flags(current_mg, y)
+ if str_spflags ~= "" then
+ label_spflags = "label[0,"..y_start..";" .. fgettext("Mapgen-specific flags") .. "]"
+ end
+
+ -- Warning if only devtest is installed
+ local devtest_only = ""
+ local gamelist_height = 2.3
+ if #pkgmgr.games == 1 and pkgmgr.games[1].id == "devtest" then
+ devtest_only = "box[0,0;5.8,1.7;#ff8800]" ..
+ "textarea[0.3,0;6,1.8;;;"..
+ fgettext("Warning: The Development Test is meant for developers.") .. "\n" ..
fgettext("Download a game, such as Minetest Game, from minetest.net") .. "]"
+ gamelist_height = 0.5
end
+ local retval =
+ "size[12.25,7,true]" ..
+
+ -- Left side
+ "container[0,0]"..
+ "field[0.3,0.6;6,0.5;te_world_name;" ..
+ fgettext("World name") ..
+ ";" .. core.formspec_escape(worldname) .. "]" ..
+
+ "field[0.3,1.7;6,0.5;te_seed;" ..
+ fgettext("Seed") ..
+ ";".. current_seed .. "]" ..
+
+ "label[0,2;" .. fgettext("Mapgen") .. "]"..
+ "dropdown[0,2.5;6.3;dd_mapgen;" .. mglist .. ";" .. selindex .. "]" ..
+
+ "label[0,3.35;" .. fgettext("Game") .. "]"..
+ "textlist[0,3.85;5.8,"..gamelist_height..";games;" ..
+ pkgmgr.gamelist() .. ";" .. gameidx .. ";false]" ..
+ "container[0,4.5]" ..
+ devtest_only ..
+ "container_end[]" ..
+ "container_end[]" ..
+
+ -- Right side
+ "container[6.2,0]"..
+ label_flags .. str_flags ..
+ label_spflags .. str_spflags ..
+ "container_end[]"..
+
+ -- Menu buttons
+ "button[3.25,6.5;3,0.5;world_create_confirm;" .. fgettext("Create") .. "]" ..
+ "button[6.25,6.5;3,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]"
+
return retval
end
@@ -150,11 +405,53 @@ local function create_world_buttonhandler(this, fields)
return true
end
+ for k,v in pairs(fields) do
+ local split = string.split(k, "_", nil, 3)
+ if split and split[1] == "flag" then
+ local setting
+ if split[2] == "mg" then
+ setting = "mg_flags"
+ else
+ setting = split[2].."_spflags"
+ end
+ -- We replaced the underscore of flag names with a dash.
+ local flag = string.gsub(split[3], "-", "_")
+ local ftable = core.settings:get_flags(setting)
+ if v == "true" then
+ ftable[flag] = true
+ else
+ ftable[flag] = false
+ end
+ local flags = table_to_flags(ftable)
+ core.settings:set(setting, flags)
+ return true
+ end
+ end
+
if fields["world_create_cancel"] then
this:delete()
return true
end
+ if fields["mgv6_biomes"] then
+ local entry = minetest.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")
+ ftable.jungles = mgv6_biomes[b][2].jungles
+ ftable.snowbiomes = mgv6_biomes[b][2].snowbiomes
+ local flags = table_to_flags(ftable)
+ core.settings:set("mgv6_spflags", flags)
+ return true
+ end
+ end
+ end
+
+ if fields["dd_mapgen"] then
+ core.settings:set("mg_name", fields["dd_mapgen"])
+ return true
+ end
+
return false
end
diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua
index 21b74f34a..ae9ae8853 100644
--- a/builtin/mainmenu/init.lua
+++ b/builtin/mainmenu/init.lua
@@ -20,20 +20,18 @@ mt_color_blue = "#6389FF"
mt_color_green = "#72FF63"
mt_color_dark_green = "#25C191"
---for all other colors ask sfan5 to complete his work!
-
local menupath = core.get_mainmenu_path()
local basepath = core.get_builtin_path()
local menustyle = core.settings:get("main_menu_style")
defaulttexturedir = core.get_texturepath_share() .. DIR_DELIM .. "base" ..
DIR_DELIM .. "pack" .. DIR_DELIM
-dofile(basepath .. "common" .. DIR_DELIM .. "async_event.lua")
dofile(basepath .. "common" .. DIR_DELIM .. "filterlist.lua")
dofile(basepath .. "fstk" .. DIR_DELIM .. "buttonbar.lua")
dofile(basepath .. "fstk" .. DIR_DELIM .. "dialog.lua")
dofile(basepath .. "fstk" .. DIR_DELIM .. "tabview.lua")
dofile(basepath .. "fstk" .. DIR_DELIM .. "ui.lua")
+dofile(menupath .. DIR_DELIM .. "async_event.lua")
dofile(menupath .. DIR_DELIM .. "common.lua")
dofile(menupath .. DIR_DELIM .. "pkgmgr.lua")
dofile(menupath .. DIR_DELIM .. "textures.lua")
diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua
index dbea12669..14fcda0da 100644
--- a/builtin/mainmenu/tab_credits.lua
+++ b/builtin/mainmenu/tab_credits.lua
@@ -23,51 +23,31 @@ local hackers = {
local core_developers = {
"Perttu Ahola (celeron55) <celeron55@gmail.com>",
"sfan5 <sfan5@live.de>",
- "ShadowNinja <shadowninja@minetest.net>",
"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>",
- "rubenwardy <rw@rubenwardy.com>",
+ "Andrew Ward (rubenwardy) <rw@rubenwardy.com>",
"Krock/SmallJoker <mk939@ymail.com>",
"Lars Hofhansl <larsh@apache.org>",
}
local active_contributors = {
- "numberZero [Audiovisuals: meshgen]",
- "stujones11 [Android UX improvements]",
- "red-001 <red-001@outlook.ie> [CSM & Menu fixes]",
- "Paul Ouellette (pauloue) [Docs, fixes]",
- "Dániel Juhász (juhdanad) <juhdanad@gmail.com> [Audiovisuals: lighting]",
- "Hybrid Dog [API]",
- "srifqi [Android]",
- "Vincent Glize (Dumbeldor) [Cleanups, CSM APIs]",
- "Ben Deutsch [Rendering, Fixes, SQLite auth]",
- "Wuzzy [Translation, Slippery]",
- "ANAND (ClobberXD) [Docs, Fixes]",
- "Shara/Ezhh [Docs, Game API]",
- "DTA7 [Fixes, mute key]",
- "Thomas-S [Disconnected, Formspecs]",
- "Raymoo [Tool Capabilities]",
- "Elijah Duffy (octacian) [Mainmenu]",
- "noob3167 [Fixes]",
- "adelcoding1 [Formspecs]",
- "adrido [Windows Installer, Formspecs]",
- "Rui [Sound Pitch]",
- "Jean-Patrick G (kilbith) <jeanpatrick.guerrero@gmail.com> [Audiovisuals]",
- "Esteban (EXio4) [Cleanups]",
- "Vaughan Lapsley (vlapsley) [Carpathian mapgen]",
- "CoderForTheBetter [Add set_rotation]",
- "Quentin Bazin (Unarelith) [Cleanups]",
+ "Hugues Ross [Formspecs]",
"Maksim (MoNTE48) [Android]",
- "Gaël-de-Sailly [Mapgen, pitch fly]",
- "zeuner [Docs, Fixes]",
- "ThomasMonroe314 (tre) [Fixes]",
- "Rob Blanckaert (basicer) [Fixes]",
- "Jozef Behran (osjc) [Fixes]",
- "random-geek [Fixes]",
- "Pedro Gimeno (pgimeno) [Fixes]",
- "lisacvuk [Fixes]",
+ "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]",
+ "dcbrwn [Object shading]",
+ "srifqi [Fixes]",
}
local previous_core_developers = {
@@ -82,24 +62,31 @@ local previous_core_developers = {
"Ryan Kwolek (kwolekr) <kwolekr@minetest.net>",
"sapier",
"Zeno",
+ "ShadowNinja <shadowninja@minetest.net>",
}
local previous_contributors = {
- "Gregory Currie (gregorycu) [optimisation]",
- "Diego Martínez (kaeza) <kaeza@users.sf.net>",
- "T4im [Profiler]",
- "TeTpaAka [Hand overriding, nametag colors]",
- "Duane Robertson <duane@duanerobertson.com> [MGValleys]",
- "neoascetic [OS X Fixes]",
- "TriBlade9 <triblade9@mail.com> [Audiovisuals]",
- "Jurgen Doser (doserj) <jurgen.doser@gmail.com> [Fixes]",
- "MirceaKitsune <mirceakitsune@gmail.com> [Audiovisuals]",
- "Guiseppe Bilotta (Oblomov) <guiseppe.bilotta@gmail.com> [Fixes]",
- "matttpt <matttpt@gmail.com> [Fixes]",
"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",
+ "MirceaKitsune <mirceakitsune@gmail.com>",
+ "Constantin Wenger (SpeedProg)",
+ "Ciaran Gultnieks (CiaranG)",
+ "stujones11 [Android UX improvements]",
"Jeija <jeija@mesecons.net> [HTTP, particles]",
- "bigfoot547 [CSM]",
+ "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>",
}
local function buildCreditList(source)
@@ -117,8 +104,8 @@ return {
local logofile = defaulttexturedir .. "logo.png"
local version = core.get_version()
return "image[0.5,1;" .. core.formspec_escape(logofile) .. "]" ..
- "label[0.5,3.2;" .. version.project .. " " .. version.string .. "]" ..
- "label[0.5,3.5;http://minetest.net]" ..
+ "label[0.5,2.8;" .. version.project .. " " .. version.string .. "]" ..
+ "button[0.5,3;2,2;homepage;minetest.net]" ..
"tablecolumns[color;text]" ..
"tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
"table[3.5,-0.25;8.5,6.05;list_credits;" ..
@@ -133,5 +120,10 @@ return {
"#FFFF00," .. fgettext("Previous Contributors") .. ",," ..
buildCreditList(previous_contributors) .. "," ..
";1]"
- end
+ end,
+ cbf_button_handler = function(this, fields, name, tabdata)
+ if fields.homepage then
+ core.open_url("https://www.minetest.net")
+ end
+ end,
}
diff --git a/builtin/mainmenu/tab_local.lua b/builtin/mainmenu/tab_local.lua
index 0969bccfb..a21cf12b1 100644
--- a/builtin/mainmenu/tab_local.lua
+++ b/builtin/mainmenu/tab_local.lua
@@ -35,6 +35,15 @@ if enable_gamebar then
end
local function game_buttonbar_button_handler(fields)
+ if fields.game_open_cdb then
+ local maintab = ui.find_by_name("maintab")
+ local dlg = create_store_dlg("game")
+ dlg:set_parent(maintab)
+ maintab:hide()
+ dlg:show()
+ return true
+ end
+
for key,value in pairs(fields) do
for j=1,#pkgmgr.games,1 do
if ("game_btnbar_" .. pkgmgr.games[j].id == key) then
@@ -87,6 +96,9 @@ if enable_gamebar then
end
btnbar:add_button(btn_name, text, image, tooltip)
end
+
+ local plus_image = core.formspec_escape(defaulttexturedir .. "plus.png")
+ btnbar:add_button("game_open_cdb", "", plus_image, fgettext("Install games from ContentDB"))
end
else
function current_game()
@@ -207,40 +219,35 @@ local function main_button_handler(this, fields, name, tabdata)
local selected = core.get_textlist_index("sp_worlds")
gamedata.selected_world = menudata.worldlist:get_raw_index(selected)
- if core.settings:get_bool("enable_server") then
- if selected ~= nil and gamedata.selected_world ~= 0 then
- gamedata.playername = fields["te_playername"]
- gamedata.password = fields["te_passwd"]
- gamedata.port = fields["te_serverport"]
- gamedata.address = ""
-
- core.settings:set("port",gamedata.port)
- if fields["te_serveraddr"] ~= nil then
- core.settings:set("bind_address",fields["te_serveraddr"])
- end
+ if selected == nil or gamedata.selected_world == 0 then
+ gamedata.errormessage =
+ fgettext("No world created or selected!")
+ return true
+ end
- --update last game
- local world = menudata.worldlist:get_raw_element(gamedata.selected_world)
- if world then
- local game = pkgmgr.find_by_gameid(world.gameid)
- core.settings:set("menu_last_game", game.id)
- end
+ -- Update last game
+ local world = menudata.worldlist:get_raw_element(gamedata.selected_world)
+ if world then
+ local game = pkgmgr.find_by_gameid(world.gameid)
+ core.settings:set("menu_last_game", game.id)
+ end
- core.start()
- else
- gamedata.errormessage =
- fgettext("No world created or selected!")
+ if core.settings:get_bool("enable_server") then
+ gamedata.playername = fields["te_playername"]
+ gamedata.password = fields["te_passwd"]
+ gamedata.port = fields["te_serverport"]
+ gamedata.address = ""
+
+ core.settings:set("port",gamedata.port)
+ if fields["te_serveraddr"] ~= nil then
+ core.settings:set("bind_address",fields["te_serveraddr"])
end
else
- if selected ~= nil and gamedata.selected_world ~= 0 then
- gamedata.singleplayer = true
- core.start()
- else
- gamedata.errormessage =
- fgettext("No world created or selected!")
- end
- return true
+ gamedata.singleplayer = true
end
+
+ core.start()
+ return true
end
if fields["world_create"] ~= nil then
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
index 1f48a7a13..2a53a3315 100644
--- a/builtin/settingtypes.txt
+++ b/builtin/settingtypes.txt
@@ -42,10 +42,10 @@
# Flags are always separated by comma without spaces.
# - default possible_flags
# * noise_params_2d:
-# Format is <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, <octaves>, <persistance>, <lacunarity>[, <default flags>]
+# Format is <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, <octaves>, <persistence>, <lacunarity>[, <default flags>]
# - default
# * noise_params_3d:
-# Format is <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, <octaves>, <persistance>, <lacunarity>[, <default flags>]
+# Format is <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, <octaves>, <persistence>, <lacunarity>[, <default flags>]
# - default
# * v3f:
# Format is (<X>, <Y>, <Z>)
@@ -252,7 +252,7 @@ keymap_cinematic (Cinematic mode key) key
# Key for toggling display of minimap.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_minimap (Minimap key) key KEY_F9
+keymap_minimap (Minimap key) key KEY_KEY_V
# Key for taking screenshots.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
@@ -424,7 +424,7 @@ keymap_toggle_profiler (Profiler toggle key) key KEY_F6
# Key for switching between first- and third-person camera.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_camera_mode (Toggle camera mode key) key KEY_F7
+keymap_camera_mode (Toggle camera mode key) key KEY_KEY_C
# Key for increasing the viewing range.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
@@ -561,9 +561,6 @@ enable_parallax_occlusion (Parallax occlusion) bool false
# 1 = relief mapping (slower, more accurate).
parallax_occlusion_mode (Parallax occlusion mode) int 1 0 1
-# Strength of parallax.
-3d_paralax_strength (Parallax occlusion strength) float 0.025
-
# Number of parallax occlusion iterations.
parallax_occlusion_iterations (Parallax occlusion iterations) int 4
@@ -713,6 +710,9 @@ fall_bobbing_amount (Fall bobbing factor) float 0.03
# Note that the interlaced mode requires shaders to be enabled.
3d_mode (3D mode) enum none none,anaglyph,interlaced,topbottom,sidebyside,crossview,pageflip
+# Strength of 3D mode parallax.
+3d_paralax_strength (3D mode parallax strength) float 0.025
+
# In-game chat console height, between 0.1 (10%) and 1.0 (100%).
console_height (Console height) float 0.6 0.1 1.0
@@ -741,9 +741,11 @@ selectionbox_color (Selection box color) string (0,0,0)
selectionbox_width (Selection box width) int 2 1 5
# Crosshair color (R,G,B).
+# Also controls the object crosshair color
crosshair_color (Crosshair color) string (255,255,255)
# Crosshair alpha (opaqueness, between 0 and 255).
+# Also controls the object crosshair color
crosshair_alpha (Crosshair alpha) int 255 0 255
# Maximum number of recent chat messages to show
@@ -817,7 +819,8 @@ world_aligned_mode (World-aligned textures mode) enum enable disable,enable,forc
autoscale_mode (Autoscaling mode) enum disable disable,enable,force
# Show entity selection boxes
-show_entity_selectionbox (Show entity selection boxes) bool true
+# A restart is required after changing this.
+show_entity_selectionbox (Show entity selection boxes) bool false
[*Menus]
@@ -903,8 +906,13 @@ fallback_font_shadow_alpha (Fallback font shadow alpha) int 128 0 255
# This font will be used for certain languages or if the default font is unavailable.
fallback_font_path (Fallback font path) filepath fonts/DroidSansFallbackFull.ttf
-# Path to save screenshots at.
-screenshot_path (Screenshot folder) path
+# Font size of the recent chat text and chat prompt in point (pt).
+# Value 0 will use the default font size.
+chat_font_size (Chat font size) int 0
+
+# Path to save screenshots at. Can be an absolute or relative path.
+# The folder will be created if it doesn't already exist.
+screenshot_path (Screenshot folder) path screenshots
# Format of screenshots.
screenshot_format (Screenshot format) enum png png,jpg,bmp,pcx,ppm,tga
@@ -954,6 +962,12 @@ address (Server address) string
# Note that the port field in the main menu overrides this setting.
remote_port (Remote port) int 30000 1 65535
+# Prometheus listener address.
+# If minetest is compiled with ENABLE_PROMETHEUS option enabled,
+# enable metrics listener for Prometheus on that address.
+# Metrics can be fetch on http://127.0.0.1:30000/metrics
+prometheus_listener_address (Prometheus listener address) string 127.0.0.1:30000
+
# Save the map received by the client on disk.
enable_local_map_saving (Saving map received from server) bool false
@@ -1078,6 +1092,10 @@ map-dir (Map directory) path
# Setting it to -1 disables the feature.
item_entity_ttl (Item entity TTL) int 900
+# Specifies the default stack size of nodes, items and tools.
+# Note that mods or games may explicitly set a stack for certain (or all) items.
+default_stack_max (Default stack size) int 99
+
# Enable players getting damage and dying.
enable_damage (Damage) bool false
@@ -1149,7 +1167,7 @@ active_object_send_range_blocks (Active object send range) int 4
# active block stuff, stated in mapblocks (16 nodes).
# In active blocks objects are loaded and ABMs run.
# This is also the minimum range in which active objects (mobs) are maintained.
-# This should be configured together with active_object_range.
+# This should be configured together with active_object_send_range_blocks.
active_block_range (Active block range) int 3
# From how far blocks are sent to clients, stated in mapblocks (16 nodes).
@@ -1372,7 +1390,7 @@ name (Player name) string
# Set the language. Leave empty to use the system language.
# A restart is required after changing this.
-language (Language) enum ,ar,ca,cs,da,de,dv,el,eo,es,et,eu,fil,fr,hu,id,it,ja,ja_KS,jbo,kk,kn,lo,lt,ms,my,nb,nl,nn,pl,pt,pt_BR,ro,ru,sl,sr_Cyrl,sv,sw,th,tr,uk,vi
+language (Language) enum ,ar,ca,cs,da,de,dv,el,en,eo,es,et,eu,fil,fr,hu,id,it,ja,ja_KS,jbo,kk,kn,lo,lt,ms,my,nb,nl,nn,pl,pt,pt_BR,ro,ru,sl,sr_Cyrl,sv,sw,th,tr,uk,vi
# Level of logging to be written to debug.txt:
# - <nothing> (no logging)
@@ -1390,6 +1408,9 @@ debug_log_level (Debug log level) enum action ,none,error,warning,action,info,ve
# debug.txt is only moved if this setting is positive.
debug_log_size_max (Debug log file size threshold) int 50
+# Minimal level of logging to be written to chat.
+chat_log_level (Chat log level) enum error ,none,error,warning,action,info,verbose
+
# Enable IPv6 support (for both client and server).
# Required for IPv6 connections to work at all.
enable_ipv6 (IPv6) bool true
@@ -1593,12 +1614,53 @@ mgv6_np_apple_trees (Apple trees noise) noise_params_2d 0, 1, (100, 100, 100), 3
[*Mapgen V7]
# Map generation attributes specific to Mapgen v7.
-# 'ridges' enables the rivers.
+# 'ridges': Rivers.
+# 'floatlands': Floating land masses in the atmosphere.
+# 'caverns': Giant caves deep underground.
mgv7_spflags (Mapgen V7 specific flags) flags mountains,ridges,nofloatlands,caverns mountains,ridges,floatlands,caverns,nomountains,noridges,nofloatlands,nocaverns
# Y of mountain density gradient zero level. Used to shift mountains vertically.
mgv7_mount_zero_level (Mountain zero level) int 0
+# Lower Y limit of floatlands.
+mgv7_floatland_ymin (Floatland minimum Y) int 1024
+
+# Upper Y limit of floatlands.
+mgv7_floatland_ymax (Floatland maximum Y) int 4096
+
+# Y-distance over which floatlands taper from full density to nothing.
+# Tapering starts at this distance from the Y limit.
+# For a solid floatland layer, this controls the height of hills/mountains.
+# Must be less than or equal to half the distance between the Y limits.
+mgv7_floatland_taper (Floatland tapering distance) int 256
+
+# Exponent of the floatland tapering. Alters the tapering behaviour.
+# Value = 1.0 creates a uniform, linear tapering.
+# Values > 1.0 create a smooth tapering suitable for the default separated
+# floatlands.
+# Values < 1.0 (for example 0.25) create a more defined surface level with
+# flatter lowlands, suitable for a solid floatland layer.
+mgv7_float_taper_exp (Floatland taper exponent) float 2.0
+
+# Adjusts the density of the floatland layer.
+# Increase value to increase density. Can be positive or negative.
+# Value = 0.0: 50% of volume is floatland.
+# Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test
+# to be sure) creates a solid floatland layer.
+mgv7_floatland_density (Floatland density) float -0.6
+
+# Surface level of optional water placed on a solid floatland layer.
+# Water is disabled by default and will only be placed if this value is set
+# to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the
+# upper tapering).
+# ***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:
+# When enabling water placement the floatlands must be configured and tested
+# to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other
+# required value depending on 'mgv7_np_floatland'), to avoid
+# server-intensive extreme water flow and to avoid vast flooding of the
+# world surface below.
+mgv7_floatland_ywater (Floatland water level) int -31000
+
# Controls width of tunnels, a smaller value creates wider tunnels.
# Value >= 10.0 completely disables generation of tunnels and avoids the
# intensive noise calculations.
@@ -1668,6 +1730,12 @@ mgv7_np_mountain (Mountain noise) noise_params_3d -0.6, 1, (250, 350, 250), 5333
# 3D noise defining structure of river canyon walls.
mgv7_np_ridge (Ridge noise) noise_params_3d 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0
+# 3D noise defining structure of floatlands.
+# If altered from the default, the noise 'scale' (0.7 by default) may need
+# to be adjusted, as floatland tapering functions best when this noise has
+# a value range of approximately -2.0 to 2.0.
+mgv7_np_floatland (Floatland noise) noise_params_3d 0, 0.7, (384, 96, 384), 1009, 4, 0.75, 1.618
+
# 3D noise defining giant caverns.
mgv7_np_cavern (Cavern noise) noise_params_3d 0, 1, (384, 128, 384), 723, 5, 0.63, 2.0
@@ -2098,20 +2166,17 @@ chunksize (Chunk size) int 5
enable_mapgen_debug_info (Mapgen debug) bool false
# Maximum number of blocks that can be queued for loading.
-emergequeue_limit_total (Absolute limit of emerge queues) int 512
+emergequeue_limit_total (Absolute limit of queued blocks to emerge) int 512
# Maximum number of blocks to be queued that are to be loaded from file.
-# Set to blank for an appropriate amount to be chosen automatically.
-emergequeue_limit_diskonly (Limit of emerge queues on disk) int 64
+# This limit is enforced per player.
+emergequeue_limit_diskonly (Per-player limit of queued blocks load from disk) int 64
# Maximum number of blocks to be queued that are to be generated.
-# Set to blank for an appropriate amount to be chosen automatically.
-emergequeue_limit_generate (Limit of emerge queues to generate) int 64
+# This limit is enforced per player.
+emergequeue_limit_generate (Per-player limit of queued blocks to generate) int 64
# Number of emerge threads to use.
-# WARNING: Currently there are multiple bugs that may cause crashes when
-# 'num_emerge_threads' is larger than 1. Until this warning is removed it is
-# strongly recommended this value is set to the default '1'.
# Value 0:
# - Automatic selection. The number of emerge threads will be
# - 'number of processors - 2', with a lower limit of 1.
diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl
index ccff1260d..0d8d0a2a5 100644
--- a/client/shaders/nodes_shader/opengl_vertex.glsl
+++ b/client/shaders/nodes_shader/opengl_vertex.glsl
@@ -101,8 +101,8 @@ void main(void)
float disp_x;
float disp_z;
-#if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES) || \
- (MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS)
+// OpenGL < 4.3 does not support continued preprocessor lines
+#if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES) || (MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS)
vec4 pos2 = mWorld * gl_Vertex;
float tOffset = (pos2.x + pos2.y) * 0.001 + pos2.z * 0.002;
disp_x = (smoothTriangleWave(animationTimer * 23.0 + tOffset) +
diff --git a/client/shaders/object_shader/opengl_fragment.glsl b/client/shaders/object_shader/opengl_fragment.glsl
index bb9e40637..0534dc049 100644
--- a/client/shaders/object_shader/opengl_fragment.glsl
+++ b/client/shaders/object_shader/opengl_fragment.glsl
@@ -25,6 +25,38 @@ const float BS = 10.0;
const float fogStart = FOG_START;
const float fogShadingParameter = 1 / ( 1 - fogStart);
+#ifdef ENABLE_TONE_MAPPING
+
+/* Hable's UC2 Tone mapping parameters
+ A = 0.22;
+ B = 0.30;
+ C = 0.10;
+ D = 0.20;
+ E = 0.01;
+ F = 0.30;
+ W = 11.2;
+ equation used: ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F
+*/
+
+vec3 uncharted2Tonemap(vec3 x)
+{
+ return ((x * (0.22 * x + 0.03) + 0.002) / (x * (0.22 * x + 0.3) + 0.06)) - 0.03333;
+}
+
+vec4 applyToneMapping(vec4 color)
+{
+ color = vec4(pow(color.rgb, vec3(2.2)), color.a);
+ const float gamma = 1.6;
+ const float exposureBias = 5.5;
+ color.rgb = uncharted2Tonemap(exposureBias * color.rgb);
+ // Precalculated white_scale from
+ //vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W));
+ vec3 whiteScale = vec3(1.036015346);
+ color.rgb *= whiteScale;
+ return vec4(pow(color.rgb, vec3(1.0 / gamma)), color.a);
+}
+#endif
+
void get_texture_flags()
{
vec4 flags = texture2D(textureFlags, vec2(0.0, 0.0));
@@ -113,7 +145,14 @@ void main(void)
vec4 col = vec4(color.rgb, base.a);
+ col.rgb *= gl_Color.rgb;
+
col.rgb *= emissiveColor.rgb * vIDiff;
+
+#ifdef ENABLE_TONE_MAPPING
+ col = applyToneMapping(col);
+#endif
+
// Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?),
// the fog will only be rendered correctly if the last operation before the
// clamp() is an addition. Else, the clamp() seems to be ignored.
diff --git a/client/shaders/object_shader/opengl_vertex.glsl b/client/shaders/object_shader/opengl_vertex.glsl
index 488089392..968a07e22 100644
--- a/client/shaders/object_shader/opengl_vertex.glsl
+++ b/client/shaders/object_shader/opengl_vertex.glsl
@@ -38,7 +38,16 @@ void main(void)
lightVec = sunPosition - worldPosition;
eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz;
- vIDiff = directional_ambient(normalize(gl_Normal));
+
+#if (MATERIAL_TYPE == TILE_MATERIAL_PLAIN) || (MATERIAL_TYPE == TILE_MATERIAL_PLAIN_ALPHA)
+ vIDiff = 1.0;
+#else
+ // This is intentional comparison with zero without any margin.
+ // If normal is not equal to zero exactly, then we assume it's a valid, just not normalized vector
+ vIDiff = length(gl_Normal) == 0.0
+ ? 1.0
+ : directional_ambient(normalize(gl_Normal));
+#endif
gl_FrontColor = gl_BackColor = gl_Color;
}
diff --git a/client/shaders/wielded_shader/opengl_fragment.glsl b/client/shaders/wielded_shader/opengl_fragment.glsl
deleted file mode 100644
index 546aef71d..000000000
--- a/client/shaders/wielded_shader/opengl_fragment.glsl
+++ /dev/null
@@ -1,127 +0,0 @@
-uniform sampler2D baseTexture;
-uniform sampler2D normalTexture;
-uniform sampler2D textureFlags;
-
-uniform vec4 skyBgColor;
-uniform float fogDistance;
-uniform vec3 eyePosition;
-
-varying vec3 vPosition;
-varying vec3 worldPosition;
-
-varying vec3 eyeVec;
-varying vec3 lightVec;
-
-bool normalTexturePresent = false;
-bool texTileableHorizontal = false;
-bool texTileableVertical = false;
-bool texSeamless = false;
-
-const float e = 2.718281828459;
-const float BS = 10.0;
-const float fogStart = FOG_START;
-const float fogShadingParameter = 1 / ( 1 - fogStart);
-
-void get_texture_flags()
-{
- vec4 flags = texture2D(textureFlags, vec2(0.0, 0.0));
- if (flags.r > 0.5) {
- normalTexturePresent = true;
- }
- if (flags.g > 0.5) {
- texTileableHorizontal = true;
- }
- if (flags.b > 0.5) {
- texTileableVertical = true;
- }
- if (texTileableHorizontal && texTileableVertical) {
- texSeamless = true;
- }
-}
-
-float intensity(vec3 color)
-{
- return (color.r + color.g + color.b) / 3.0;
-}
-
-float get_rgb_height(vec2 uv)
-{
- if (texSeamless) {
- return intensity(texture2D(baseTexture, uv).rgb);
- } else {
- return intensity(texture2D(baseTexture, clamp(uv, 0.0, 0.999)).rgb);
- }
-}
-
-vec4 get_normal_map(vec2 uv)
-{
- vec4 bump = texture2D(normalTexture, uv).rgba;
- bump.xyz = normalize(bump.xyz * 2.0 - 1.0);
- return bump;
-}
-
-void main(void)
-{
- vec3 color;
- vec4 bump;
- vec2 uv = gl_TexCoord[0].st;
- bool use_normalmap = false;
- get_texture_flags();
-
-#if USE_NORMALMAPS == 1
- if (normalTexturePresent) {
- bump = get_normal_map(uv);
- use_normalmap = true;
- }
-#endif
-
-#if GENERATE_NORMALMAPS == 1
- if (normalTexturePresent == false) {
- float tl = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y + SAMPLE_STEP));
- float t = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y - SAMPLE_STEP));
- float tr = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y + SAMPLE_STEP));
- float r = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y));
- float br = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y - SAMPLE_STEP));
- float b = get_rgb_height(vec2(uv.x, uv.y - SAMPLE_STEP));
- float bl = get_rgb_height(vec2(uv.x -SAMPLE_STEP, uv.y - SAMPLE_STEP));
- float l = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y));
- float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl);
- float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr);
- bump = vec4(normalize(vec3 (dX, dY, NORMALMAPS_STRENGTH)), 1.0);
- use_normalmap = true;
- }
-#endif
-
- vec4 base = texture2D(baseTexture, uv).rgba;
-
-#ifdef ENABLE_BUMPMAPPING
- if (use_normalmap) {
- vec3 L = normalize(lightVec);
- vec3 E = normalize(eyeVec);
- float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0), 1.0);
- float diffuse = dot(-E,bump.xyz);
- color = (diffuse + 0.1 * specular) * base.rgb;
- } else {
- color = base.rgb;
- }
-#else
- color = base.rgb;
-#endif
-
- vec4 col = vec4(color.rgb, base.a);
- col *= gl_Color;
- // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?),
- // the fog will only be rendered correctly if the last operation before the
- // clamp() is an addition. Else, the clamp() seems to be ignored.
- // E.g. the following won't work:
- // float clarity = clamp(fogShadingParameter
- // * (fogDistance - length(eyeVec)) / fogDistance), 0.0, 1.0);
- // As additions usually come for free following a multiplication, the new formula
- // should be more efficient as well.
- // Note: clarity = (1 - fogginess)
- float clarity = clamp(fogShadingParameter
- - fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0);
- col = mix(skyBgColor, col, clarity);
-
- gl_FragColor = vec4(col.rgb, base.a);
-}
diff --git a/client/shaders/wielded_shader/opengl_vertex.glsl b/client/shaders/wielded_shader/opengl_vertex.glsl
deleted file mode 100644
index 9f05b833a..000000000
--- a/client/shaders/wielded_shader/opengl_vertex.glsl
+++ /dev/null
@@ -1,32 +0,0 @@
-uniform mat4 mWorldViewProj;
-uniform mat4 mWorld;
-
-uniform vec3 eyePosition;
-uniform float animationTimer;
-
-varying vec3 vPosition;
-varying vec3 worldPosition;
-
-varying vec3 eyeVec;
-varying vec3 lightVec;
-varying vec3 tsEyeVec;
-varying vec3 tsLightVec;
-
-const float e = 2.718281828459;
-const float BS = 10.0;
-
-void main(void)
-{
- gl_TexCoord[0] = gl_MultiTexCoord0;
- gl_Position = mWorldViewProj * gl_Vertex;
-
- vPosition = gl_Position.xyz;
- worldPosition = (mWorld * gl_Vertex).xyz;
-
- vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0);
-
- lightVec = sunPosition - worldPosition;
- eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz;
-
- gl_FrontColor = gl_BackColor = gl_Color;
-}
diff --git a/cmake/Modules/FindGettextLib.cmake b/cmake/Modules/FindGettextLib.cmake
index 11de12177..529452a4a 100644
--- a/cmake/Modules/FindGettextLib.cmake
+++ b/cmake/Modules/FindGettextLib.cmake
@@ -55,10 +55,10 @@ endif(WIN32)
include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(GetText DEFAULT_MSG ${GETTEXT_REQUIRED_VARS})
+find_package_handle_standard_args(GettextLib DEFAULT_MSG ${GETTEXT_REQUIRED_VARS})
-if(GETTEXT_FOUND)
+if(GETTEXTLIB_FOUND)
# BSD variants require special linkage as they don't use glibc
if(${CMAKE_SYSTEM_NAME} MATCHES "BSD|DragonFly")
set(GETTEXT_LIBRARY "intl")
diff --git a/cmake/Modules/FindJson.cmake b/cmake/Modules/FindJson.cmake
index 53ddf4599..a5e9098f8 100644
--- a/cmake/Modules/FindJson.cmake
+++ b/cmake/Modules/FindJson.cmake
@@ -11,14 +11,14 @@ if(ENABLE_SYSTEM_JSONCPP)
find_path(JSON_INCLUDE_DIR json/allocator.h PATH_SUFFIXES jsoncpp)
include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(JSONCPP DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR)
+ find_package_handle_standard_args(Json DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR)
- if(JSONCPP_FOUND)
+ if(JSON_FOUND)
message(STATUS "Using system JSONCPP library.")
endif()
endif()
-if(NOT JSONCPP_FOUND)
+if(NOT JSON_FOUND)
message(STATUS "Using bundled JSONCPP library.")
set(JSON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/jsoncpp)
set(JSON_LIBRARY jsoncpp)
diff --git a/cmake/Modules/FindLuaJIT.cmake b/cmake/Modules/FindLuaJIT.cmake
index 4bc88b6b1..97b0b7c64 100644
--- a/cmake/Modules/FindLuaJIT.cmake
+++ b/cmake/Modules/FindLuaJIT.cmake
@@ -55,7 +55,7 @@ ENDIF()
INCLUDE(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set LUAJIT_FOUND to TRUE if
# all listed variables are TRUE
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(LuaJit
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LuaJIT
REQUIRED_VARS LUA_LIBRARY LUA_INCLUDE_DIR
VERSION_VAR LUA_VERSION_STRING)
diff --git a/cmake/Modules/FindVorbis.cmake b/cmake/Modules/FindVorbis.cmake
index 8f3813694..e5fe7f25e 100644
--- a/cmake/Modules/FindVorbis.cmake
+++ b/cmake/Modules/FindVorbis.cmake
@@ -20,13 +20,13 @@ if(NOT GP2XWIZ)
# Handle the QUIETLY and REQUIRED arguments and set VORBIS_FOUND
# to TRUE if all listed variables are TRUE.
include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(VORBIS DEFAULT_MSG
+ find_package_handle_standard_args(Vorbis DEFAULT_MSG
OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR
OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY)
else(NOT GP2XWIZ)
find_path(VORBIS_INCLUDE_DIR tremor/ivorbisfile.h)
find_library(VORBIS_LIBRARY NAMES vorbis_dec)
- find_package_handle_standard_args(VORBIS DEFAULT_MSG
+ find_package_handle_standard_args(Vorbis DEFAULT_MSG
VORBIS_INCLUDE_DIR VORBIS_LIBRARY)
endif(NOT GP2XWIZ)
diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
index 3618b852d..d7816f0e4 100644
--- a/doc/Doxyfile.in
+++ b/doc/Doxyfile.in
@@ -20,18 +20,10 @@ PREDEFINED = "USE_SPATIAL=1" \
"USE_GETTEXT=1"
# Input
-RECURSIVE = NO
+RECURSIVE = YES
STRIP_FROM_PATH = @CMAKE_CURRENT_SOURCE_DIR@/src
INPUT = @CMAKE_CURRENT_SOURCE_DIR@/doc/main_page.dox \
- @CMAKE_CURRENT_SOURCE_DIR@/src/ \
- @CMAKE_CURRENT_SOURCE_DIR@/src/client \
- @CMAKE_CURRENT_SOURCE_DIR@/src/network \
- @CMAKE_CURRENT_SOURCE_DIR@/src/util \
- @CMAKE_CURRENT_SOURCE_DIR@/src/script \
- @CMAKE_CURRENT_SOURCE_DIR@/src/script/common \
- @CMAKE_CURRENT_SOURCE_DIR@/src/script/cpp_api \
- @CMAKE_CURRENT_SOURCE_DIR@/src/script/lua_api \
- @CMAKE_CURRENT_SOURCE_DIR@/src/threading
+ @CMAKE_CURRENT_SOURCE_DIR@/src/
# Dot graphs
HAVE_DOT = @DOXYGEN_DOT_FOUND@
diff --git a/doc/README.android b/doc/README.android
index c21279583..f6b67978f 100644
--- a/doc/README.android
+++ b/doc/README.android
@@ -1,6 +1,5 @@
-Minetest Android port
-=====================
-Date: 2014 06 28
+Minetest: Android version
+=========================
Controls
--------
@@ -40,25 +39,6 @@ file can usually be found at /mnt/sdcard/Minetest.
main menu is too big or small on your device, try changing this
value.
-Known issues
-------------
-Not all issues are fixed by now:
-
-* Unable to exit from volume menu -- don't use the volume menu, use Android's
- volume controls instead.
-* 512 MB RAM seems to be inadequate -- this depends on the server you join.
- Try to play on more lightweight servers.
-
-Versioning
-----------
-Android version numbers are 4 digits instead of Minetest's 3 digits. The last
-number of Android's version represents the Android internal version code. This
-version code is strictly incremental. It's incremented for each official
-Minetest Android build.
-
-E.g. prerelease Minetest Android builds have been 0.4.9.3, while the first
-official version most likely will be 0.4.10.4
-
Requirements
------------
@@ -69,9 +49,9 @@ following software packages. The version number in parenthesis denotes the
version that was tested at the time this README was drafted; newer/older
versions may or may not work.
-* android SDK (api-26)
-* android NDK (r17c)
-* wget (1.13.4)
+* Android SDK 29
+* Android NDK r21
+* Android Studio 3 [optional]
Additionally, you'll need to have an Internet connection available on the
build system, as the Android build will download some source packages.
@@ -79,16 +59,15 @@ build system, as the Android build will download some source packages.
Build
-----
-Debug build:
-* Enter "build/android" subdirectory
-* Execute "make"
-* Answer the questions about where SDK and NDK are located on your filesystem
-* Wait for build to finish
-
-After the build is finished, the resulting apk can be fond in
-build/android/bin/. It will be called Minetest-debug.apk
+The new build system Minetest Android is fully functional and is designed to
+speed up and simplify the work, as well as adding the possibility of
+cross-platform build.
+You can use `./gradlew assemblerelease` or `./gradlew assembledebug` from the
+command line or use Android Studio and click the build button.
-Release build:
+When using gradlew, the newest NDK will be downloaded and installed
+automatically. Or you can create a `local.properties` file and specify
+`sdk.dir` and `ndk.dir` yourself.
* In order to make a release build you'll have to have a keystore setup to sign
the resulting apk package. How this is done is not part of this README. There
@@ -97,32 +76,6 @@ Release build:
* Once your keystore is setup, enter build/android subdirectory and create a new
file "ant.properties" there. Add following lines to that file:
-
+
> key.store=<path to your keystore>
> key.alias=Minetest
-
-* Execute "make release"
-* Enter your keystore as well as your Mintest key password once asked. Be
- careful it's shown on console in clear text!
-* The result can be found at "bin/Minetest-release.apk"
-
-Other things that may be nice to know
-------------
-* The environment for Android development tools is saved within Android build
- build folder. If you want direct access to it do:
-
- > make envpaths
- > . and_env
-
- After you've done this you'll have your path and path variables set correct
- to use adb and all other Android development tools
-
-* You can build a single dependency by calling make and the dependency's name,
- e.g.:
-
- > make irrlicht
-
-* You can completely cleanup a dependency by calling make and the "clean" target,
- e.g.:
-
- > make clean_irrlicht
diff --git a/doc/client_lua_api.txt b/doc/client_lua_api.txt
index c24de8d85..3b0046b4f 100644
--- a/doc/client_lua_api.txt
+++ b/doc/client_lua_api.txt
@@ -1,4 +1,4 @@
-Minetest Lua Client Modding API Reference 5.2.0
+Minetest Lua Client Modding API Reference 5.4.0
================================================
* More information at <http://www.minetest.net/>
* Developer Wiki: <http://dev.minetest.net/>
@@ -112,7 +112,7 @@ The main Lua script. Running this script should register everything it
wants to register. Subsequent execution depends on minetest calling the
registered callbacks.
-**NOTE**: Client mods currently can't provide and textures, sounds or models by
+**NOTE**: Client mods currently can't provide textures, sounds, or models by
themselves. Any media referenced in function calls must already be loaded
(provided by mods that exist on the server).
@@ -734,6 +734,13 @@ Call these functions only at load time!
* `spec` is a `SimpleSoundSpec`
* `parameters` is a sound parameter table
* `minetest.sound_stop(handle)`
+ * `handle` is a handle returned by `minetest.sound_play`
+* `minetest.sound_fade(handle, step, gain)`
+ * `handle` is a handle returned by `minetest.sound_play`
+ * `step` determines how fast a sound will fade.
+ Negative step will lower the sound volume, positive step will increase
+ the sound volume.
+ * `gain` the target gain for the fade.
### Timing
* `minetest.after(time, func, ...)`
@@ -761,12 +768,15 @@ Call these functions only at load time!
* `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"`
* `search_center` is an optional boolean (default: `false`)
If true `pos` is also checked for the nodes
-* `minetest.find_nodes_in_area(pos1, pos2, nodenames)`: returns a list of
- positions.
+* `minetest.find_nodes_in_area(pos1, pos2, nodenames, [grouped])`
+ * `pos1` and `pos2` are the min and max positions of the area to search.
* `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"`
- * First return value: Table with all node positions
- * Second return value: Table with the count of each node with the node name
- as index.
+ * If `grouped` is true the return value is a table indexed by node name
+ which contains lists of positions.
+ * If `grouped` is false or absent the return values are as follows:
+ first value: Table with all node positions
+ second value: Table with the count of each node with the node name
+ as index
* Area volume is limited to 4,096,000 nodes
* `minetest.find_nodes_in_area_under_air(pos1, pos2, nodenames)`: returns a
list of positions.
@@ -797,8 +807,6 @@ Call these functions only at load time!
* get max available level for leveled node
### Player
-* `minetest.get_wielded_item()`
- * Returns the itemstack the local player is holding
* `minetest.send_chat_message(message)`
* Act as if `message` was typed by the player into the terminal.
* `minetest.run_server_chatcommand(cmd, param)`
@@ -962,7 +970,7 @@ Please do not try to access the reference until the camera is initialized, other
* `get_camera_mode()`
* Returns 0, 1, or 2 as described above
* `get_fov()`
- * Returns:
+ * Returns a table with X, Y, maximum and actual FOV in degrees:
```lua
{
@@ -999,6 +1007,10 @@ Methods:
* returns player HP
* `get_name()`
* returns player name
+* `get_wield_index()`
+ * returns the index of the wielded item
+* `get_wielded_item()`
+ * returns the itemstack the player is holding
* `is_attached()`
* returns true if player is attached
* `is_touching_ground()`
@@ -1022,7 +1034,8 @@ Methods:
jump = float,
gravity = float,
sneak = boolean,
- sneak_glitch = boolean
+ sneak_glitch = boolean,
+ new_move = boolean,
}
```
@@ -1074,8 +1087,26 @@ Methods:
* returns last look horizontal angle
* `get_last_look_vertical()`:
* returns last look vertical angle
-* `get_key_pressed()`:
- * returns last key typed by the player
+* `get_control()`:
+ * returns pressed player controls
+
+```lua
+ {
+ up = boolean,
+ down = boolean,
+ left = boolean,
+ right = boolean,
+ jump = boolean,
+ aux1 = boolean,
+ sneak = boolean,
+ zoom = boolean,
+ LMB = boolean,
+ RMB = boolean,
+ }
+```
+
+* `get_armor_groups()`
+ * returns a table with the armor group ratings
* `hud_add(definition)`
* add a HUD element described by HUD def, returns ID number on success and `nil` on failure.
* See [`HUD definition`](#hud-definition-hud_add-hud_get)
@@ -1388,12 +1419,35 @@ Displays a horizontal bar made up of half-images.
* `offset`: offset in pixels from position.
### `waypoint`
+
Displays distance to selected world position.
* `name`: The name of the waypoint.
* `text`: Distance suffix. Can be blank.
-* `number:` An integer containing the RGB value of the color used to draw the text.
+* `precision`: Waypoint precision, integer >= 0. Defaults to 10.
+ If set to 0, distance is not shown. Shown value is `floor(distance*precision)/precision`.
+ When the precision is an integer multiple of 10, there will be `log_10(precision)` digits after the decimal point.
+ `precision = 1000`, for example, will show 3 decimal places (eg: `0.999`).
+ `precision = 2` will show multiples of `0.5`; precision = 5 will show multiples of `0.2` and so on:
+ `precision = n` will show multiples of `1/n`
+* `number:` An integer containing the RGB value of the color used to draw the
+ text.
* `world_pos`: World position of the waypoint.
+* `offset`: offset in pixels from position.
+* `alignment`: The alignment of the waypoint.
+
+### `image_waypoint`
+
+Same as `image`, but does not accept a `position`; the position is instead determined by `world_pos`, the world position of the waypoint.
+
+* `scale`: The scale of the image, with 1 being the original texture size.
+ Only the X coordinate scale is used (positive values).
+ Negative values represent that percentage of the screen it
+ should take; e.g. `x=-100` means 100% (width).
+* `text`: The name of the texture that is displayed.
+* `alignment`: The alignment of the image.
+* `world_pos`: World position of the waypoint.
+* `offset`: offset in pixels from position.
### Particle definition (`add_particle`)
diff --git a/doc/fst_api.txt b/doc/fst_api.txt
index c8bcb1e91..6f9aa14b3 100644
--- a/doc/fst_api.txt
+++ b/doc/fst_api.txt
@@ -101,6 +101,9 @@ dialog_create(name, cbf_formspec, cbf_button_handler, cbf_events)
^ cbf_events: function to handle events
function(dialog, event)
+messagebox(name, message)
+^ creates a message dialog
+
Class reference dialog:
methods:
@@ -113,13 +116,13 @@ methods:
^ hide dialog
- delete()
^ delete dialog from ui
-
+
members:
- data
^ variable data attached to this dialog
- parent
^ parent component to return to on exit
-
+
File: fst/buttonbar.lua
-----------------------
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 86e8d6575..e0c895c97 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -64,9 +64,21 @@ The game directory can contain the following files:
* `game.conf`, with the following keys:
* `name`: Required, human readable name e.g. `name = Minetest`
* `description`: Short description to be shown in the content tab
+ * `allowed_mapgens = <comma-separated mapgens>`
+ e.g. `allowed_mapgens = v5,v6,flat`
+ Mapgens not in this list are removed from the list of mapgens for
+ the game.
+ If not specified, all mapgens are allowed.
* `disallowed_mapgens = <comma-separated mapgens>`
e.g. `disallowed_mapgens = v5,v6,flat`
These mapgens are removed from the list of mapgens for the game.
+ When both `allowed_mapgens` and `disallowed_mapgens` are
+ specified, `allowed_mapgens` is applied before
+ `disallowed_mapgens`.
+ * `disallowed_mapgen_settings= <comma-separated mapgen settings>`
+ e.g. `disallowed_mapgen_settings = mgv5_spflags`
+ These settings are hidden for this game in the world creation
+ dialog and game start menu.
* `minetest.conf`:
Used to set default settings when running this game.
* `settingtypes.txt`:
@@ -889,6 +901,7 @@ These sound files are played back by the engine if provided.
* `player_damage`: Played when the local player takes damage (gain = 0.5)
* `player_falling_damage`: Played when the local player takes
damage by falling (gain = 0.5)
+ * `player_jump`: Played when the local player jumps
* `default_dig_<groupname>`: Default node digging sound
(see node sound definition for details)
@@ -1010,22 +1023,24 @@ The function of `param2` is determined by `paramtype2` in node definition.
* Values range 0 - 179. The value stored in `param2` is multiplied by two to
get the actual rotation in degrees of the node.
* `paramtype2 = "meshoptions"`
- * Only valid for "plantlike" drawtype. The value of `param2` becomes a
- bitfield which can be used to change how the client draws plantlike nodes.
- * Bits 0, 1 and 2 form a mesh selector.
- Currently the following meshes are choosable:
+ * Only valid for "plantlike" drawtype. `param2` encodes the shape and
+ optional modifiers of the "plant". `param2` is a bitfield.
+ * Bits 0 to 2 select the shape.
+ Use only one of the values below:
* 0 = a "x" shaped plant (ordinary plant)
* 1 = a "+" shaped plant (just rotated 45 degrees)
* 2 = a "*" shaped plant with 3 faces instead of 2
* 3 = a "#" shaped plant with 4 faces instead of 2
* 4 = a "#" shaped plant with 4 faces that lean outwards
* 5-7 are unused and reserved for future meshes.
- * Bits 3 through 7 are optional flags that can be combined and give these
- effects:
- * bit 3 (0x08) - Makes the plant slightly vary placement horizontally
- * bit 4 (0x10) - Makes the plant mesh 1.4x larger
- * bit 5 (0x20) - Moves each face randomly a small bit down (1/8 max)
- * bits 6-7 are reserved for future use.
+ * Bits 3 to 7 are used to enable any number of optional modifiers.
+ Just add the corresponding value(s) below to `param2`:
+ * 8 - Makes the plant slightly vary placement horizontally
+ * 16 - Makes the plant mesh 1.4x larger
+ * 32 - Moves each face randomly a small bit down (1/8 max)
+ * values 64 and 128 (bits 6-7) are reserved for future use.
+ * Example: `param2 = 0` selects a normal "x" shaped plant
+ * Example: `param2 = 17` selects a "+" shaped plant, 1.4x larger (1+16)
* `paramtype2 = "color"`
* `param2` tells which color is picked from the palette.
The palette should have 256 pixels.
@@ -1054,7 +1069,7 @@ Node drawtypes
There are a bunch of different looking node types.
-Look for examples in `games/minimal` or `games/minetest_game`.
+Look for examples in `games/devtest` or `games/minetest_game`.
* `normal`
* A node-sized cube.
@@ -1278,9 +1293,9 @@ To account for differing resolutions, the position coordinates are the
percentage of the screen, ranging in value from `0` to `1`.
The name field is not yet used, but should contain a description of what the
-HUD element represents. The direction field is the direction in which something
-is drawn.
+HUD element represents.
+The `direction` field is the direction in which something is drawn.
`0` draws from left to right, `1` draws from right to left, `2` draws from
top to bottom, and `3` draws from bottom to top.
@@ -1299,7 +1314,21 @@ factor!
The `z_index` field specifies the order of HUD elements from back to front.
Lower z-index elements are displayed behind higher z-index elements. Elements
with same z-index are displayed in an arbitrary order. Default 0.
-Supports negative values.
+Supports negative values. By convention, the following values are recommended:
+
+* -400: Graphical effects, such as vignette
+* -300: Name tags, waypoints
+* -200: Wieldhand
+* -100: Things that block the player's view, e.g. masks
+* 0: Default. For standard in-game HUD elements like crosshair, hotbar,
+ minimap, builtin statbars, etc.
+* 100: Temporary text messages or notification icons
+* 1000: Full-screen effects such as full-black screen or credits.
+ This includes effects that cover the entire screen
+* Other: If your HUD element doesn't fit into any category, pick a number
+ between the suggested values
+
+
Below are the specific uses for fields in each type; fields not listed for that
type are ignored.
@@ -1327,15 +1356,21 @@ Displays text on the HUD.
text. Specify `0xFFFFFF` for white text, `0xFF0000` for red, and so on.
* `alignment`: The alignment of the text.
* `offset`: offset in pixels from position.
+* `size`: size of the text.
+ The player-set font size is multiplied by size.x (y value isn't used).
### `statbar`
-Displays a horizontal bar made up of half-images.
+Displays a horizontal bar made up of half-images with an optional background.
-* `text`: The name of the texture that is used.
+* `text`: The name of the texture to use.
+* `text2`: Optional texture name to enable a background / "off state"
+ texture (useful to visualize the maximal value). Both textures
+ must have the same size.
* `number`: The number of half-textures that are displayed.
If odd, will end with a vertically center-split texture.
-* `direction`
+* `item`: Same as `number` but for the "off state" texture
+* `direction`: To which direction the images will extend to
* `offset`: offset in pixels from position.
* `size`: If used, will force full-image size to this value (override texture
pack image size)
@@ -1354,10 +1389,30 @@ Displays distance to selected world position.
* `name`: The name of the waypoint.
* `text`: Distance suffix. Can be blank.
+* `precision`: Waypoint precision, integer >= 0. Defaults to 10.
+ If set to 0, distance is not shown. Shown value is `floor(distance*precision)/precision`.
+ When the precision is an integer multiple of 10, there will be `log_10(precision)` digits after the decimal point.
+ `precision = 1000`, for example, will show 3 decimal places (eg: `0.999`).
+ `precision = 2` will show multiples of `0.5`; precision = 5 will show multiples of `0.2` and so on:
+ `precision = n` will show multiples of `1/n`
* `number:` An integer containing the RGB value of the color used to draw the
text.
* `world_pos`: World position of the waypoint.
+* `offset`: offset in pixels from position.
+* `alignment`: The alignment of the waypoint.
+### `image_waypoint`
+
+Same as `image`, but does not accept a `position`; the position is instead determined by `world_pos`, the world position of the waypoint.
+
+* `scale`: The scale of the image, with 1 being the original texture size.
+ Only the X coordinate scale is used (positive values).
+ Negative values represent that percentage of the screen it
+ should take; e.g. `x=-100` means 100% (width).
+* `text`: The name of the texture that is displayed.
+* `alignment`: The alignment of the image.
+* `world_pos`: World position of the waypoint.
+* `offset`: offset in pixels from position.
@@ -1611,6 +1666,7 @@ to games.
* `2`: the node always gets the digging time 0.5 seconds (rail, sign)
* `3`: the node always gets the digging time 0 seconds (torch)
* `disable_jump`: Player (and possibly other things) cannot jump from node
+ or if their feet are in the node. Note: not supported for `new_move = false`
* `fall_damage_add_percent`: damage speed = `speed * (1 + value/100)`
* `falling_node`: if there is no walkable block under the node it will fall
* `float`: the node will not fall through liquids
@@ -2071,6 +2127,26 @@ Elements
* End of a container, following elements are no longer relative to this
container.
+### `scroll_container[<X>,<Y>;<W>,<H>;<scrollbar name>;<orientation>;<scroll factor>]`
+
+* Start of a scroll_container block. All contained elements will ...
+ * take the scroll_container coordinate as position origin,
+ * be additionally moved by the current value of the scrollbar with the name
+ `scrollbar name` times `scroll factor` along the orientation `orientation` and
+ * be clipped to the rectangle defined by `X`, `Y`, `W` and `H`.
+* `orientation`: possible values are `vertical` and `horizontal`.
+* `scroll factor`: optional, defaults to `0.1`.
+* Nesting is possible.
+* Some elements might work a little different if they are in a scroll_container.
+* Note: If you want the scroll_container to actually work, you also need to add a
+ scrollbar element with the specified name. Furthermore, it is highly recommended
+ to use a scrollbaroptions element on this scrollbar.
+
+### `scroll_container_end[]`
+
+* End of a scroll_container, following elements are no longer bound to this
+ container.
+
### `list[<inventory location>;<list name>;<X>,<Y>;<W>,<H>;]`
* Show an inventory list if it has been sent to the client. Nothing will
@@ -2178,12 +2254,12 @@ Elements
* 9-sliced background. See https://en.wikipedia.org/wiki/9-slice_scaling
* Middle is a rect which defines the middle of the 9-slice.
- * `x` - The middle will be x pixels from all sides.
- * `x,y` - The middle will be x pixels from the horizontal and y from the vertical.
- * `x,y,x2,y2` - The middle will start at x,y, and end at x2, y2. Negative x2 and y2 values
- will be added to the width and height of the texture, allowing it to be used as the
- distance from the far end.
- * All numbers in middle are integers.
+ * `x` - The middle will be x pixels from all sides.
+ * `x,y` - The middle will be x pixels from the horizontal and y from the vertical.
+ * `x,y,x2,y2` - The middle will start at x,y, and end at x2, y2. Negative x2 and y2 values
+ will be added to the width and height of the texture, allowing it to be used as the
+ distance from the far end.
+ * All numbers in middle are integers.
* Example for formspec 8x4 in 16x resolution:
image shall be sized 8 times 16px times 4 times 16px
* If `auto_clip` is `true`, the background is clipped to the formspec size
@@ -2332,8 +2408,8 @@ Elements
* `name` fieldname data is transferred to Lua
* `caption 1`...: name shown on top of tab
* `current_tab`: index of selected tab 1...
-* `transparent` (optional): show transparent
-* `draw_border` (optional): draw border
+* `transparent` (optional): if true, tabs are semi-transparent
+* `draw_border` (optional): if true, draw a thin line at tab base
### `tabheader[<X>,<Y>;<H>;<name>;<caption 1>,<caption 2>,...,<caption n>;<current_tab>;<transparent>;<draw_border>]`
@@ -2367,7 +2443,7 @@ Elements
* `color` is color specified as a `ColorString`.
If the alpha component is left blank, the box will be semitransparent.
-### `dropdown[<X>,<Y>;<W>;<name>;<item 1>,<item 2>, ...,<item n>;<selected idx>]`
+### `dropdown[<X>,<Y>;<W>;<name>;<item 1>,<item 2>, ...,<item n>;<selected idx>;<index event>]`
* Show a dropdown field
* **Important note**: There are two different operation modes:
@@ -2378,8 +2454,12 @@ Elements
* Fieldname data is transferred to Lua
* Items to be shown in dropdown
* Index of currently selected dropdown item
+* `index event` (optional, allowed parameter since formspec version 4): Specifies the
+ event field value for selected items.
+ * `true`: Selected item index
+ * `false` (default): Selected item value
-### `dropdown[<X>,<Y>;<W>,<H>;<name>;<item 1>,<item 2>, ...,<item n>;<selected idx>]`
+### `dropdown[<X>,<Y>;<W>,<H>;<name>;<item 1>,<item 2>, ...,<item n>;<selected idx>;<index event>]`
* Show a dropdown field
* **Important note**: This syntax for dropdowns can only be used with the
@@ -2392,6 +2472,10 @@ Elements
* Fieldname data is transferred to Lua
* Items to be shown in dropdown
* Index of currently selected dropdown item
+* `index event` (optional, allowed parameter since formspec version 4): Specifies the
+ event field value for selected items.
+ * `true`: Selected item index
+ * `false` (default): Selected item value
### `checkbox[<X>,<Y>;<name>;<label>;<selected>]`
@@ -2408,7 +2492,7 @@ Elements
* There are two ways to use it:
1. handle the changed event (only changed scrollbar is available)
2. read the value on pressing a button (all scrollbars are available)
-* `orientation`: `vertical`/`horizontal`
+* `orientation`: `vertical`/`horizontal`. Default horizontal.
* Fieldname data is transferred to Lua
* Value of this trackbar is set to (`0`-`1000`) by default
* See also `minetest.explode_scrollbar_event`
@@ -2498,18 +2582,52 @@ Elements
* `span=<value>`: number of following columns to affect
(default: infinite).
-### `style[<name 1>,<name 2>,...;<prop1>;<prop2>;...]`
+### `style[<selector 1>,<selector 2>;<prop1>;<prop2>;...]`
-* Set the style for the named element(s) `name`.
+* Set the style for the element(s) matching `selector` by name.
+* `selector` can be one of:
+ * `<name>` - An element name. Includes `*`, which represents every element.
+ * `<name>:<state>` - An element name, a colon, and one or more states.
+* `state` is a list of states separated by the `+` character.
+ * If a state is provided, the style will only take effect when the element is in that state.
+ * All provided states must be active for the style to apply.
* Note: this **must** be before the element is defined.
* See [Styling Formspecs].
-### `style_type[<type 1>,<type 2>,...;<prop1>;<prop2>;...]`
+### `style_type[<selector 1>,<selector 2>;<prop1>;<prop2>;...]`
-* Sets the style for all elements of type(s) `type` which appear after this element.
+* Set the style for the element(s) matching `selector` by type.
+* `selector` can be one of:
+ * `<type>` - An element type. Includes `*`, which represents every element.
+ * `<type>:<state>` - An element type, a colon, and one or more states.
+* `state` is a list of states separated by the `+` character.
+ * If a state is provided, the style will only take effect when the element is in that state.
+ * All provided states must be active for the style to apply.
* See [Styling Formspecs].
+### `set_focus[<name>;<force>]`
+
+* Sets the focus to the element with the same `name` parameter.
+* **Note**: This element must be placed before the element it focuses.
+* `force` (optional, default `false`): By default, focus is not applied for
+ re-sent formspecs with the same name so that player-set focus is kept.
+ `true` sets the focus to the specified element for every sent formspec.
+* The following elements have the ability to be focused:
+ * checkbox
+ * button
+ * button_exit
+ * image_button
+ * image_button_exit
+ * item_image_button
+ * table
+ * textlist
+ * dropdown
+ * field
+ * pwdfield
+ * textarea
+ * scrollbar
+
Migrating to Real Coordinates
-----------------------------
@@ -2550,23 +2668,34 @@ Styling Formspecs
Formspec elements can be themed using the style elements:
- style[<name 1>,<name 2>,...;<prop1>;<prop2>;...]
- style_type[<type 1>,<type 2>,...;<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:
property_name=property_value
+For example:
+
+ style_type[button;bgcolor=#006699]
+ style[world_delete;bgcolor=red;textcolor=yellow]
+ button[4,3.95;2.6,1;world_delete;Delete]
+
A name/type can optionally be a comma separated list of names/types, like so:
world_delete,world_create,world_configure
button,image_button
-For example:
+A `*` type can be used to select every element in the formspec.
- style_type[button;bgcolor=#006699]
- style[world_delete;bgcolor=red;textcolor=yellow]
- button[4,3.95;2.6,1;world_delete;Delete]
+Any name/type in the list can also be accompanied by a `+`-separated list of states, like so:
+
+ world_delete:hovered+pressed
+ button:pressed
+
+States allow you to apply styles in response to changes in the element, instead of applying at all times.
Setting a property to nothing will reset it to the default value. For example:
@@ -2607,25 +2736,49 @@ Some types may inherit styles from parent types.
* alpha - boolean, whether to draw alpha in bgimg. Default true.
* bgcolor - color, sets button tint.
* bgcolor_hovered - color when hovered. Defaults to a lighter bgcolor when not provided.
+ * This is deprecated, use states instead.
* bgcolor_pressed - color when pressed. Defaults to a darker bgcolor when not provided.
+ * This is deprecated, use states instead.
* bgimg - standard background image. Defaults to none.
* bgimg_hovered - background image when hovered. Defaults to bgimg when not provided.
+ * This is deprecated, use states instead.
* bgimg_middle - Makes the bgimg textures render in 9-sliced mode and defines the middle rect.
- See background9[] documentation for more details
+ See background9[] documentation for more details. This property also pads the
+ button's content when set.
* bgimg_pressed - background image when pressed. Defaults to bgimg when not provided.
+ * This is deprecated, use states instead.
+ * font - Sets font type. This is a comma separated list of options. Valid options:
+ * Main font type options. These cannot be combined with each other:
+ * `normal`: Default font
+ * `mono`: Monospaced font
+ * Font modification options. If used without a main font type, `normal` is used:
+ * `bold`: Makes font bold.
+ * `italic`: Makes font italic.
+ Default `normal`.
+ * font_size - Sets font size. Default is user-set. Can have multiple values:
+ * `<number>`: Sets absolute font size to `number`.
+ * `+<number>`/`-<number>`: Offsets default font size by `number` points.
+ * `*<number>`: Multiplies default font size by `number`, similar to CSS `em`.
* border - boolean, draw border. Set to false to hide the bevelled button pane. Default true.
+ * content_offset - 2d vector, shifts the position of the button's content without resizing it.
* noclip - boolean, set to true to allow the element to exceed formspec bounds.
+ * padding - rect, adds space between the edges of the button and the content. This value is
+ relative to bgimg_middle.
* textcolor - color, default white.
* checkbox
* noclip - boolean, set to true to allow the element to exceed formspec bounds.
* scrollbar
* noclip - boolean, set to true to allow the element to exceed formspec bounds.
* table, textlist
+ * font - Sets font type. See button `font` property for more information.
+ * font_size - Sets font size. See button `font_size` property for more information.
* noclip - boolean, set to true to allow the element to exceed formspec bounds.
* dropdown
* noclip - boolean, set to true to allow the element to exceed formspec bounds.
* field, pwdfield, textarea
* border - set to false to hide the textbox background and border. Default true.
+ * font - Sets font type. See button `font` property for more information.
+ * font_size - Sets font size. See button `font_size` property for more information.
* noclip - boolean, set to true to allow the element to exceed formspec bounds.
* textcolor - color. Default white.
* image
@@ -2634,16 +2787,28 @@ Some types may inherit styles from parent types.
* item_image
* noclip - boolean, set to true to allow the element to exceed formspec bounds. Default to false.
* label, vertlabel
+ * font - Sets font type. See button `font` property for more information.
+ * font_size - Sets font size. See button `font_size` property for more information.
* noclip - boolean, set to true to allow the element to exceed formspec bounds.
* image_button (additional properties)
* fgimg - standard image. Defaults to none.
* fgimg_hovered - image when hovered. Defaults to fgimg when not provided.
+ * This is deprecated, use states instead.
* fgimg_pressed - image when pressed. Defaults to fgimg when not provided.
+ * This is deprecated, use states instead.
* NOTE: The parameters of any given image_button will take precedence over fgimg/fgimg_pressed
* tabheader
* noclip - boolean, set to true to allow the element to exceed formspec bounds.
* textcolor - color. Default white.
+### Valid States
+
+* *all elements*
+ * default - Equivalent to providing no states
+* button, button_exit, image_button, item_image_button
+ * hovered - Active when the mouse is hovering over the element
+ * pressed - Active when the button is pressed
+
Markup Language
---------------
@@ -2896,6 +3061,24 @@ For the following functions `x` can be either a vector or a number:
* `vector.divide(v, x)`:
* Returns a scaled vector or Schur quotient.
+For the following functions `a` is an angle in radians and `r` is a rotation
+vector ({x = <pitch>, y = <yaw>, z = <roll>}) where pitch, yaw and roll are
+angles in radians.
+
+* `vector.rotate(v, r)`:
+ * Applies the rotation `r` to `v` and returns the result.
+ * `vector.rotate({x = 0, y = 0, z = 1}, r)` and
+ `vector.rotate({x = 0, y = 1, z = 0}, r)` return vectors pointing
+ forward and up relative to an entity's rotation `r`.
+* `vector.rotate_around_axis(v1, v2, a)`:
+ * Returns `v1` rotated around axis `v2` by `a` radians according to
+ the right hand rule.
+* `vector.dir_to_rotation(direction[, up])`:
+ * Returns a rotation vector for `direction` pointing forward using `up`
+ as the up vector.
+ * If `up` is omitted, the roll of the returned vector defaults to zero.
+ * Otherwise `direction` and `up` need to be vectors in a 90 degree angle to each other.
+
@@ -3096,8 +3279,22 @@ Strings that need to be translated can contain several escapes, preceded by `@`.
`minetest.translate`, but is in translation files.
* `@n` acts as a literal newline as well.
+Server side translations
+------------------------
+
+On some specific cases, server translation could be useful. For example, filter
+a list on labels and send results to client. A method is supplied to achieve
+that:
+
+`minetest.get_translated_string(lang_code, string)`: Translates `string` using
+translations for `lang_code` language. It gives the same result as if the string
+was translated by the client.
+The `lang_code` to use for a given player can be retrieved from
+the table returned by `minetest.get_player_information(name)`.
+IMPORTANT: This functionality should only be used for sorting, filtering or similar purposes.
+You do not need to use this to get translated strings to show up on the client.
Perlin noise
============
@@ -3170,9 +3367,9 @@ For this parameter you can randomly choose any whole number. Usually it is
preferable for this to be different from other seeds, but sometimes it is useful
to be able to create identical noise patterns.
-When used in mapgen this is actually a 'seed offset', it is added to the
-'world seed' to create the seed used by the noise, to ensure the noise has a
-different pattern in different worlds.
+In some noise APIs the world seed is added to the seed specified in noise
+parameters. This is done to make the resulting noise pattern vary in different
+worlds, and be 'world-specific'.
### `octaves`
@@ -4053,6 +4250,8 @@ Utilities
area_store_persistent_ids = true,
-- Whether minetest.find_path is functional (5.2.0)
pathfinder_works = true,
+ -- Whether Collision info is available to an objects' on_step (5.3.0)
+ object_step_has_moveresult = true,
}
* `minetest.has_feature(arg)`: returns `boolean, missing_features`
@@ -4064,16 +4263,18 @@ Utilities
{
address = "127.0.0.1", -- IP address of client
ip_version = 4, -- IPv4 / IPv6
+ connection_uptime = 200, -- seconds since client connected
+ protocol_version = 32, -- protocol version used by client
+ formspec_version = 2, -- supported formspec version
+ lang_code = "fr" -- Language code used for translation
+ -- the following keys can be missing if no stats have been collected yet
min_rtt = 0.01, -- minimum round trip time
max_rtt = 0.2, -- maximum round trip time
avg_rtt = 0.02, -- average round trip time
min_jitter = 0.01, -- minimum packet time jitter
max_jitter = 0.5, -- maximum packet time jitter
avg_jitter = 0.03, -- average packet time jitter
- connection_uptime = 200, -- seconds since client connected
- protocol_version = 32, -- protocol version used by client
- formspec_version = 2, -- supported formspec version
- -- following information is available on debug build only!!!
+ -- the following information is available in a debug build only!!!
-- DO NOT USE IN MODS
--ser_vers = 26, -- serialization version used by client
--major = 0, -- major version number
@@ -4246,7 +4447,7 @@ Call these functions only at load time!
* Called after generating a piece of world. Modifying nodes inside the area
is a bit faster than usually.
* `minetest.register_on_newplayer(function(ObjectRef))`
- * Called after a new player has been created
+ * Called when a new player enters the world for the first time
* `minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage))`
* Called when a player is punched
* Note: This callback is invoked even if the punched player is dead.
@@ -4287,19 +4488,23 @@ Call these functions only at load time!
* Called _before_ repositioning of player occurs
* return true in func to disable regular player placement
* `minetest.register_on_prejoinplayer(function(name, ip))`
- * Called before a player joins the game
- * If it returns a string, the player is disconnected with that string as
+ * Called when a client connects to the server, prior to authentication
+ * If it returns a string, the client is disconnected with that string as
reason.
-* `minetest.register_on_joinplayer(function(ObjectRef))`
+* `minetest.register_on_joinplayer(function(ObjectRef, last_login))`
* Called when a player joins the game
+ * `last_login`: The timestamp of the previous login, or nil if player is new
* `minetest.register_on_leaveplayer(function(ObjectRef, timed_out))`
* Called when a player leaves the game
* `timed_out`: True for timeout, false for other reasons.
+* `minetest.register_on_authplayer(function(name, ip, is_success))`
+ * Called when a client attempts to log into an account.
+ * `name`: The name of the account being authenticated.
+ * `ip`: The IP address of the client
+ * `is_success`: Whether the client was successfully authenticated
+ * For newly registered accounts, `is_success` will always be true
* `minetest.register_on_auth_fail(function(name, ip))`
- * Called when a client attempts to log into an account but supplies the
- wrong password.
- * `ip`: The IP address of the client.
- * `name`: The account the client attempted to log into.
+ * Deprecated: use `minetest.register_on_authplayer(name, ip, is_success)` instead.
* `minetest.register_on_cheat(function(ObjectRef, cheat))`
* Called when a player cheats
* `cheat`: `{type=<cheat_type>}`, where `<cheat_type>` is one of:
@@ -4320,7 +4525,7 @@ Call these functions only at load time!
* a button was pressed,
* Enter was pressed while the focus was on a text field
* a checkbox was toggled,
- * something was selecteed in a drop-down list,
+ * something was selected in a dropdown list,
* a different tab was selected,
* selection was changed in a textlist or table,
* an entry was double-clicked in a textlist or table,
@@ -4334,7 +4539,8 @@ Call these functions only at load time!
* `button` and variants: If pressed, contains the user-facing button
text as value. If not pressed, is `nil`
* `field`, `textarea` and variants: Text in the field
- * `dropdown`: Text of selected item
+ * `dropdown`: Either the index or value, depending on the `index event`
+ dropdown argument.
* `tabheader`: Tab index, starting with `"1"` (only if tab changed)
* `checkbox`: `"true"` if checked, `"false"` if unchecked
* `textlist`: See `minetest.explode_textlist_event`
@@ -4362,7 +4568,7 @@ Call these functions only at load time!
* The same as before, except that it is called before the player crafts, to
make craft prediction, and it should not change anything.
* `minetest.register_allow_player_inventory_action(function(player, action, inventory, inventory_info))`
- * Determinates how much of a stack may be taken, put or moved to a
+ * Determines how much of a stack may be taken, put or moved to a
player inventory.
* `player` (type `ObjectRef`) is the player who modified the inventory
`inventory` (type `InvRef`).
@@ -4556,12 +4762,15 @@ Environment access
* `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"`
* `search_center` is an optional boolean (default: `false`)
If true `pos` is also checked for the nodes
-* `minetest.find_nodes_in_area(pos1, pos2, nodenames)`: returns a list of
- positions.
+* `minetest.find_nodes_in_area(pos1, pos2, nodenames, [grouped])`
+ * `pos1` and `pos2` are the min and max positions of the area to search.
* `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"`
- * First return value: Table with all node positions
- * Second return value: Table with the count of each node with the node name
- as index.
+ * If `grouped` is true the return value is a table indexed by node name
+ which contains lists of positions.
+ * If `grouped` is false or absent the return values are as follows:
+ first value: Table with all node positions
+ second value: Table with the count of each node with the node name
+ as index
* Area volume is limited to 4,096,000 nodes
* `minetest.find_nodes_in_area_under_air(pos1, pos2, nodenames)`: returns a
list of positions.
@@ -4569,8 +4778,11 @@ Environment access
* Return value: Table with all node positions with a node air above
* Area volume is limited to 4,096,000 nodes
* `minetest.get_perlin(noiseparams)`
+ * Return world-specific perlin noise.
+ * The actual seed used is the noiseparams seed plus the world seed.
* `minetest.get_perlin(seeddiff, octaves, persistence, spread)`
- * Return world-specific perlin noise (`int(worldseed)+seeddiff`)
+ * Deprecated: use `minetest.get_perlin(noiseparams)` instead.
+ * Return world-specific perlin noise.
* `minetest.get_voxel_manip([pos1, pos2])`
* Return voxel manipulator object.
* Loads the manipulator from the map if positions are passed.
@@ -4751,7 +4963,7 @@ Environment access
* `minetest.add_node_level(pos, level)`
* increase level of leveled node by level, default `level` equals `1`
* if `totallevel > maxlevel`, returns rest (`total-max`)
- * can be negative for decreasing
+ * `level` must be between -127 and 127
* `minetest.fix_light(pos1, pos2)`: returns `true`/`false`
* resets the light in a cuboid-shaped part of
the map and removes lighting bugs.
@@ -5063,6 +5275,20 @@ Server
* Returns a code (0: successful, 1: no such player, 2: player is connected)
* `minetest.remove_player_auth(name)`: remove player authentication data
* Returns boolean indicating success (false if player nonexistant)
+* `minetest.dynamic_add_media(filepath)`
+ * Adds the file at the given path to the media sent to clients by the server
+ on startup and also pushes this file to already connected clients.
+ The file must be a supported image, sound or model format. It must not be
+ modified, deleted, moved or renamed after calling this function.
+ The list of dynamically added media is not persisted.
+ * Returns boolean indicating success (duplicate files count as error)
+ * The media will be ready to use (in e.g. entity textures, sound_play)
+ immediately after calling this function.
+ Old clients that lack support for this feature will not see the media
+ unless they reconnect to the server.
+ * Since media transferred this way does not use client caching or HTTP
+ transfers, dynamic media should not be used with big files or performance
+ will suffer.
Bans
----
@@ -5318,7 +5544,7 @@ Misc.
* Example: `minetest.rgba(10, 20, 30, 40)`, returns `"#0A141E28"`
* `minetest.encode_base64(string)`: returns string encoded in base64
* Encodes a string in base64.
-* `minetest.decode_base64(string)`: returns string
+* `minetest.decode_base64(string)`: returns string or nil for invalid base64
* Decodes a string encoded in base64.
* `minetest.is_protected(pos, name)`: returns boolean
* Returning `true` restricts the player `name` from modifying (i.e. digging,
@@ -5340,6 +5566,13 @@ Misc.
* `minetest.record_protection_violation(pos, name)`
* This function calls functions registered with
`minetest.register_on_protection_violation`.
+* `minetest.is_creative_enabled(name)`: returns boolean
+ * Returning `true` means that Creative Mode is enabled for player `name`.
+ * `name` will be `""` for non-players or if the player is unknown.
+ * This function should be overridden by Creative Mode-related mods to
+ implement a per-player Creative Mode.
+ * By default, this function returns `true` if the setting
+ `creative_mode` is `true` and `false` otherwise.
* `minetest.is_area_protected(pos1, pos2, player_name, interval)`
* Returns the position of the first node that `player_name` may not modify
in the specified cuboid between `pos1` and `pos2`.
@@ -5403,8 +5636,8 @@ Misc.
insecure functions if the calling mod has been listed as trusted in the
`secure.trusted_mods` setting or security is disabled, otherwise returns
`nil`.
- * Only works at init time and must be called from the mod's main scope (not
- from a function).
+ * Only works at init time and must be called from the mod's main scope
+ (ie: the init.lua of the mod, not from another Lua file or within a function).
* **DO NOT ALLOW ANY OTHER MODS TO ACCESS THE RETURNED ENVIRONMENT, STORE
IT IN A LOCAL VARIABLE!**
@@ -5897,15 +6130,18 @@ object you are working with still exists.
* max: bubbles bar is not shown
* See [Object properties] for more information
* Is limited to range 0 ... 65535 (2^16 - 1)
-* `set_fov(fov, is_multiplier)`: Sets player's FOV
+* `set_fov(fov, is_multiplier, transition_time)`: Sets player's FOV
* `fov`: FOV value.
* `is_multiplier`: Set to `true` if the FOV value is a multiplier.
Defaults to `false`.
- * Set to 0 to clear FOV override.
-* `get_fov()`:
- * Returns player's FOV override in degrees, and a boolean depending on whether
- the value is a multiplier.
- * Returns 0 as first value if player's FOV hasn't been overridden.
+ * `transition_time`: If defined, enables smooth FOV transition.
+ Interpreted as the time (in seconds) to reach target FOV.
+ If set to 0, FOV change is instantaneous. Defaults to 0.
+ * Set `fov` to 0 to clear FOV override.
+* `get_fov()`: Returns the following:
+ * Server-sent FOV value. Returns 0 if an FOV override doesn't exist.
+ * Boolean indicating whether the FOV value is a multiplier.
+ * Time (in seconds) taken for the FOV transition. Set by `set_fov`.
* `set_attribute(attribute, value)`: DEPRECATED, use get_meta() instead
* Sets an extra attribute with value on player.
* `value` must be a string, or a number which will be converted to a
@@ -5928,13 +6164,14 @@ object you are working with still exists.
* `get_formspec_prepend(formspec)`: returns a formspec string.
* `get_player_control()`: returns table with player pressed keys
* The table consists of fields with boolean value representing the pressed
- keys, the fields are jump, right, left, LMB, RMB, sneak, aux1, down, up.
+ keys, the fields are jump, right, left, LMB, RMB, sneak, aux1, down, up, zoom.
* example: `{jump=false, right=true, left=false, LMB=false, RMB=false,
- sneak=true, aux1=false, down=false, up=false}`
+ sneak=true, aux1=false, down=false, up=false, zoom=false}`
+ * The `zoom` field is available since 5.3
* `get_player_control_bits()`: returns integer with bit packed player pressed
keys.
* bit nr/meaning: 0/up, 1/down, 2/left, 3/right, 4/jump, 5/aux1, 6/sneak,
- 7/LMB, 8/RMB
+ 7/LMB, 8/RMB, 9/zoom (zoom available since 5.3)
* `set_physics_override(override_table)`
* `override_table` is a table with the following fields:
* `speed`: multiplier to default walking speed value (default: `1`)
@@ -5991,19 +6228,27 @@ object you are working with still exists.
* `clouds`: Boolean for whether clouds appear. (default: `true`)
* `sky_color`: A table containing the following values, alpha is ignored:
* `day_sky`: ColorSpec, for the top half of the `"regular"`
- skybox during the day. (default: `#8cbafa`)
- * `day_horizon`: ColorSpec, for the bottom half of the
- `"regular"` skybox during the day. (default: `#9bc1f0`)
+ sky during the day. (default: `#8cbafa`)
+ * `day_horizon`: ColorSpec, for the bottom half of the
+ `"regular"` sky during the day. (default: `#9bc1f0`)
* `dawn_sky`: ColorSpec, for the top half of the `"regular"`
- skybox during dawn/sunset. (default: `#b4bafa`)
+ sky during dawn/sunset. (default: `#b4bafa`)
+ The resulting sky color will be a darkened version of the ColorSpec.
+ Warning: The darkening of the ColorSpec is subject to change.
* `dawn_horizon`: ColorSpec, for the bottom half of the `"regular"`
- skybox during dawn/sunset. (default: `#bac1f0`)
+ sky during dawn/sunset. (default: `#bac1f0`)
+ The resulting sky color will be a darkened version of the ColorSpec.
+ Warning: The darkening of the ColorSpec is subject to change.
* `night_sky`: ColorSpec, for the top half of the `"regular"`
- skybox during the night. (default: `#006aff`)
+ sky during the night. (default: `#006aff`)
+ The resulting sky color will be a dark version of the ColorSpec.
+ Warning: The darkening of the ColorSpec is subject to change.
* `night_horizon`: ColorSpec, for the bottom half of the `"regular"`
- skybox during the night. (default: `#4090ff`)
- * `indoors`: ColorSpec, for when you're either indoors or
- underground. Only applies to the `"regular"` skybox.
+ sky during the night. (default: `#4090ff`)
+ The resulting sky color will be a dark version of the ColorSpec.
+ Warning: The darkening of the ColorSpec is subject to change.
+ * `indoors`: ColorSpec, for when you're either indoors or
+ underground. Only applies to the `"regular"` sky.
(default: `#646464`)
* `fog_sun_tint`: ColorSpec, changes the fog tinting for the sun
at sunrise and sunset.
@@ -6046,8 +6291,8 @@ object you are working with still exists.
* `parameters` is a table with the following optional fields:
* `visible`: Boolean for whether the stars are visible.
(default: `true`)
- * `count`: Integer number to set the number of stars in
- the skybox. Only applies to `"skybox"` and `"regular"` skyboxes.
+ * `count`: Integer number to set the number of stars in
+ the skybox. Only applies to `"skybox"` and `"regular"` sky types.
(default: `1000`)
* `star_color`: ColorSpec, sets the colors of the stars,
alpha channel is used to set overall star brightness.
@@ -6119,10 +6364,15 @@ It can be created via `PcgRandom(seed)` or `PcgRandom(seed, sequence)`.
-------------
A perlin noise generator.
-It can be created via `PerlinNoise(seed, octaves, persistence, spread)`
-or `PerlinNoise(noiseparams)`.
-Alternatively with `minetest.get_perlin(seeddiff, octaves, persistence, spread)`
-or `minetest.get_perlin(noiseparams)`.
+It can be created via `PerlinNoise()` or `minetest.get_perlin()`.
+For `minetest.get_perlin()`, the actual seed used is the noiseparams seed
+plus the world seed, to create world-specific noise.
+
+`PerlinNoise(noiseparams)`
+`PerlinNoise(seed, octaves, persistence, spread)` (Deprecated).
+
+`minetest.get_perlin(noiseparams)`
+`minetest.get_perlin(seeddiff, octaves, persistence, spread)` (Deprecated).
### Methods
@@ -6136,6 +6386,8 @@ A fast, bulk perlin noise generator.
It can be created via `PerlinNoiseMap(noiseparams, size)` or
`minetest.get_perlin_map(noiseparams, size)`.
+For `minetest.get_perlin_map()`, the actual seed used is the noiseparams seed
+plus the world seed, to create world-specific noise.
Format of `size` is `{x=dimx, y=dimy, z=dimz}`. The `z` component is omitted
for 2D noise, and it must be must be larger than 1 for 3D noise (otherwise
@@ -6408,6 +6660,7 @@ Player properties need to be saved manually.
automatic_rotate = 0,
-- Set constant rotation in radians per second, positive or negative.
+ -- Object rotates along the local Y-axis, and works with set_rotation.
-- Set to 0 to disable constant rotation.
stepheight = 0,
@@ -6446,6 +6699,12 @@ Player properties need to be saved manually.
-- deleted when the block gets unloaded.
-- The get_staticdata() callback is never called then.
-- Defaults to 'true'.
+
+ damage_texture_modifier = "^[brighten",
+ -- Texture modifier to be applied for a short duration when object is hit
+
+ shaded = true,
+ -- Setting this to 'false' disables diffuse lighting of entity
}
Entity definition
@@ -6466,7 +6725,10 @@ Used by `minetest.register_entity`.
on_activate = function(self, staticdata, dtime_s),
- on_step = function(self, dtime),
+ on_step = function(self, dtime, moveresult),
+ -- Called every server step
+ -- dtime: Elapsed time
+ -- moveresult: Table with collision info (only available if physical=true)
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir),
@@ -6481,6 +6743,25 @@ Used by `minetest.register_entity`.
-- for more info) by using a '_' prefix
}
+Collision info passed to `on_step`:
+
+ {
+ touching_ground = boolean,
+ collides = boolean,
+ standing_on_object = boolean,
+ collisions = {
+ {
+ type = string, -- "node" or "object",
+ axis = string, -- "x", "y" or "z"
+ node_pos = vector, -- if type is "node"
+ object = ObjectRef, -- if type is "object"
+ old_velocity = vector,
+ new_velocity = vector,
+ },
+ ...
+ }
+ }
+
ABM (ActiveBlockModifier) definition
------------------------------------
@@ -6647,6 +6928,8 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
wield_scale = {x = 1, y = 1, z = 1},
+ -- The default value of 99 may be configured by
+ -- users using the setting "default_stack_max"
stack_max = 99,
range = 4.0,
@@ -6752,7 +7035,7 @@ Used by `minetest.register_node`.
visual_scale = 1.0,
-- Supported for drawtypes "plantlike", "signlike", "torchlike",
- -- "firelike", "mesh".
+ -- "firelike", "mesh", "nodebox", "allfaces".
-- For plantlike and firelike, the image will start at the bottom of the
-- node. For torchlike, the image will start at the surface to which the
-- node "attaches". For the other drawtypes the image will be centered
@@ -6835,11 +7118,15 @@ Used by `minetest.register_node`.
-- If true, a new liquid source can be created by placing two or more
-- sources nearby
- leveled = 16,
+ leveled = 0,
-- Only valid for "nodebox" drawtype with 'type = "leveled"'.
-- Allows defining the nodebox height without using param2.
-- The nodebox height is 'leveled' / 64 nodes.
- -- The maximum value of 'leveled' is 127.
+ -- The maximum value of 'leveled' is `leveled_max`.
+
+ leveled_max = 127,
+ -- Maximum value for `leveled` (0-127), enforced in
+ -- `minetest.set_node_level` and `minetest.add_node_level`.
liquid_range = 8, -- Number of flowing nodes around source (max. 8)
@@ -7012,6 +7299,7 @@ Used by `minetest.register_node`.
-- node is deleted from the world or the drops are added. This is
-- generally the result of either the node being dug or an attached node
-- becoming detached.
+ -- oldmeta is the NodeMetaRef of the oldnode before deletion.
-- drops is a table of ItemStacks, so any metadata to be preserved can
-- be added directly to one or more of the dropped items. See
-- "ItemStackMetaRef".
@@ -7036,10 +7324,14 @@ Used by `minetest.register_node`.
on_punch = function(pos, node, puncher, pointed_thing),
-- default: minetest.node_punch
+ -- Called when puncher (an ObjectRef) punches the node at pos.
-- By default calls minetest.register_on_punchnode callbacks.
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing),
-- default: nil
+ -- Called when clicker (an ObjectRef) "rightclicks"
+ -- ("rightclick" here stands for the placement key) while pointing at
+ -- the node at pos with 'node' being the node table.
-- itemstack will hold clicker's wielded item.
-- Shall return the leftover itemstack.
-- Note: pointed_thing can be nil, if a mod calls this function.
@@ -7257,6 +7549,10 @@ Biome definition
Used by `minetest.register_biome`.
+The maximum number of biomes that can be used is 65535. However, using an
+excessive number of biomes will slow down map generation. Depending on desired
+performance and computing power the practical limit is much lower.
+
{
name = "tundra",
@@ -7604,6 +7900,8 @@ Used by `Player:hud_add`. Returned by `Player:hud_get`.
text = "<text>",
+ text2 = "<text>",
+
number = 2,
item = 3,
@@ -7639,6 +7937,8 @@ Used by `minetest.add_particle`.
size = 1,
-- Scales the visual size of the particle texture.
+ -- If `node` is set, size can be set to 0 to spawn a randomly-sized
+ -- particle (just like actual node dig particles).
collisiondetection = false,
-- If true collides with `walkable` nodes and, depending on the
@@ -7657,6 +7957,7 @@ Used by `minetest.add_particle`.
-- If true faces player using y axis only
texture = "image.png",
+ -- The texture of the particle
playername = "singleplayer",
-- Optional, if specified spawns particle only on the player's client
@@ -7667,6 +7968,17 @@ Used by `minetest.add_particle`.
glow = 0
-- Optional, specify particle self-luminescence in darkness.
-- Values 0-14.
+
+ node = {name = "ignore", param2 = 0},
+ -- Optional, if specified the particle will have the same appearance as
+ -- node dig particles for the given node.
+ -- `texture` and `animation` will be ignored if this is set.
+
+ node_tile = 0,
+ -- Optional, only valid in combination with `node`
+ -- If set to a valid number 1-6, specifies the tile from which the
+ -- particle texture is picked.
+ -- Otherwise, the default behavior is used. (currently: any random tile)
}
@@ -7696,7 +8008,9 @@ Used by `minetest.add_particlespawner`.
maxsize = 1,
-- The particles' properties are random values between the min and max
-- values.
- -- pos, velocity, acceleration, expirationtime, size
+ -- applies to: pos, velocity, acceleration, expirationtime, size
+ -- If `node` is set, min and maxsize can be set to 0 to spawn
+ -- randomly-sized particles (just like actual node dig particles).
collisiondetection = false,
-- If true collide with `walkable` nodes and, depending on the
@@ -7719,6 +8033,7 @@ Used by `minetest.add_particlespawner`.
-- If true face player using y axis only
texture = "image.png",
+ -- The texture of the particle
playername = "singleplayer",
-- Optional, if specified spawns particles only on the player's client
@@ -7729,6 +8044,17 @@ Used by `minetest.add_particlespawner`.
glow = 0
-- Optional, specify particle self-luminescence in darkness.
-- Values 0-14.
+
+ node = {name = "ignore", param2 = 0},
+ -- Optional, if specified the particles will have the same appearance as
+ -- node dig particles for the given node.
+ -- `texture` and `animation` will be ignored if this is set.
+
+ node_tile = 0,
+ -- Optional, only valid in combination with `node`
+ -- If set to a valid number 1-6, specifies the tile from which the
+ -- particle texture is picked.
+ -- Otherwise, the default behavior is used. (currently: any random tile)
}
`HTTPRequest` definition
diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt
index 4861ed0d9..76bebe08b 100644
--- a/doc/menu_lua_api.txt
+++ b/doc/menu_lua_api.txt
@@ -1,36 +1,55 @@
-Minetest Lua Mainmenu API Reference 5.2.0
+Minetest Lua Mainmenu API Reference 5.4.0
=========================================
Introduction
-------------
+
The main menu is defined as a formspec by Lua in builtin/mainmenu/
Description of formspec language to show your menu is in lua_api.txt
+
Callbacks
---------
-core.buttonhandler(fields): called when a button is pressed.
+
+core.button_handler(fields): called when a button is pressed.
^ fields = {name1 = value1, name2 = value2, ...}
core.event_handler(event)
^ event: "MenuQuit", "KeyEnter", "ExitButton" or "EditBoxEnter"
+
Gamedata
--------
+
The "gamedata" table is read when calling core.start(). It should contain:
{
- playername = <name>,
- password = <password>,
- address = <IP/adress>,
- port = <port>,
- selected_world = <index>, -- 0 for client mode
- singleplayer = <true/false>,
+ playername = <name>,
+ password = <password>,
+ address = <IP/adress>,
+ port = <port>,
+ selected_world = <index>, -- 0 for client mode
+ singleplayer = <true/false>,
}
+
Functions
---------
+
core.start()
core.close()
+core.get_min_supp_proto()
+^ returns the minimum supported network protocol version
+core.get_max_supp_proto()
+^ returns the maximum supported network protocol version
+core.open_url(url)
+^ opens the URL in a web browser, returns false on failure.
+^ Must begin with http:// or https://
+core.get_version() (possible in async calls)
+^ returns current core version
+
+
+Filesystem
+----------
-Filesystem:
core.get_builtin_path()
^ returns path to builtin root
core.create_dir(absolute_path) (possible in async calls)
@@ -48,12 +67,6 @@ core.extract_zip(zipfile,destination) [unzip within path required]
^ zipfile to extract
^ destination folder to extract to
^ returns true/false
-core.download_file(url,target) (possible in async calls)
-^ url to download
-^ target to store to
-^ returns true/false
-core.get_version() (possible in async calls)
-^ returns current core version
core.sound_play(spec, looped) -> handle
^ spec = SimpleSoundSpec (see lua-api.txt)
^ looped = bool
@@ -67,7 +80,82 @@ core.get_mapgen_names([include_hidden=false]) -> table of map generator algorith
registered in the core (possible in async calls)
core.get_cache_path() -> path of cache
-Formspec:
+
+HTTP Requests
+-------------
+
+* core.download_file(url, target) (possible in async calls)
+ * url to download, and target to store to
+ * returns true/false
+* `minetest.get_http_api()` (possible in async calls)
+ * returns `HTTPApiTable` containing http functions.
+ * The returned table contains the functions `fetch_sync`, `fetch_async` and
+ `fetch_async_get` described below.
+ * Function only exists if minetest server was built with cURL support.
+* `HTTPApiTable.fetch_sync(HTTPRequest req)`: returns HTTPRequestResult
+ * Performs given request synchronously
+* `HTTPApiTable.fetch_async(HTTPRequest req)`: returns handle
+ * Performs given request asynchronously and returns handle for
+ `HTTPApiTable.fetch_async_get`
+* `HTTPApiTable.fetch_async_get(handle)`: returns HTTPRequestResult
+ * Return response data for given asynchronous HTTP request
+
+### `HTTPRequest` definition
+
+Used by `HTTPApiTable.fetch` and `HTTPApiTable.fetch_async`.
+
+ {
+ url = "http://example.org",
+
+ timeout = 10,
+ -- Timeout for connection in seconds. Default is 3 seconds.
+
+ post_data = "Raw POST request data string" OR {field1 = "data1", field2 = "data2"},
+ -- Optional, if specified a POST request with post_data is performed.
+ -- Accepts both a string and a table. If a table is specified, encodes
+ -- table as x-www-form-urlencoded key-value pairs.
+ -- If post_data is not specified, a GET request is performed instead.
+
+ user_agent = "ExampleUserAgent",
+ -- Optional, if specified replaces the default minetest user agent with
+ -- given string
+
+ extra_headers = { "Accept-Language: en-us", "Accept-Charset: utf-8" },
+ -- Optional, if specified adds additional headers to the HTTP request.
+ -- You must make sure that the header strings follow HTTP specification
+ -- ("Key: Value").
+
+ multipart = boolean
+ -- Optional, if true performs a multipart HTTP request.
+ -- Default is false.
+ }
+
+### `HTTPRequestResult` definition
+
+Passed to `HTTPApiTable.fetch` callback. Returned by
+`HTTPApiTable.fetch_async_get`.
+
+ {
+ completed = true,
+ -- If true, the request has finished (either succeeded, failed or timed
+ -- out)
+
+ succeeded = true,
+ -- If true, the request was successful
+
+ timeout = false,
+ -- If true, the request timed out
+
+ code = 200,
+ -- HTTP status code
+
+ data = "response"
+ }
+
+
+Formspec
+--------
+
core.update_formspec(formspec)
core.get_table_index(tablename) -> index
^ can also handle textlists
@@ -82,7 +170,10 @@ core.explode_textlist_event(string) -> table
core.set_formspec_prepend(formspec)
^ string to be added to every mainmenu formspec, to be used for theming.
-GUI:
+
+GUI
+---
+
core.set_background(type, texturepath,[tile],[minsize])
^ type: "background", "overlay", "header" or "footer"
^ tile: tile the image instead of scaling (background only)
@@ -102,83 +193,96 @@ core.show_path_select_dialog(formname, caption, is_file_select)
^ returns nil or selected file/folder
core.get_screen_info()
^ returns {
- density = <screen density 0.75,1.0,2.0,3.0 ... (dpi)>,
- display_width = <width of display>,
- display_height = <height of display>,
- window_width = <current window width>,
- window_height = <current window height>
- }
+ density = <screen density 0.75,1.0,2.0,3.0 ... (dpi)>,
+ display_width = <width of display>,
+ display_height = <height of display>,
+ window_width = <current window width>,
+ window_height = <current window height>
+ }
+
-### Content and Packages
+Content and Packages
+--------------------
Content - an installed mod, modpack, game, or texture pack (txt)
Package - content which is downloadable from the content db, may or may not be installed.
* core.get_modpath() (possible in async calls)
- * returns path to global modpath
+ * returns path to global modpath
* core.get_clientmodpath() (possible in async calls)
- * returns path to global client-side modpath
+ * returns path to global client-side modpath
* core.get_gamepath() (possible in async calls)
- * returns path to global gamepath
+ * returns path to global gamepath
* core.get_texturepath() (possible in async calls)
- * returns path to default textures
+ * returns path to default textures
* core.get_game(index)
- * returns:
-
- {
- id = <id>,
- path = <full path to game>,
- gamemods_path = <path>,
- name = <name of game>,
- menuicon_path = <full path to menuicon>,
- author = "author",
- DEPRECATED:
- addon_mods_paths = {[1] = <path>,},
- }
+ * returns:
+
+ {
+ id = <id>,
+ path = <full path to game>,
+ gamemods_path = <path>,
+ name = <name of game>,
+ menuicon_path = <full path to menuicon>,
+ author = "author",
+ DEPRECATED:
+ addon_mods_paths = {[1] = <path>,},
+ }
* core.get_games() -> table of all games in upper format (possible in async calls)
* core.get_content_info(path)
- * returns
+ * returns
+
+ {
+ name = "name of content",
+ type = "mod" or "modpack" or "game" or "txp",
+ description = "description",
+ author = "author",
+ path = "path/to/content",
+ depends = {"mod", "names"}, -- mods only
+ optional_depends = {"mod", "names"}, -- mods only
+ }
- {
- name = "name of content",
- type = "mod" or "modpack" or "game" or "txp",
- description = "description",
- author = "author",
- path = "path/to/content",
- depends = {"mod", "names"}, -- mods only
- optional_depends = {"mod", "names"}, -- mods only
- }
+Favorites
+---------
-Favorites:
core.get_favorites(location) -> list of favorites (possible in async calls)
^ location: "local" or "online"
^ returns {
- [1] = {
- clients = <number of clients/nil>,
- clients_max = <maximum number of clients/nil>,
- version = <server version/nil>,
- password = <true/nil>,
- creative = <true/nil>,
- damage = <true/nil>,
- pvp = <true/nil>,
- description = <server description/nil>,
- name = <server name/nil>,
- address = <address of server/nil>,
- port = <port>
- },
+ [1] = {
+ clients = <number of clients/nil>,
+ clients_max = <maximum number of clients/nil>,
+ version = <server version/nil>,
+ password = <true/nil>,
+ creative = <true/nil>,
+ damage = <true/nil>,
+ pvp = <true/nil>,
+ description = <server description/nil>,
+ name = <server name/nil>,
+ address = <address of server/nil>,
+ port = <port>
+ clients_list = <array of clients/nil>
+ mods = <array of mods/nil>
+ },
+ ...
}
core.delete_favorite(id, location) -> success
-Logging:
+
+Logging
+-------
+
core.debug(line) (possible in async calls)
^ Always printed to stderr and logfile (print() is redirected here)
core.log(line) (possible in async calls)
core.log(loglevel, line) (possible in async calls)
^ loglevel one of "error", "action", "info", "verbose"
-Settings:
+
+Settings
+--------
+
core.settings:set(name, value)
core.settings:get(name) -> string or nil (possible in async calls)
core.settings:set_bool(name, value)
@@ -188,19 +292,25 @@ core.settings:save() -> nil, save all settings to config file
For a complete list of methods of the Settings object see
[lua_api.txt](https://github.com/minetest/minetest/blob/master/doc/lua_api.txt)
-Worlds:
+
+Worlds
+------
+
core.get_worlds() -> list of worlds (possible in async calls)
^ returns {
- [1] = {
- path = <full path to world>,
- name = <name of world>,
- gameid = <gameid of world>,
- },
+ [1] = {
+ path = <full path to world>,
+ name = <name of world>,
+ gameid = <gameid of world>,
+ },
}
core.create_world(worldname, gameid)
core.delete_world(index)
-Helpers:
+
+Helpers
+-------
+
core.get_us_time()
^ returns time with microsecond precision
core.gettext(string) -> string
@@ -225,13 +335,10 @@ minetest.encode_base64(string) (possible in async calls)
minetest.decode_base64(string) (possible in async calls)
^ Decodes a string encoded in base64.
-Version compat:
-core.get_min_supp_proto()
-^ returns the minimum supported network protocol version
-core.get_max_supp_proto()
-^ returns the maximum supported network protocol version
-Async:
+Async
+-----
+
core.handle_async(async_job,parameters,finished)
^ execute a function asynchronously
^ async_job is a function receiving one parameter and returning one parameter
@@ -242,11 +349,13 @@ core.handle_async(async_job,parameters,finished)
Limitations of Async operations
-No access to global lua variables, don't even try
-Limited set of available functions
- e.g. No access to functions modifying menu like core.start,core.close,
- core.show_path_select_dialog
+ e.g. No access to functions modifying menu like core.start,core.close,
+ core.show_path_select_dialog
+
Background music
----------------
+
The main menu supports background music.
It looks for a `main_menu` sound in `$USER_PATH/sounds`. The same naming
conventions as for normal sounds apply.
diff --git a/doc/minetest.6 b/doc/minetest.6
index cb5ed57ef..bac70fe1a 100644
--- a/doc/minetest.6
+++ b/doc/minetest.6
@@ -105,12 +105,12 @@ Migrate from current map backend to another. Possible values are sqlite3,
leveldb, redis, postgresql, and dummy.
.TP
.B \-\-migrate-auth <value>
-Migrate from current auth backend to another. Possible values are sqlite3 and
-files.
+Migrate from current auth backend to another. Possible values are sqlite3,
+leveldb, and files.
.TP
.B \-\-migrate-players <value>
Migrate from current players backend to another. Possible values are sqlite3,
-postgresql, dummy, and files.
+leveldb, postgresql, dummy, and files.
.TP
.B \-\-terminal
Display an interactive terminal over ncurses during execution.
diff --git a/doc/mkdocs/lua_highlight.patch b/doc/mkdocs/lua_highlight.patch
index 034a63a33..e231081d6 100644
--- a/doc/mkdocs/lua_highlight.patch
+++ b/doc/mkdocs/lua_highlight.patch
@@ -1,4 +1,4 @@
-@@ -77,7 +77,7 @@
+@@ -75,7 +75,7 @@
css_class="codehilite", lang=None, style='default',
noclasses=False, tab_length=4, hl_lines=None, use_pygments=True):
self.src = src
@@ -7,13 +7,3 @@
self.linenums = linenums
self.guess_lang = guess_lang
self.css_class = css_class
-@@ -119,7 +119,8 @@
- cssclass=self.css_class,
- style=self.style,
- noclasses=self.noclasses,
-- hl_lines=self.hl_lines)
-+ hl_lines=self.hl_lines,
-+ wrapcode=True)
- return highlight(self.src, lexer, formatter)
- else:
- # just escape and build markup usable by JS highlighting libs
diff --git a/doc/texture_packs.txt b/doc/texture_packs.txt
index 7ab0aca94..e7a7dfd3c 100644
--- a/doc/texture_packs.txt
+++ b/doc/texture_packs.txt
@@ -64,18 +64,27 @@ by texture packs. All existing fallback textures can be found in the directory
* `bubble.png`: the bubble texture when the player is drowning
(default size: 12×12)
+* `bubble_gone.png`: like `bubble.png`, but denotes lack of breath
+ (transparent by default, same size as bubble.png)
* `crack_anylength.png`: node overlay texture when digging
* `crosshair.png`
* the crosshair texture in the center of the screen. The settings
`crosshair_color` and `crosshair_alpha` are used to create a cross
- when no texture was found
+ when no texture is found.
+
+* `object_crosshair.png`
+ * the crosshair seen when pointing at an object. The settings
+ `crosshair_color` and `crosshair_alpha` are used to create a cross
+ when no texture is found.
* `halo.png`: used for the node highlighting mesh
* `heart.png`: used to display the health points of the player
(default size: 12×12)
+* `heart_gone.png`: like `heart.png`, but denotes lack of health points
+ (transparent by default, same size as heart.png)
* `minimap_mask_round.png`: round minimap mask, white gets replaced by the map
* `minimap_mask_square.png`: mask used for the square minimap
@@ -145,34 +154,51 @@ are placeholders intended to be overwritten by the game.
Texture Overrides
-----------------
-You can override the textures of a node from a texture pack using
-texture overrides. To do this, create a file in a texture pack
-called override.txt
+You can override the textures of nodes and items from a
+texture pack using texture overrides. To do this, create one or
+more files in a texture pack called override.txt
Each line in an override.txt file is a rule. It consists of
- nodename face-selector texture
+ itemname target texture
For example,
default:dirt_with_grass sides default_stone.png
-You can use ^ operators as usual:
+or
+
+ default:sword_steel inventory my_steel_sword.png
+
+You can list multiple targets on one line as a comma-separated list:
+
+ default:tree top,bottom my_special_tree.png
+
+You can use texture modifiers, as usual:
default:dirt_with_grass sides default_stone.png^[brighten
-Here are face selectors you can choose from:
+Finally, if a line is empty or starts with '#' it will be considered
+a comment and not read as a rule. You can use this to better organize
+your override.txt files.
+
+Here are targets you can choose from:
-| face-selector | behavior |
+| target | behavior |
|---------------|---------------------------------------------------|
-| left | x- |
-| right | x+ |
-| front | z- |
-| back | z+ |
-| top | y+ |
-| bottom | y- |
-| sides | x-, x+, z-, z+ |
+| left | x- face |
+| right | x+ face |
+| front | z- face |
+| back | z+ face |
+| top | y+ face |
+| bottom | y- face |
+| sides | x-, x+, z-, z+ faces |
| all | All faces. You can also use '*' instead of 'all'. |
+| inventory | The inventory texture |
+| wield | The texture used when held by the player |
+
+Nodes support all targets, but other items only support 'inventory'
+and 'wield'
Designing leaves textures for the leaves rendering options
----------------------------------------------------------
diff --git a/games/devtest/LICENSE.txt b/games/devtest/LICENSE.txt
new file mode 100644
index 000000000..71bd0e596
--- /dev/null
+++ b/games/devtest/LICENSE.txt
@@ -0,0 +1,4 @@
+License information for Development Test
+----------------------------------------
+
+The same license as for Minetest applies.
diff --git a/games/devtest/README.md b/games/devtest/README.md
new file mode 100644
index 000000000..a7e93cf11
--- /dev/null
+++ b/games/devtest/README.md
@@ -0,0 +1,52 @@
+# Development Test (devtest)
+
+This is a basic testing environment that contains a bunch of things to test the engine, but it could also be used as a minimal testbed for testing out mods.
+
+## Features
+
+* Basic nodes for mapgen
+* Basic, minimal map generator
+* Lots of example nodes for testing drawtypes, param2, light level, and many other node properties
+* Example entities
+* Other example items
+* Formspec test (via `/test_formspec` command)
+* Automated unit tests (disabled by default)
+* Tools for manipulating nodes and entities, like the "Param2 Tool"
+
+## Getting started
+
+Basically, just create a world and start. A few important things to note:
+
+* Items are gotten from the “Chest of Everything†(`chest_of_everything:chest`)
+* When you lost your initial items, type in `/stuff` command to get them back
+* By default, Creative Mode activates infinite node placement. This behavior can be changed with the `devtest_infplace` setting
+* Use the `/infplace` command to toggle infinite node placement in-game
+* Use the Param2 Tool to change the param2 of nodes; it's useful to experiment with the various drawtype test nodes
+* Check out the game settings and server commands for additional tests and features
+* Creative Mode does nothing (apart from default engine behavior)
+
+Confused by a certain node or item? Check out for inline code comments.
+
+### Example tests
+
+* You can use this to test what happens if a player is simultaneously in 2 nodes with `damage_per_second` but with a different value.
+* Or use the Falling Node Tool on various test nodes to see how they behave when falling.
+* You could also use this as a testbed for dependency-free mods, e.g. to test out how your formspecs behave without theming.
+
+## Random notes
+
+* Experimental/strange/unstructured tests can be found in the `experimental` mod
+* Textures of drawtype test nodes have a red dot at the top left corner. This is to see whether the textures are oriented properly
+
+## Design philosophy
+
+This should loosely follow the following principles:
+
+* Engine testing: The main focus of this is to aid testing of *engine* features, such as mapgen or node drawtypes
+* Mod testing: The secondary focus is to help modders as well, either as a minimal testbed for mods or even as a code example
+* Minimal interference: Under default settings, it shall not interfere with APIs except on explicit user wish. Non-trivial tests and features need to be enabled by a setting first
+* Convenience: Have various tools to make usage easier and more convenient
+* Reproducing engine bugs: When an engine bug was found, consider creating a test case
+* Clarity: Textures and names need to be designed to keep different things clearly visually apart at a glance
+* Low loading time: It must load blazing-fast so stuff can be tested quickly
+
diff --git a/games/devtest/game.conf b/games/devtest/game.conf
new file mode 100644
index 000000000..d6e382ad7
--- /dev/null
+++ b/games/devtest/game.conf
@@ -0,0 +1,2 @@
+name = Development Test
+description = Testing environment to help with testing the engine features of Minetest. It can also be helpful in mod development.
diff --git a/games/devtest/menu/background.png b/games/devtest/menu/background.png
new file mode 100644
index 000000000..415bb3d14
--- /dev/null
+++ b/games/devtest/menu/background.png
Binary files differ
diff --git a/games/devtest/menu/header.png b/games/devtest/menu/header.png
new file mode 100644
index 000000000..c80ed71f1
--- /dev/null
+++ b/games/devtest/menu/header.png
Binary files differ
diff --git a/games/devtest/menu/icon.png b/games/devtest/menu/icon.png
new file mode 100644
index 000000000..f854b9c31
--- /dev/null
+++ b/games/devtest/menu/icon.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/init.lua b/games/devtest/mods/basenodes/init.lua
new file mode 100644
index 000000000..8156c4bec
--- /dev/null
+++ b/games/devtest/mods/basenodes/init.lua
@@ -0,0 +1,334 @@
+local WATER_ALPHA = 160
+local WATER_VISC = 1
+local LAVA_VISC = 7
+
+--
+-- Node definitions
+--
+
+-- Register nodes
+
+minetest.register_node("basenodes:stone", {
+ description = "Stone",
+ tiles = {"default_stone.png"},
+ groups = {cracky=3},
+})
+
+minetest.register_node("basenodes:desert_stone", {
+ description = "Desert Stone",
+ tiles = {"default_desert_stone.png"},
+ groups = {cracky=3},
+})
+
+minetest.register_node("basenodes:dirt_with_grass", {
+ description = "Dirt with Grass",
+ tiles ={"default_grass.png",
+ -- a little dot on the bottom to distinguish it from dirt
+ "default_dirt.png^basenodes_dirt_with_grass_bottom.png",
+ {name = "default_dirt.png^default_grass_side.png",
+ tileable_vertical = false}},
+ groups = {crumbly=3, soil=1},
+})
+
+minetest.register_node("basenodes:dirt_with_snow", {
+ description = "Dirt with Snow",
+ tiles ={"basenodes_dirt_with_snow.png",
+ -- a little dot on the bottom to distinguish it from dirt
+ "default_dirt.png^basenodes_dirt_with_snow_bottom.png",
+ {name = "default_dirt.png^default_snow_side.png",
+ tileable_vertical = false}},
+ groups = {crumbly=3, soil=1},
+})
+
+minetest.register_node("basenodes:dirt", {
+ description = "Dirt",
+ tiles ={"default_dirt.png"},
+ groups = {crumbly=3, soil=1},
+})
+
+minetest.register_node("basenodes:sand", {
+ description = "Sand",
+ tiles ={"default_sand.png"},
+ groups = {crumbly=3},
+})
+
+minetest.register_node("basenodes:desert_sand", {
+ description = "Desert Sand",
+ tiles ={"default_desert_sand.png"},
+ groups = {crumbly=3},
+})
+
+minetest.register_node("basenodes:gravel", {
+ description = "Gravel",
+ tiles ={"default_gravel.png"},
+ groups = {crumbly=2},
+})
+
+minetest.register_node("basenodes:junglegrass", {
+ description = "Jungle Grass",
+ drawtype = "plantlike",
+ tiles ={"default_junglegrass.png"},
+ inventory_image = "default_junglegrass.png",
+ wield_image = "default_junglegrass.png",
+ paramtype = "light",
+ walkable = false,
+ groups = {snappy=3},
+})
+
+minetest.register_node("basenodes:tree", {
+ description = "Normal Tree Trunk",
+ tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
+ is_ground_content = false,
+ groups = {choppy=2,oddly_breakable_by_hand=1},
+})
+
+minetest.register_node("basenodes:leaves", {
+ description = "Normal Leaves",
+ drawtype = "allfaces_optional",
+ tiles = {"default_leaves.png"},
+ paramtype = "light",
+ is_ground_content = false,
+ groups = {snappy=3},
+})
+
+minetest.register_node("basenodes:jungletree", {
+ description = "Jungle Tree Trunk",
+ tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
+ is_ground_content = false,
+ groups = {choppy=2,oddly_breakable_by_hand=1},
+})
+
+minetest.register_node("basenodes:jungleleaves", {
+ description = "Jungle Leaves",
+ drawtype = "allfaces_optional",
+ tiles = {"default_jungleleaves.png"},
+ paramtype = "light",
+ is_ground_content = false,
+ groups = {snappy=3},
+})
+
+minetest.register_node("basenodes:pine_tree", {
+ description = "Pine Tree Trunk",
+ tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png", "default_pine_tree.png"},
+ is_ground_content = false,
+ groups = {choppy=2,oddly_breakable_by_hand=1},
+})
+
+minetest.register_node("basenodes:pine_needles", {
+ description = "Pine Needles",
+ drawtype = "allfaces_optional",
+ tiles = {"default_pine_needles.png"},
+ paramtype = "light",
+ is_ground_content = false,
+ groups = {snappy=3},
+})
+
+minetest.register_node("basenodes:water_source", {
+ description = "Water Source",
+ drawtype = "liquid",
+ tiles = {"default_water.png"},
+ special_tiles = {
+ {name = "default_water.png", backface_culling = false},
+ {name = "default_water.png", backface_culling = true},
+ },
+ alpha = WATER_ALPHA,
+ paramtype = "light",
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ drowning = 1,
+ liquidtype = "source",
+ liquid_alternative_flowing = "basenodes:water_flowing",
+ liquid_alternative_source = "basenodes:water_source",
+ liquid_viscosity = WATER_VISC,
+ post_effect_color = {a = 64, r = 100, g = 100, b = 200},
+ groups = {water = 3, liquid = 3},
+})
+
+minetest.register_node("basenodes:water_flowing", {
+ description = "Flowing Water",
+ drawtype = "flowingliquid",
+ tiles = {"default_water_flowing.png"},
+ special_tiles = {
+ {name = "default_water_flowing.png", backface_culling = false},
+ {name = "default_water_flowing.png", backface_culling = false},
+ },
+ alpha = WATER_ALPHA,
+ paramtype = "light",
+ paramtype2 = "flowingliquid",
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ drowning = 1,
+ liquidtype = "flowing",
+ liquid_alternative_flowing = "basenodes:water_flowing",
+ liquid_alternative_source = "basenodes:water_source",
+ liquid_viscosity = WATER_VISC,
+ post_effect_color = {a = 64, r = 100, g = 100, b = 200},
+ groups = {water = 3, liquid = 3},
+})
+
+minetest.register_node("basenodes:river_water_source", {
+ description = "River Water Source",
+ drawtype = "liquid",
+ tiles = { "default_river_water.png" },
+ special_tiles = {
+ {name = "default_river_water.png", backface_culling = false},
+ {name = "default_river_water.png", backface_culling = true},
+ },
+ alpha = WATER_ALPHA,
+ paramtype = "light",
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ drowning = 1,
+ liquidtype = "source",
+ liquid_alternative_flowing = "basenodes:river_water_flowing",
+ liquid_alternative_source = "basenodes:river_water_source",
+ liquid_viscosity = 1,
+ liquid_renewable = false,
+ liquid_range = 2,
+ post_effect_color = {a = 103, r = 30, g = 76, b = 90},
+ groups = {water = 3, liquid = 3, },
+})
+
+minetest.register_node("basenodes:river_water_flowing", {
+ description = "Flowing River Water",
+ drawtype = "flowingliquid",
+ tiles = {"default_river_water_flowing.png"},
+ special_tiles = {
+ {name = "default_river_water_flowing.png", backface_culling = false},
+ {name = "default_river_water_flowing.png", backface_culling = false},
+ },
+ alpha = WATER_ALPHA,
+ paramtype = "light",
+ paramtype2 = "flowingliquid",
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ drowning = 1,
+ liquidtype = "flowing",
+ liquid_alternative_flowing = "basenodes:river_water_flowing",
+ liquid_alternative_source = "basenodes:river_water_source",
+ liquid_viscosity = 1,
+ liquid_renewable = false,
+ liquid_range = 2,
+ post_effect_color = {a = 103, r = 30, g = 76, b = 90},
+ groups = {water = 3, liquid = 3, },
+})
+
+minetest.register_node("basenodes:lava_flowing", {
+ description = "Flowing Lava",
+ drawtype = "flowingliquid",
+ tiles = {"default_lava_flowing.png"},
+ special_tiles = {
+ {name="default_lava_flowing.png", backface_culling = false},
+ {name="default_lava_flowing.png", backface_culling = false},
+ },
+ paramtype = "light",
+ light_source = minetest.LIGHT_MAX,
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ drowning = 1,
+ damage_per_second = 4,
+ liquidtype = "flowing",
+ liquid_alternative_flowing = "basenodes:lava_flowing",
+ liquid_alternative_source = "basenodes:lava_source",
+ liquid_viscosity = LAVA_VISC,
+ post_effect_color = {a=192, r=255, g=64, b=0},
+ groups = {lava=3, liquid=1},
+})
+
+minetest.register_node("basenodes:lava_source", {
+ description = "Lava Source",
+ drawtype = "liquid",
+ tiles = { "default_lava.png" },
+ special_tiles = {
+ {name = "default_lava.png", backface_culling = false},
+ {name = "default_lava.png", backface_culling = true},
+ },
+ paramtype = "light",
+ light_source = minetest.LIGHT_MAX,
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ drowning = 1,
+ damage_per_second = 4,
+ liquidtype = "source",
+ liquid_alternative_flowing = "basenodes:lava_flowing",
+ liquid_alternative_source = "basenodes:lava_source",
+ liquid_viscosity = LAVA_VISC,
+ post_effect_color = {a=192, r=255, g=64, b=0},
+ groups = {lava=3, liquid=1},
+})
+
+minetest.register_node("basenodes:cobble", {
+ description = "Cobblestone",
+ tiles ={"default_cobble.png"},
+ is_ground_content = false,
+ groups = {cracky=3},
+})
+
+minetest.register_node("basenodes:mossycobble", {
+ description = "Mossy Cobblestone",
+ tiles ={"default_mossycobble.png"},
+ is_ground_content = false,
+ groups = {cracky=3},
+})
+
+minetest.register_node("basenodes:apple", {
+ description = "Apple",
+ drawtype = "plantlike",
+ tiles ={"default_apple.png"},
+ inventory_image = "default_apple.png",
+ paramtype = "light",
+ is_ground_content = false,
+ sunlight_propagates = true,
+ walkable = false,
+ groups = {dig_immediate=3},
+
+ -- Make eatable because why not?
+ on_use = minetest.item_eat(2),
+})
+
+minetest.register_node("basenodes:ice", {
+ description = "Ice",
+ tiles ={"default_ice.png"},
+ groups = {cracky=3},
+})
+
+-- The snow nodes intentionally have different tints to make them more
+-- distinguishable
+minetest.register_node("basenodes:snow", {
+ description = "Snow Sheet",
+ tiles = {"basenodes_snow_sheet.png"},
+ groups = {crumbly=3},
+ walkable = false,
+ paramtype = "light",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
+ },
+})
+
+minetest.register_node("basenodes:snowblock", {
+ description = "Snow Block",
+ tiles ={"default_snow.png"},
+ groups = {crumbly=3},
+})
+
+
diff --git a/games/devtest/mods/basenodes/mod.conf b/games/devtest/mods/basenodes/mod.conf
new file mode 100644
index 000000000..25024dc63
--- /dev/null
+++ b/games/devtest/mods/basenodes/mod.conf
@@ -0,0 +1,2 @@
+name = basenodes
+description = Contains basic nodes for mapgen
diff --git a/games/devtest/mods/basenodes/textures/basenodes_dirt_with_grass_bottom.png b/games/devtest/mods/basenodes/textures/basenodes_dirt_with_grass_bottom.png
new file mode 100644
index 000000000..5e8fc41a9
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/basenodes_dirt_with_grass_bottom.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow.png b/games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow.png
new file mode 100644
index 000000000..7ea2d8d31
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow_bottom.png b/games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow_bottom.png
new file mode 100644
index 000000000..447c94e98
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/basenodes_dirt_with_snow_bottom.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/basenodes_snow_sheet.png b/games/devtest/mods/basenodes/textures/basenodes_snow_sheet.png
new file mode 100644
index 000000000..455332093
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/basenodes_snow_sheet.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_apple.png b/games/devtest/mods/basenodes/textures/default_apple.png
new file mode 100644
index 000000000..9c115dae4
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_apple.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_cobble.png b/games/devtest/mods/basenodes/textures/default_cobble.png
new file mode 100644
index 000000000..5b859e9c2
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_cobble.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_desert_sand.png b/games/devtest/mods/basenodes/textures/default_desert_sand.png
new file mode 100644
index 000000000..19ec87dc0
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_desert_sand.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_desert_stone.png b/games/devtest/mods/basenodes/textures/default_desert_stone.png
new file mode 100644
index 000000000..5126fb61c
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_desert_stone.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_dirt.png b/games/devtest/mods/basenodes/textures/default_dirt.png
new file mode 100644
index 000000000..58670305d
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_dirt.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_grass.png b/games/devtest/mods/basenodes/textures/default_grass.png
new file mode 100644
index 000000000..3d6397186
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_grass.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_grass_side.png b/games/devtest/mods/basenodes/textures/default_grass_side.png
new file mode 100644
index 000000000..04770b6f6
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_grass_side.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_gravel.png b/games/devtest/mods/basenodes/textures/default_gravel.png
new file mode 100644
index 000000000..7e5ff616f
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_gravel.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_ice.png b/games/devtest/mods/basenodes/textures/default_ice.png
new file mode 100644
index 000000000..c4bddd223
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_ice.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_junglegrass.png b/games/devtest/mods/basenodes/textures/default_junglegrass.png
new file mode 100644
index 000000000..d64e33abc
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_junglegrass.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_jungleleaves.png b/games/devtest/mods/basenodes/textures/default_jungleleaves.png
new file mode 100644
index 000000000..1fa67e83a
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_jungleleaves.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_jungletree.png b/games/devtest/mods/basenodes/textures/default_jungletree.png
new file mode 100644
index 000000000..053850fa7
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_jungletree.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_jungletree_top.png b/games/devtest/mods/basenodes/textures/default_jungletree_top.png
new file mode 100644
index 000000000..e80de8a69
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_jungletree_top.png
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_lava.png b/games/devtest/mods/basenodes/textures/default_lava.png
index a4cf649f1..a4cf649f1 100644
--- a/games/minimal/mods/default/textures/default_lava.png
+++ b/games/devtest/mods/basenodes/textures/default_lava.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_lava_flowing.png b/games/devtest/mods/basenodes/textures/default_lava_flowing.png
new file mode 100644
index 000000000..07066a6e3
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_lava_flowing.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_leaves.png b/games/devtest/mods/basenodes/textures/default_leaves.png
new file mode 100644
index 000000000..c0475d4d2
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_leaves.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_mossycobble.png b/games/devtest/mods/basenodes/textures/default_mossycobble.png
new file mode 100644
index 000000000..69585e37b
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_mossycobble.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_pine_needles.png b/games/devtest/mods/basenodes/textures/default_pine_needles.png
new file mode 100644
index 000000000..137caa2a3
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_pine_needles.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_pine_tree.png b/games/devtest/mods/basenodes/textures/default_pine_tree.png
new file mode 100644
index 000000000..5743183c0
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_pine_tree.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_pine_tree_top.png b/games/devtest/mods/basenodes/textures/default_pine_tree_top.png
new file mode 100644
index 000000000..cc18f3462
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_pine_tree_top.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_river_water.png b/games/devtest/mods/basenodes/textures/default_river_water.png
new file mode 100644
index 000000000..e1074d2ef
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_river_water.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_river_water_flowing.png b/games/devtest/mods/basenodes/textures/default_river_water_flowing.png
new file mode 100644
index 000000000..4a756b2bd
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_river_water_flowing.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_sand.png b/games/devtest/mods/basenodes/textures/default_sand.png
new file mode 100644
index 000000000..0ed0e4ceb
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_sand.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_snow.png b/games/devtest/mods/basenodes/textures/default_snow.png
new file mode 100644
index 000000000..c42e0eecb
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_snow.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_snow_side.png b/games/devtest/mods/basenodes/textures/default_snow_side.png
new file mode 100644
index 000000000..f34d10991
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_snow_side.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_stone.png b/games/devtest/mods/basenodes/textures/default_stone.png
new file mode 100644
index 000000000..763b4396a
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_stone.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_tree.png b/games/devtest/mods/basenodes/textures/default_tree.png
new file mode 100644
index 000000000..189ec1593
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_tree.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_tree_top.png b/games/devtest/mods/basenodes/textures/default_tree_top.png
new file mode 100644
index 000000000..d1a4fa704
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_tree_top.png
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_water.png b/games/devtest/mods/basenodes/textures/default_water.png
index 3e385ae8b..3e385ae8b 100644
--- a/games/minimal/mods/default/textures/default_water.png
+++ b/games/devtest/mods/basenodes/textures/default_water.png
Binary files differ
diff --git a/games/devtest/mods/basenodes/textures/default_water_flowing.png b/games/devtest/mods/basenodes/textures/default_water_flowing.png
new file mode 100644
index 000000000..7cdafd51d
--- /dev/null
+++ b/games/devtest/mods/basenodes/textures/default_water_flowing.png
Binary files differ
diff --git a/games/minimal/mods/default/.sounds/default_grass_footstep.1.ogg b/games/devtest/mods/basetools/.sounds/default_grass_footstep.1.ogg
index ce625d92b..ce625d92b 100644
--- a/games/minimal/mods/default/.sounds/default_grass_footstep.1.ogg
+++ b/games/devtest/mods/basetools/.sounds/default_grass_footstep.1.ogg
Binary files differ
diff --git a/games/devtest/mods/basetools/init.lua b/games/devtest/mods/basetools/init.lua
new file mode 100644
index 000000000..c5b4cd76c
--- /dev/null
+++ b/games/devtest/mods/basetools/init.lua
@@ -0,0 +1,296 @@
+--
+-- Tool definitions
+--
+
+--[[ TOOLS SUMMARY:
+
+Tool types:
+
+* Hand: basic tool/weapon (just for convenience, not optimized for testing)
+* Pickaxe: dig cracky
+* Axe: dig choppy
+* Shovel: dig crumbly
+* Shears: dig snappy
+* Sword: deal damage
+* Dagger: deal damage, but faster
+
+Tool materials:
+
+* Dirt: dig nodes of rating 3, one use only
+* Wood: dig nodes of rating 3
+* Stone: dig nodes of rating 3 or 2
+* Steel: dig nodes of rating 3, 2 or 1
+* Mese: dig "everything" instantly
+]]
+
+-- The hand
+minetest.register_item(":", {
+ type = "none",
+ wield_image = "wieldhand.png",
+ wield_scale = {x=1,y=1,z=2.5},
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ max_drop_level = 0,
+ groupcaps = {
+ crumbly = {times={[3]=1.50}, uses=0, maxlevel=0},
+ snappy = {times={[3]=1.50}, uses=0, maxlevel=0},
+ oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=2.00}, uses=0, maxlevel=0},
+ },
+ damage_groups = {fleshy=1},
+ }
+})
+
+-- Mese Pickaxe: special tool that digs "everything" instantly
+minetest.register_tool("basetools:pick_mese", {
+ description = "Mese Pickaxe",
+ inventory_image = "basetools_mesepick.png",
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ max_drop_level=3,
+ groupcaps={
+ cracky={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255},
+ crumbly={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255},
+ snappy={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255},
+ choppy={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255},
+ dig_immediate={times={[1]=0.0, [2]=0.0, [3]=0.0}, maxlevel=255},
+ },
+ damage_groups = {fleshy=100},
+ },
+})
+
+
+--
+-- Pickaxes: Dig cracky
+--
+
+-- This should break after only 1 use
+minetest.register_tool("basetools:pick_dirt", {
+ description = "Dirt Pickaxe",
+ inventory_image = "basetools_dirtpick.png",
+ tool_capabilities = {
+ max_drop_level=0,
+ groupcaps={
+ cracky={times={[3]=2.00}, uses=1, maxlevel=0}
+ },
+ },
+})
+
+minetest.register_tool("basetools:pick_wood", {
+ description = "Wooden Pickaxe",
+ inventory_image = "basetools_woodpick.png",
+ tool_capabilities = {
+ max_drop_level=0,
+ groupcaps={
+ cracky={times={[3]=2.00}, uses=30, maxlevel=0}
+ },
+ },
+})
+minetest.register_tool("basetools:pick_stone", {
+ description = "Stone Pickaxe",
+ inventory_image = "basetools_stonepick.png",
+ tool_capabilities = {
+ max_drop_level=0,
+ groupcaps={
+ cracky={times={[2]=1.20, [3]=0.80}, uses=60, maxlevel=0}
+ },
+ },
+})
+minetest.register_tool("basetools:pick_steel", {
+ description = "Steel Pickaxe",
+ inventory_image = "basetools_steelpick.png",
+ tool_capabilities = {
+ max_drop_level=1,
+ groupcaps={
+ cracky={times={[1]=4.00, [2]=1.60, [3]=1.00}, uses=90, maxlevel=0}
+ },
+ },
+})
+minetest.register_tool("basetools:pick_steel_l1", {
+ description = "Steel Pickaxe Level 1",
+ inventory_image = "basetools_steelpick_l1.png",
+ tool_capabilities = {
+ max_drop_level=1,
+ groupcaps={
+ cracky={times={[1]=4.00, [2]=1.60, [3]=1.00}, uses=90, maxlevel=1}
+ },
+ },
+})
+minetest.register_tool("basetools:pick_steel_l2", {
+ description = "Steel Pickaxe Level 2",
+ inventory_image = "basetools_steelpick_l2.png",
+ tool_capabilities = {
+ max_drop_level=1,
+ groupcaps={
+ cracky={times={[1]=4.00, [2]=1.60, [3]=1.00}, uses=90, maxlevel=2}
+ },
+ },
+})
+
+--
+-- Shovels (dig crumbly)
+--
+
+minetest.register_tool("basetools:shovel_wood", {
+ description = "Wooden Shovel",
+ inventory_image = "basetools_woodshovel.png",
+ tool_capabilities = {
+ max_drop_level=0,
+ groupcaps={
+ crumbly={times={[3]=0.50}, uses=30, maxlevel=0}
+ },
+ },
+})
+minetest.register_tool("basetools:shovel_stone", {
+ description = "Stone Shovel",
+ inventory_image = "basetools_stoneshovel.png",
+ tool_capabilities = {
+ max_drop_level=0,
+ groupcaps={
+ crumbly={times={[2]=0.50, [3]=0.30}, uses=60, maxlevel=0}
+ },
+ },
+})
+minetest.register_tool("basetools:shovel_steel", {
+ description = "Steel Shovel",
+ inventory_image = "basetools_steelshovel.png",
+ tool_capabilities = {
+ max_drop_level=1,
+ groupcaps={
+ crumbly={times={[1]=1.00, [2]=0.70, [3]=0.60}, uses=90, maxlevel=0}
+ },
+ },
+})
+
+--
+-- Axes (dig choppy)
+--
+
+minetest.register_tool("basetools:axe_wood", {
+ description = "Wooden Axe",
+ inventory_image = "basetools_woodaxe.png",
+ tool_capabilities = {
+ max_drop_level=0,
+ groupcaps={
+ choppy={times={[3]=0.80}, uses=30, maxlevel=0},
+ },
+ },
+})
+minetest.register_tool("basetools:axe_stone", {
+ description = "Stone Axe",
+ inventory_image = "basetools_stoneaxe.png",
+ tool_capabilities = {
+ max_drop_level=0,
+ groupcaps={
+ choppy={times={[2]=1.00, [3]=0.60}, uses=60, maxlevel=0},
+ },
+ },
+})
+minetest.register_tool("basetools:axe_steel", {
+ description = "Steel Axe",
+ inventory_image = "basetools_steelaxe.png",
+ tool_capabilities = {
+ max_drop_level=1,
+ groupcaps={
+ choppy={times={[1]=2.00, [2]=0.80, [3]=0.40}, uses=90, maxlevel=0},
+ },
+ },
+})
+
+--
+-- Shears (dig snappy)
+--
+
+minetest.register_tool("basetools:shears_wood", {
+ description = "Wooden Shears",
+ inventory_image = "basetools_woodshears.png",
+ tool_capabilities = {
+ max_drop_level=0,
+ groupcaps={
+ snappy={times={[3]=1.00}, uses=30, maxlevel=0},
+ },
+ },
+})
+minetest.register_tool("basetools:shears_stone", {
+ description = "Stone Shears",
+ inventory_image = "basetools_stoneshears.png",
+ tool_capabilities = {
+ max_drop_level=0,
+ groupcaps={
+ snappy={times={[2]=1.00, [3]=0.50}, uses=60, maxlevel=0},
+ },
+ },
+})
+minetest.register_tool("basetools:shears_steel", {
+ description = "Steel Shears",
+ inventory_image = "basetools_steelshears.png",
+ tool_capabilities = {
+ max_drop_level=1,
+ groupcaps={
+ snappy={times={[1]=1.00, [2]=0.50, [3]=0.25}, uses=90, maxlevel=0},
+ },
+ },
+})
+
+--
+-- Swords (deal damage)
+--
+
+minetest.register_tool("basetools:sword_wood", {
+ description = "Wooden Sword",
+ inventory_image = "basetools_woodsword.png",
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ damage_groups = {fleshy=2},
+ }
+})
+minetest.register_tool("basetools:sword_stone", {
+ description = "Stone Sword",
+ inventory_image = "basetools_stonesword.png",
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ max_drop_level=0,
+ damage_groups = {fleshy=4},
+ }
+})
+minetest.register_tool("basetools:sword_steel", {
+ description = "Steel Sword",
+ inventory_image = "basetools_steelsword.png",
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ max_drop_level=1,
+ damage_groups = {fleshy=6},
+ }
+})
+
+-- Fire/Ice sword: Deal damage to non-fleshy damage groups
+minetest.register_tool("basetools:sword_fire", {
+ description = "Fire Sword",
+ inventory_image = "basetools_firesword.png",
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ max_drop_level=0,
+ damage_groups = {icy=6},
+ }
+})
+minetest.register_tool("basetools:sword_ice", {
+ description = "Ice Sword",
+ inventory_image = "basetools_icesword.png",
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ max_drop_level=0,
+ damage_groups = {firy=6},
+ }
+})
+
+--
+-- Dagger: Low damage, fast punch interval
+--
+minetest.register_tool("basetools:dagger_steel", {
+ description = "Steel Dagger",
+ inventory_image = "basetools_steeldagger.png",
+ tool_capabilities = {
+ full_punch_interval = 0.5,
+ max_drop_level=0,
+ damage_groups = {fleshy=2},
+ }
+})
diff --git a/games/devtest/mods/basetools/mod.conf b/games/devtest/mods/basetools/mod.conf
new file mode 100644
index 000000000..f0d9f657d
--- /dev/null
+++ b/games/devtest/mods/basetools/mod.conf
@@ -0,0 +1,2 @@
+name = basetools
+description = Contains basic digging tools
diff --git a/games/minimal/mods/default/sounds/default_break_glass.1.ogg b/games/devtest/mods/basetools/sounds/default_break_glass.1.ogg
index b1ccc5fab..b1ccc5fab 100644
--- a/games/minimal/mods/default/sounds/default_break_glass.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_break_glass.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_break_glass.2.ogg b/games/devtest/mods/basetools/sounds/default_break_glass.2.ogg
index b6cc9e85e..b6cc9e85e 100644
--- a/games/minimal/mods/default/sounds/default_break_glass.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_break_glass.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_break_glass.3.ogg b/games/devtest/mods/basetools/sounds/default_break_glass.3.ogg
index ae6a6bfc4..ae6a6bfc4 100644
--- a/games/minimal/mods/default/sounds/default_break_glass.3.ogg
+++ b/games/devtest/mods/basetools/sounds/default_break_glass.3.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_chest_close.ogg b/games/devtest/mods/basetools/sounds/default_chest_close.ogg
index 068d9002f..068d9002f 100644
--- a/games/minimal/mods/default/sounds/default_chest_close.ogg
+++ b/games/devtest/mods/basetools/sounds/default_chest_close.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_chest_open.ogg b/games/devtest/mods/basetools/sounds/default_chest_open.ogg
index 40b0b9341..40b0b9341 100644
--- a/games/minimal/mods/default/sounds/default_chest_open.ogg
+++ b/games/devtest/mods/basetools/sounds/default_chest_open.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_cool_lava.1.ogg b/games/devtest/mods/basetools/sounds/default_cool_lava.1.ogg
index 42506ddff..42506ddff 100644
--- a/games/minimal/mods/default/sounds/default_cool_lava.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_cool_lava.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_cool_lava.2.ogg b/games/devtest/mods/basetools/sounds/default_cool_lava.2.ogg
index 2747ab81c..2747ab81c 100644
--- a/games/minimal/mods/default/sounds/default_cool_lava.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_cool_lava.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_cool_lava.3.ogg b/games/devtest/mods/basetools/sounds/default_cool_lava.3.ogg
index 8baeac32e..8baeac32e 100644
--- a/games/minimal/mods/default/sounds/default_cool_lava.3.ogg
+++ b/games/devtest/mods/basetools/sounds/default_cool_lava.3.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dig_choppy.ogg b/games/devtest/mods/basetools/sounds/default_dig_choppy.ogg
index e2ecd8416..e2ecd8416 100644
--- a/games/minimal/mods/default/sounds/default_dig_choppy.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dig_choppy.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dig_cracky.ogg b/games/devtest/mods/basetools/sounds/default_dig_cracky.ogg
index da1167916..da1167916 100644
--- a/games/minimal/mods/default/sounds/default_dig_cracky.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dig_cracky.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dig_crumbly.ogg b/games/devtest/mods/basetools/sounds/default_dig_crumbly.ogg
index a0b2a1f9f..a0b2a1f9f 100644
--- a/games/minimal/mods/default/sounds/default_dig_crumbly.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dig_crumbly.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dig_dig_immediate.ogg b/games/devtest/mods/basetools/sounds/default_dig_dig_immediate.ogg
index e65d766ee..e65d766ee 100644
--- a/games/minimal/mods/default/sounds/default_dig_dig_immediate.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dig_dig_immediate.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dig_metal.ogg b/games/devtest/mods/basetools/sounds/default_dig_metal.ogg
index 0b585097a..0b585097a 100644
--- a/games/minimal/mods/default/sounds/default_dig_metal.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dig_metal.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg b/games/devtest/mods/basetools/sounds/default_dig_oddly_breakable_by_hand.ogg
index ef4d7b155..ef4d7b155 100644
--- a/games/minimal/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dig_oddly_breakable_by_hand.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dig_snappy.ogg b/games/devtest/mods/basetools/sounds/default_dig_snappy.ogg
index 3686fcddb..3686fcddb 100644
--- a/games/minimal/mods/default/sounds/default_dig_snappy.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dig_snappy.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dirt_footstep.1.ogg b/games/devtest/mods/basetools/sounds/default_dirt_footstep.1.ogg
index 201aa3b2d..201aa3b2d 100644
--- a/games/minimal/mods/default/sounds/default_dirt_footstep.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dirt_footstep.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dirt_footstep.2.ogg b/games/devtest/mods/basetools/sounds/default_dirt_footstep.2.ogg
index 2667dbc21..2667dbc21 100644
--- a/games/minimal/mods/default/sounds/default_dirt_footstep.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dirt_footstep.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dug_metal.1.ogg b/games/devtest/mods/basetools/sounds/default_dug_metal.1.ogg
index 5d6cb5b1e..5d6cb5b1e 100644
--- a/games/minimal/mods/default/sounds/default_dug_metal.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dug_metal.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dug_metal.2.ogg b/games/devtest/mods/basetools/sounds/default_dug_metal.2.ogg
index 63567fc05..63567fc05 100644
--- a/games/minimal/mods/default/sounds/default_dug_metal.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dug_metal.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dug_node.1.ogg b/games/devtest/mods/basetools/sounds/default_dug_node.1.ogg
index c04975d42..c04975d42 100644
--- a/games/minimal/mods/default/sounds/default_dug_node.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dug_node.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_dug_node.2.ogg b/games/devtest/mods/basetools/sounds/default_dug_node.2.ogg
index 9f209268f..9f209268f 100644
--- a/games/minimal/mods/default/sounds/default_dug_node.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_dug_node.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_glass_footstep.ogg b/games/devtest/mods/basetools/sounds/default_glass_footstep.ogg
index 191287a33..191287a33 100644
--- a/games/minimal/mods/default/sounds/default_glass_footstep.ogg
+++ b/games/devtest/mods/basetools/sounds/default_glass_footstep.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_grass_footstep.2.ogg b/games/devtest/mods/basetools/sounds/default_grass_footstep.2.ogg
index d193068d2..d193068d2 100644
--- a/games/minimal/mods/default/sounds/default_grass_footstep.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_grass_footstep.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_grass_footstep.3.ogg b/games/devtest/mods/basetools/sounds/default_grass_footstep.3.ogg
index e1897ea38..e1897ea38 100644
--- a/games/minimal/mods/default/sounds/default_grass_footstep.3.ogg
+++ b/games/devtest/mods/basetools/sounds/default_grass_footstep.3.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_gravel_footstep.1.ogg b/games/devtest/mods/basetools/sounds/default_gravel_footstep.1.ogg
index 8d260ce01..8d260ce01 100644
--- a/games/minimal/mods/default/sounds/default_gravel_footstep.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_gravel_footstep.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_gravel_footstep.2.ogg b/games/devtest/mods/basetools/sounds/default_gravel_footstep.2.ogg
index 2aba2c652..2aba2c652 100644
--- a/games/minimal/mods/default/sounds/default_gravel_footstep.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_gravel_footstep.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_gravel_footstep.3.ogg b/games/devtest/mods/basetools/sounds/default_gravel_footstep.3.ogg
index 1bcd8a117..1bcd8a117 100644
--- a/games/minimal/mods/default/sounds/default_gravel_footstep.3.ogg
+++ b/games/devtest/mods/basetools/sounds/default_gravel_footstep.3.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_gravel_footstep.4.ogg b/games/devtest/mods/basetools/sounds/default_gravel_footstep.4.ogg
index 696c9ffd2..696c9ffd2 100644
--- a/games/minimal/mods/default/sounds/default_gravel_footstep.4.ogg
+++ b/games/devtest/mods/basetools/sounds/default_gravel_footstep.4.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_hard_footstep.1.ogg b/games/devtest/mods/basetools/sounds/default_hard_footstep.1.ogg
index 1748bc56a..1748bc56a 100644
--- a/games/minimal/mods/default/sounds/default_hard_footstep.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_hard_footstep.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_hard_footstep.2.ogg b/games/devtest/mods/basetools/sounds/default_hard_footstep.2.ogg
index fe39fd784..fe39fd784 100644
--- a/games/minimal/mods/default/sounds/default_hard_footstep.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_hard_footstep.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_hard_footstep.3.ogg b/games/devtest/mods/basetools/sounds/default_hard_footstep.3.ogg
index 5030e0607..5030e0607 100644
--- a/games/minimal/mods/default/sounds/default_hard_footstep.3.ogg
+++ b/games/devtest/mods/basetools/sounds/default_hard_footstep.3.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_item_smoke.ogg b/games/devtest/mods/basetools/sounds/default_item_smoke.ogg
index 038a46e4f..038a46e4f 100644
--- a/games/minimal/mods/default/sounds/default_item_smoke.ogg
+++ b/games/devtest/mods/basetools/sounds/default_item_smoke.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_metal_footstep.1.ogg b/games/devtest/mods/basetools/sounds/default_metal_footstep.1.ogg
index 841286bdc..841286bdc 100644
--- a/games/minimal/mods/default/sounds/default_metal_footstep.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_metal_footstep.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_metal_footstep.2.ogg b/games/devtest/mods/basetools/sounds/default_metal_footstep.2.ogg
index aa61ed338..aa61ed338 100644
--- a/games/minimal/mods/default/sounds/default_metal_footstep.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_metal_footstep.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_metal_footstep.3.ogg b/games/devtest/mods/basetools/sounds/default_metal_footstep.3.ogg
index 4cc1ca47a..4cc1ca47a 100644
--- a/games/minimal/mods/default/sounds/default_metal_footstep.3.ogg
+++ b/games/devtest/mods/basetools/sounds/default_metal_footstep.3.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_place_node.1.ogg b/games/devtest/mods/basetools/sounds/default_place_node.1.ogg
index 46b9756de..46b9756de 100644
--- a/games/minimal/mods/default/sounds/default_place_node.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_place_node.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_place_node.2.ogg b/games/devtest/mods/basetools/sounds/default_place_node.2.ogg
index d34c01a43..d34c01a43 100644
--- a/games/minimal/mods/default/sounds/default_place_node.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_place_node.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_place_node.3.ogg b/games/devtest/mods/basetools/sounds/default_place_node.3.ogg
index fc2936506..fc2936506 100644
--- a/games/minimal/mods/default/sounds/default_place_node.3.ogg
+++ b/games/devtest/mods/basetools/sounds/default_place_node.3.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_place_node_hard.1.ogg b/games/devtest/mods/basetools/sounds/default_place_node_hard.1.ogg
index 9f97facad..9f97facad 100644
--- a/games/minimal/mods/default/sounds/default_place_node_hard.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_place_node_hard.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_place_node_hard.2.ogg b/games/devtest/mods/basetools/sounds/default_place_node_hard.2.ogg
index 1d3b3de2c..1d3b3de2c 100644
--- a/games/minimal/mods/default/sounds/default_place_node_hard.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_place_node_hard.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_place_node_metal.1.ogg b/games/devtest/mods/basetools/sounds/default_place_node_metal.1.ogg
index 5da085ea2..5da085ea2 100644
--- a/games/minimal/mods/default/sounds/default_place_node_metal.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_place_node_metal.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_place_node_metal.2.ogg b/games/devtest/mods/basetools/sounds/default_place_node_metal.2.ogg
index 5ee67fcf6..5ee67fcf6 100644
--- a/games/minimal/mods/default/sounds/default_place_node_metal.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_place_node_metal.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_sand_footstep.1.ogg b/games/devtest/mods/basetools/sounds/default_sand_footstep.1.ogg
index 65b68c7e6..65b68c7e6 100644
--- a/games/minimal/mods/default/sounds/default_sand_footstep.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_sand_footstep.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_sand_footstep.2.ogg b/games/devtest/mods/basetools/sounds/default_sand_footstep.2.ogg
index 57f35f30a..57f35f30a 100644
--- a/games/minimal/mods/default/sounds/default_sand_footstep.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_sand_footstep.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_snow_footstep.1.ogg b/games/devtest/mods/basetools/sounds/default_snow_footstep.1.ogg
index 97cc8252e..97cc8252e 100644
--- a/games/minimal/mods/default/sounds/default_snow_footstep.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_snow_footstep.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_snow_footstep.2.ogg b/games/devtest/mods/basetools/sounds/default_snow_footstep.2.ogg
index 97a6baa48..97a6baa48 100644
--- a/games/minimal/mods/default/sounds/default_snow_footstep.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_snow_footstep.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_snow_footstep.3.ogg b/games/devtest/mods/basetools/sounds/default_snow_footstep.3.ogg
index bde1f21d4..bde1f21d4 100644
--- a/games/minimal/mods/default/sounds/default_snow_footstep.3.ogg
+++ b/games/devtest/mods/basetools/sounds/default_snow_footstep.3.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_snow_footstep.4.ogg b/games/devtest/mods/basetools/sounds/default_snow_footstep.4.ogg
index 8ca6a590d..8ca6a590d 100644
--- a/games/minimal/mods/default/sounds/default_snow_footstep.4.ogg
+++ b/games/devtest/mods/basetools/sounds/default_snow_footstep.4.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_snow_footstep.5.ogg b/games/devtest/mods/basetools/sounds/default_snow_footstep.5.ogg
index 220d60c93..220d60c93 100644
--- a/games/minimal/mods/default/sounds/default_snow_footstep.5.ogg
+++ b/games/devtest/mods/basetools/sounds/default_snow_footstep.5.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_tool_breaks.1.ogg b/games/devtest/mods/basetools/sounds/default_tool_breaks.1.ogg
index 2a571ae28..2a571ae28 100644
--- a/games/minimal/mods/default/sounds/default_tool_breaks.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_tool_breaks.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_tool_breaks.2.ogg b/games/devtest/mods/basetools/sounds/default_tool_breaks.2.ogg
index 178935205..178935205 100644
--- a/games/minimal/mods/default/sounds/default_tool_breaks.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_tool_breaks.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_tool_breaks.3.ogg b/games/devtest/mods/basetools/sounds/default_tool_breaks.3.ogg
index a99c4b7e3..a99c4b7e3 100644
--- a/games/minimal/mods/default/sounds/default_tool_breaks.3.ogg
+++ b/games/devtest/mods/basetools/sounds/default_tool_breaks.3.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_water_footstep.1.ogg b/games/devtest/mods/basetools/sounds/default_water_footstep.1.ogg
index 63b9744ce..63b9744ce 100644
--- a/games/minimal/mods/default/sounds/default_water_footstep.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_water_footstep.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_water_footstep.2.ogg b/games/devtest/mods/basetools/sounds/default_water_footstep.2.ogg
index 8d79c1f4b..8d79c1f4b 100644
--- a/games/minimal/mods/default/sounds/default_water_footstep.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_water_footstep.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_water_footstep.3.ogg b/games/devtest/mods/basetools/sounds/default_water_footstep.3.ogg
index f8891506d..f8891506d 100644
--- a/games/minimal/mods/default/sounds/default_water_footstep.3.ogg
+++ b/games/devtest/mods/basetools/sounds/default_water_footstep.3.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_water_footstep.4.ogg b/games/devtest/mods/basetools/sounds/default_water_footstep.4.ogg
index 6f1eab824..6f1eab824 100644
--- a/games/minimal/mods/default/sounds/default_water_footstep.4.ogg
+++ b/games/devtest/mods/basetools/sounds/default_water_footstep.4.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_wood_footstep.1.ogg b/games/devtest/mods/basetools/sounds/default_wood_footstep.1.ogg
index 34f63a17c..34f63a17c 100644
--- a/games/minimal/mods/default/sounds/default_wood_footstep.1.ogg
+++ b/games/devtest/mods/basetools/sounds/default_wood_footstep.1.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/default_wood_footstep.2.ogg b/games/devtest/mods/basetools/sounds/default_wood_footstep.2.ogg
index 124fc297c..124fc297c 100644
--- a/games/minimal/mods/default/sounds/default_wood_footstep.2.ogg
+++ b/games/devtest/mods/basetools/sounds/default_wood_footstep.2.ogg
Binary files differ
diff --git a/games/minimal/mods/default/sounds/player_damage.ogg b/games/devtest/mods/basetools/sounds/player_damage.ogg
index 788808710..788808710 100644
--- a/games/minimal/mods/default/sounds/player_damage.ogg
+++ b/games/devtest/mods/basetools/sounds/player_damage.ogg
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_dirtpick.png b/games/devtest/mods/basetools/textures/basetools_dirtpick.png
new file mode 100644
index 000000000..20a021d72
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_dirtpick.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_firesword.png b/games/devtest/mods/basetools/textures/basetools_firesword.png
new file mode 100644
index 000000000..ee2809ab7
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_firesword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_icesword.png b/games/devtest/mods/basetools/textures/basetools_icesword.png
new file mode 100644
index 000000000..35ba8214b
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_icesword.png
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_mesepick.png b/games/devtest/mods/basetools/textures/basetools_mesepick.png
index 2b5e12cdb..2b5e12cdb 100644
--- a/games/minimal/mods/default/textures/default_tool_mesepick.png
+++ b/games/devtest/mods/basetools/textures/basetools_mesepick.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_steelaxe.png b/games/devtest/mods/basetools/textures/basetools_steelaxe.png
new file mode 100644
index 000000000..aac594d84
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_steelaxe.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_steeldagger.png b/games/devtest/mods/basetools/textures/basetools_steeldagger.png
new file mode 100644
index 000000000..4c9173094
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_steeldagger.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_steelpick.png b/games/devtest/mods/basetools/textures/basetools_steelpick.png
new file mode 100644
index 000000000..bc02aac3e
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_steelpick.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_steelpick_l1.png b/games/devtest/mods/basetools/textures/basetools_steelpick_l1.png
new file mode 100644
index 000000000..dc03f3f65
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_steelpick_l1.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_steelpick_l2.png b/games/devtest/mods/basetools/textures/basetools_steelpick_l2.png
new file mode 100644
index 000000000..011df4584
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_steelpick_l2.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_steelshears.png b/games/devtest/mods/basetools/textures/basetools_steelshears.png
new file mode 100644
index 000000000..04c86c370
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_steelshears.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_steelshovel.png b/games/devtest/mods/basetools/textures/basetools_steelshovel.png
new file mode 100644
index 000000000..8cab60784
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_steelshovel.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_steelsword.png b/games/devtest/mods/basetools/textures/basetools_steelsword.png
new file mode 100644
index 000000000..9909365c3
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_steelsword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_stoneaxe.png b/games/devtest/mods/basetools/textures/basetools_stoneaxe.png
new file mode 100644
index 000000000..a374c547d
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_stoneaxe.png
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_stonepick.png b/games/devtest/mods/basetools/textures/basetools_stonepick.png
index d9156ee3a..d9156ee3a 100644
--- a/games/minimal/mods/default/textures/default_tool_stonepick.png
+++ b/games/devtest/mods/basetools/textures/basetools_stonepick.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_stoneshears.png b/games/devtest/mods/basetools/textures/basetools_stoneshears.png
new file mode 100644
index 000000000..0b4bd3b74
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_stoneshears.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_stoneshovel.png b/games/devtest/mods/basetools/textures/basetools_stoneshovel.png
new file mode 100644
index 000000000..3c1bb48cb
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_stoneshovel.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_stonesword.png b/games/devtest/mods/basetools/textures/basetools_stonesword.png
new file mode 100644
index 000000000..6f3e94cda
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_stonesword.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_woodaxe.png b/games/devtest/mods/basetools/textures/basetools_woodaxe.png
new file mode 100644
index 000000000..4015e910f
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_woodaxe.png
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_woodpick.png b/games/devtest/mods/basetools/textures/basetools_woodpick.png
index 15c61f408..15c61f408 100644
--- a/games/minimal/mods/default/textures/default_tool_woodpick.png
+++ b/games/devtest/mods/basetools/textures/basetools_woodpick.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_woodshears.png b/games/devtest/mods/basetools/textures/basetools_woodshears.png
new file mode 100644
index 000000000..4ff92fd7c
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_woodshears.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_woodshovel.png b/games/devtest/mods/basetools/textures/basetools_woodshovel.png
new file mode 100644
index 000000000..6cc52f8a1
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_woodshovel.png
Binary files differ
diff --git a/games/devtest/mods/basetools/textures/basetools_woodsword.png b/games/devtest/mods/basetools/textures/basetools_woodsword.png
new file mode 100644
index 000000000..364016ed6
--- /dev/null
+++ b/games/devtest/mods/basetools/textures/basetools_woodsword.png
Binary files differ
diff --git a/games/devtest/mods/bucket/init.lua b/games/devtest/mods/bucket/init.lua
new file mode 100644
index 000000000..3189d4aa6
--- /dev/null
+++ b/games/devtest/mods/bucket/init.lua
@@ -0,0 +1,26 @@
+-- Bucket: Punch liquid source or flowing liquid to collect it
+
+minetest.register_tool("bucket:bucket", {
+ description = "Bucket",
+ inventory_image = "bucket.png",
+ stack_max = 1,
+ liquids_pointable = true,
+ groups = { disable_repair = 1 },
+ on_use = function(itemstack, user, pointed_thing)
+ -- Must be pointing to node
+ if pointed_thing.type ~= "node" then
+ return
+ end
+ -- Check if pointing to a liquid
+ local n = minetest.get_node(pointed_thing.under)
+ local def = minetest.registered_nodes[n.name]
+ if def ~= nil and (def.liquidtype == "source" or def.liquidtype == "flowing") then
+ minetest.add_node(pointed_thing.under, {name="air"})
+ local inv = user:get_inventory()
+ if inv then
+ inv:add_item("main", ItemStack(n.name))
+ end
+ end
+ end,
+})
+
diff --git a/games/devtest/mods/bucket/mod.conf b/games/devtest/mods/bucket/mod.conf
new file mode 100644
index 000000000..d14deb4ea
--- /dev/null
+++ b/games/devtest/mods/bucket/mod.conf
@@ -0,0 +1,2 @@
+name = bucket
+description = Minimal bucket to pick up liquids
diff --git a/games/devtest/mods/bucket/textures/bucket.png b/games/devtest/mods/bucket/textures/bucket.png
new file mode 100644
index 000000000..677952875
--- /dev/null
+++ b/games/devtest/mods/bucket/textures/bucket.png
Binary files differ
diff --git a/games/devtest/mods/bucket/textures/bucket_lava.png b/games/devtest/mods/bucket/textures/bucket_lava.png
new file mode 100644
index 000000000..dfcae65fb
--- /dev/null
+++ b/games/devtest/mods/bucket/textures/bucket_lava.png
Binary files differ
diff --git a/games/devtest/mods/bucket/textures/bucket_water.png b/games/devtest/mods/bucket/textures/bucket_water.png
new file mode 100644
index 000000000..e164b0a50
--- /dev/null
+++ b/games/devtest/mods/bucket/textures/bucket_water.png
Binary files differ
diff --git a/games/devtest/mods/chest/init.lua b/games/devtest/mods/chest/init.lua
new file mode 100644
index 000000000..c44522cb9
--- /dev/null
+++ b/games/devtest/mods/chest/init.lua
@@ -0,0 +1,27 @@
+minetest.register_node("chest:chest", {
+ description = "Chest",
+ tiles ={"chest_chest.png^[sheet:2x2:0,0", "chest_chest.png^[sheet:2x2:0,0",
+ "chest_chest.png^[sheet:2x2:1,0", "chest_chest.png^[sheet:2x2:1,0",
+ "chest_chest.png^[sheet:2x2:1,0", "chest_chest.png^[sheet:2x2:0,1"},
+ paramtype2 = "facedir",
+ groups = {dig_immediate=2,choppy=3},
+ is_ground_content = false,
+ on_construct = function(pos)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("formspec",
+ "size[8,9]"..
+ "list[current_name;main;0,0;8,4;]"..
+ "list[current_player;main;0,5;8,4;]" ..
+ "listring[]")
+ meta:set_string("infotext", "Chest")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 8*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+})
+
+
diff --git a/games/devtest/mods/chest/mod.conf b/games/devtest/mods/chest/mod.conf
new file mode 100644
index 000000000..0d7500164
--- /dev/null
+++ b/games/devtest/mods/chest/mod.conf
@@ -0,0 +1,2 @@
+name = chest
+description = A simple chest to store items
diff --git a/games/devtest/mods/chest/textures/chest_chest.png b/games/devtest/mods/chest/textures/chest_chest.png
new file mode 100644
index 000000000..824b4d502
--- /dev/null
+++ b/games/devtest/mods/chest/textures/chest_chest.png
Binary files differ
diff --git a/games/devtest/mods/chest_of_everything/init.lua b/games/devtest/mods/chest_of_everything/init.lua
new file mode 100644
index 000000000..7d61abebf
--- /dev/null
+++ b/games/devtest/mods/chest_of_everything/init.lua
@@ -0,0 +1,135 @@
+local F = minetest.formspec_escape
+
+-- Create a detached inventory
+local inv_everything = minetest.create_detached_inventory("everything", {
+ allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
+ return 0
+ end,
+ allow_put = function(inv, listname, index, stack, player)
+ return 0
+ end,
+ allow_take = function(inv, listname, index, stack, player)
+ return -1
+ end,
+})
+local inv_trash = minetest.create_detached_inventory("trash", {
+ allow_take = function(inv, listname, index, stack, player)
+ return 0
+ end,
+ allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
+ return 0
+ end,
+ on_put = function(inv, listname, index, stack, player)
+ inv:set_list("main", {})
+ end,
+})
+inv_trash:set_size("main", 1)
+
+local max_page = 1
+
+local function get_chest_formspec(page)
+ local start = 0 + (page-1)*32
+ return "size[8,9]"..
+ "list[detached:everything;main;0,0;8,4;"..start.."]"..
+ "list[current_player;main;0,5;8,4;]" ..
+ "label[6,4;Trash:]" ..
+ "list[detached:trash;main;7,4;1,1]" ..
+ "button[0,4;1,1;chest_of_everything_prev;"..F("<").."]"..
+ "button[1,4;1,1;chest_of_everything_next;"..F(">").."]"..
+ "label[2,4;"..F("Page: "..page).."]"..
+ "listring[detached:everything;main]"..
+ "listring[current_player;main]"..
+ "listring[detached:trash;main]"
+end
+
+minetest.register_node("chest_of_everything:chest", {
+ description = "Chest of Everything",
+ tiles ={"chest_of_everything_chest.png^[sheet:2x2:0,0", "chest_of_everything_chest.png^[sheet:2x2:0,0",
+ "chest_of_everything_chest.png^[sheet:2x2:1,0", "chest_of_everything_chest.png^[sheet:2x2:1,0",
+ "chest_of_everything_chest.png^[sheet:2x2:1,0", "chest_of_everything_chest.png^[sheet:2x2:0,1"},
+ paramtype2 = "facedir",
+ groups = {dig_immediate=2,choppy=3},
+ is_ground_content = false,
+ on_construct = function(pos)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("infotext", "Chest of Everything")
+ meta:set_int("page", 1)
+ meta:set_string("formspec", get_chest_formspec(1))
+ end,
+ on_receive_fields = function(pos, formname, fields, sender)
+ if formname == "" then
+ local meta = minetest.get_meta(pos)
+ local page = meta:get_int("page")
+ if fields.chest_of_everything_prev then
+ page = page - 1
+ elseif fields.chest_of_everything_next then
+ page = page + 1
+ end
+ if page < 1 then
+ page = 1
+ end
+ if page > max_page then
+ page = max_page
+ end
+ meta:set_int("page", page)
+ meta:set_string("formspec", get_chest_formspec(page))
+ end
+ end,
+})
+
+minetest.register_on_mods_loaded(function()
+ local items = {}
+ for itemstring,_ in pairs(minetest.registered_items) do
+ if itemstring ~= "" and itemstring ~= "unknown" and itemstring ~= "ignore" then
+ table.insert(items, itemstring)
+ end
+ end
+ --[[ Sort items in this order:
+ * Chest of Everything
+ * Test tools
+ * Other tools
+ * Craftitems
+ * Other items
+ * Dummy items ]]
+ local function compare(item1, item2)
+ local def1 = minetest.registered_items[item1]
+ local def2 = minetest.registered_items[item2]
+ local tool1 = def1.type == "tool"
+ local tool2 = def2.type == "tool"
+ local testtool1 = minetest.get_item_group(item1, "testtool") == 1
+ local testtool2 = minetest.get_item_group(item2, "testtool") == 1
+ local dummy1 = minetest.get_item_group(item1, "dummy") == 1
+ local dummy2 = minetest.get_item_group(item2, "dummy") == 1
+ local craftitem1 = def1.type == "craft"
+ local craftitem2 = def2.type == "craft"
+ if item1 == "chest_of_everything:chest" then
+ return true
+ elseif item2 == "chest_of_everything:chest" then
+ return false
+ elseif dummy1 and not dummy2 then
+ return false
+ elseif not dummy1 and dummy2 then
+ return true
+ elseif testtool1 and not testtool2 then
+ return true
+ elseif not testtool1 and testtool2 then
+ return false
+ elseif tool1 and not tool2 then
+ return true
+ elseif not tool1 and tool2 then
+ return false
+ elseif craftitem1 and not craftitem2 then
+ return true
+ elseif not craftitem1 and craftitem2 then
+ return false
+ else
+ return item1 < item2
+ end
+ end
+ table.sort(items, compare)
+ inv_everything:set_size("main", #items)
+ max_page = math.ceil(#items / 32)
+ for i=1, #items do
+ inv_everything:add_item("main", items[i])
+ end
+end)
diff --git a/games/devtest/mods/chest_of_everything/mod.conf b/games/devtest/mods/chest_of_everything/mod.conf
new file mode 100644
index 000000000..4a4425e05
--- /dev/null
+++ b/games/devtest/mods/chest_of_everything/mod.conf
@@ -0,0 +1,2 @@
+name = chest_of_everything
+description = Adds the chest of everything from which you can take all items
diff --git a/games/devtest/mods/chest_of_everything/textures/chest_of_everything_chest.png b/games/devtest/mods/chest_of_everything/textures/chest_of_everything_chest.png
new file mode 100644
index 000000000..6b2fd58d5
--- /dev/null
+++ b/games/devtest/mods/chest_of_everything/textures/chest_of_everything_chest.png
Binary files differ
diff --git a/games/devtest/mods/dignodes/init.lua b/games/devtest/mods/dignodes/init.lua
new file mode 100644
index 000000000..833150873
--- /dev/null
+++ b/games/devtest/mods/dignodes/init.lua
@@ -0,0 +1,37 @@
+local groups = {
+ "cracky", "dig_immediate"
+}
+
+-- Register dig nodes with 1 digging group, a rating between 1-3 and a level between 0-2
+for g=1, #groups do
+ local gr = groups[g]
+ for r=1, 3 do
+ for l=0, 2 do
+ if not (gr=="dig_immediate" and (l>0 or r==1)) then
+ local d
+ if l > 0 then
+ d = string.format("Dig Test Node: %s=%d, level=%d", gr, r, l)
+ else
+ d = string.format("Dig Test Node: %s=%d", gr, r)
+ end
+ local tile = "dignodes_"..gr..".png^dignodes_rating"..r..".png"
+ if l==1 then
+ tile = tile .. "^[colorize:#FFFF00:127"
+ elseif l==2 then
+ tile = tile .. "^[colorize:#FF0000:127"
+ end
+ minetest.register_node("dignodes:"..gr.."_"..r.."_"..l, {
+ description = d,
+ tiles = { tile },
+ groups = { [gr] = r, level = l },
+ })
+ end
+ end
+ end
+end
+
+-- Node without any digging groups
+minetest.register_node("dignodes:none", {
+ description = "Dig Test Node: groupless",
+ tiles = {"dignodes_none.png"},
+})
diff --git a/games/devtest/mods/dignodes/mod.conf b/games/devtest/mods/dignodes/mod.conf
new file mode 100644
index 000000000..52a80d66e
--- /dev/null
+++ b/games/devtest/mods/dignodes/mod.conf
@@ -0,0 +1,2 @@
+name = dignodes
+description = Nodes with different digging groups
diff --git a/games/devtest/mods/dignodes/textures/dignodes_choppy.png b/games/devtest/mods/dignodes/textures/dignodes_choppy.png
new file mode 100644
index 000000000..a73fc2424
--- /dev/null
+++ b/games/devtest/mods/dignodes/textures/dignodes_choppy.png
Binary files differ
diff --git a/games/devtest/mods/dignodes/textures/dignodes_cracky.png b/games/devtest/mods/dignodes/textures/dignodes_cracky.png
new file mode 100644
index 000000000..eb84e3079
--- /dev/null
+++ b/games/devtest/mods/dignodes/textures/dignodes_cracky.png
Binary files differ
diff --git a/games/devtest/mods/dignodes/textures/dignodes_crumbly.png b/games/devtest/mods/dignodes/textures/dignodes_crumbly.png
new file mode 100644
index 000000000..23f2f7c71
--- /dev/null
+++ b/games/devtest/mods/dignodes/textures/dignodes_crumbly.png
Binary files differ
diff --git a/games/devtest/mods/dignodes/textures/dignodes_dig_immediate.png b/games/devtest/mods/dignodes/textures/dignodes_dig_immediate.png
new file mode 100644
index 000000000..a532ad90b
--- /dev/null
+++ b/games/devtest/mods/dignodes/textures/dignodes_dig_immediate.png
Binary files differ
diff --git a/games/devtest/mods/dignodes/textures/dignodes_none.png b/games/devtest/mods/dignodes/textures/dignodes_none.png
new file mode 100644
index 000000000..60f13650b
--- /dev/null
+++ b/games/devtest/mods/dignodes/textures/dignodes_none.png
Binary files differ
diff --git a/games/devtest/mods/dignodes/textures/dignodes_rating1.png b/games/devtest/mods/dignodes/textures/dignodes_rating1.png
new file mode 100644
index 000000000..d2fee3a23
--- /dev/null
+++ b/games/devtest/mods/dignodes/textures/dignodes_rating1.png
Binary files differ
diff --git a/games/devtest/mods/dignodes/textures/dignodes_rating2.png b/games/devtest/mods/dignodes/textures/dignodes_rating2.png
new file mode 100644
index 000000000..15329b93f
--- /dev/null
+++ b/games/devtest/mods/dignodes/textures/dignodes_rating2.png
Binary files differ
diff --git a/games/devtest/mods/dignodes/textures/dignodes_rating3.png b/games/devtest/mods/dignodes/textures/dignodes_rating3.png
new file mode 100644
index 000000000..37216bfd1
--- /dev/null
+++ b/games/devtest/mods/dignodes/textures/dignodes_rating3.png
Binary files differ
diff --git a/games/devtest/mods/experimental/commands.lua b/games/devtest/mods/experimental/commands.lua
new file mode 100644
index 000000000..158e5039d
--- /dev/null
+++ b/games/devtest/mods/experimental/commands.lua
@@ -0,0 +1,216 @@
+minetest.register_chatcommand("test_inv", {
+ params = "",
+ description = "Test: Modify player's inventory formspec",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ if not player then
+ return false, "No player."
+ end
+ player:set_inventory_formspec(
+ "size[13,7.5]"..
+ "image[6,0.6;1,2;player.png]"..
+ "list[current_player;main;5,3.5;8,4;]"..
+ "list[current_player;craft;8,0;3,3;]"..
+ "list[current_player;craftpreview;12,1;1,1;]"..
+ "list[detached:test_inventory;main;0,0;4,6;0]"..
+ "button[0.5,7;2,1;button1;Button 1]"..
+ "button_exit[2.5,7;2,1;button2;Exit Button]")
+ return true, "Done."
+ end,
+})
+
+minetest.register_chatcommand("test_bulk_set_node", {
+ params = "",
+ description = "Test: Bulk-set 9×9×9 stone nodes",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ if not player then
+ return false, "No player."
+ end
+ local pos_list = {}
+ local ppos = player:get_pos()
+ local i = 1
+ for x=2,10 do
+ for y=2,10 do
+ for z=2,10 do
+ pos_list[i] = {x=ppos.x + x,y = ppos.y + y,z = ppos.z + z}
+ i = i + 1
+ end
+ end
+ end
+ minetest.bulk_set_node(pos_list, {name = "mapgen_stone"})
+ return true, "Done."
+ end,
+})
+
+minetest.register_chatcommand("bench_bulk_set_node", {
+ params = "",
+ description = "Benchmark: Bulk-set 99×99×99 stone nodes",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ if not player then
+ return false, "No player."
+ end
+ local pos_list = {}
+ local ppos = player:get_pos()
+ local i = 1
+ for x=2,100 do
+ for y=2,100 do
+ for z=2,100 do
+ pos_list[i] = {x=ppos.x + x,y = ppos.y + y,z = ppos.z + z}
+ i = i + 1
+ end
+ end
+ end
+
+ minetest.chat_send_player(name, "Benchmarking minetest.bulk_set_node. Warming up ...");
+
+ -- warm up with stone to prevent having different callbacks
+ -- due to different node topology
+ minetest.bulk_set_node(pos_list, {name = "mapgen_stone"})
+
+ minetest.chat_send_player(name, "Warming up finished, now benchmarking ...");
+
+ local start_time = minetest.get_us_time()
+ for i=1,#pos_list do
+ minetest.set_node(pos_list[i], {name = "mapgen_stone"})
+ end
+ local middle_time = minetest.get_us_time()
+ minetest.bulk_set_node(pos_list, {name = "mapgen_stone"})
+ local end_time = minetest.get_us_time()
+ local msg = string.format("Benchmark results: minetest.set_node loop: %.2f ms; minetest.bulk_set_node: %.2f ms",
+ ((middle_time - start_time)) / 1000,
+ ((end_time - middle_time)) / 1000
+ )
+ return true, msg
+ end,
+})
+
+local function advance_pos(pos, start_pos, advance_z)
+ if advance_z then
+ pos.z = pos.z + 2
+ pos.x = start_pos.x
+ else
+ pos.x = pos.x + 2
+ end
+ if pos.x > 30900 or pos.x - start_pos.x > 46 then
+ pos.x = start_pos.x
+ pos.z = pos.z + 2
+ end
+ if pos.z > 30900 then
+ -- We ran out of space! Aborting
+ aborted = true
+ return false
+ end
+ return pos
+end
+
+local function place_nodes(param)
+ local nodes = param.nodes
+ local name = param.name
+ local pos = param.pos
+ local start_pos = param.start_pos
+ table.sort(nodes)
+ minetest.chat_send_player(name, "Placing nodes …")
+ local nodes_placed = 0
+ local aborted = false
+ for n=1, #nodes do
+ local itemstring = nodes[n]
+ local def = minetest.registered_nodes[itemstring]
+ local p2_max = 0
+ if param.param ~= "no_param2" then
+ -- Also test the param2 values of the nodes
+ -- ... but we only use permissible param2 values
+ if def.paramtype2 == "wallmounted" then
+ p2_max = 5
+ elseif def.paramtype2 == "facedir" then
+ p2_max = 23
+ elseif def.paramtype2 == "glasslikeliquidlevel" then
+ p2_max = 63
+ elseif def.paramtype2 == "meshoptions" and def.drawtype == "plantlike" then
+ p2_max = 63
+ elseif def.paramtype2 == "leveled" then
+ p2_max = 127
+ elseif def.paramtype2 == "degrotate" and def.drawtype == "plantlike" then
+ p2_max = 179
+ elseif def.paramtype2 == "colorfacedir" or
+ def.paramtype2 == "colorwallmounted" or
+ def.paramtype2 == "color" then
+ p2_max = 255
+ end
+ end
+ for p2 = 0, p2_max do
+ -- Skip undefined param2 values
+ if not ((def.paramtype2 == "meshoptions" and p2 % 8 > 4) or
+ (def.paramtype2 == "colorwallmounted" and p2 % 8 > 5) or
+ (def.paramtype2 == "colorfacedir" and p2 % 32 > 23)) then
+
+ minetest.set_node(pos, { name = itemstring, param2 = p2 })
+ nodes_placed = nodes_placed + 1
+ pos = advance_pos(pos, start_pos)
+ if not pos then
+ aborted = true
+ break
+ end
+ end
+ end
+ if aborted then
+ break
+ end
+ end
+ if aborted then
+ minetest.chat_send_player(name, "Not all nodes could be placed, please move further away from the world boundary. Nodes placed: "..nodes_placed)
+ end
+ minetest.chat_send_player(name, "Nodes placed: "..nodes_placed..".")
+end
+
+local function after_emerge(blockpos, action, calls_remaining, param)
+ if calls_remaining == 0 then
+ place_nodes(param)
+ end
+end
+
+minetest.register_chatcommand("test_place_nodes", {
+ params = "[ no_param2 ]",
+ description = "Test: Place all non-experimental nodes and optionally their permissible param2 variants",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ if not player then
+ return false, "No player."
+ end
+ local pos = vector.floor(player:get_pos())
+ pos.x = math.ceil(pos.x + 3)
+ pos.z = math.ceil(pos.z + 3)
+ pos.y = math.ceil(pos.y + 1)
+ local start_pos = table.copy(pos)
+ if pos.x > 30800 then
+ return false, "Too close to world boundary (+X). Please move to X < 30800."
+ end
+ if pos.z > 30800 then
+ return false, "Too close to world boundary (+Z). Please move to Z < 30800."
+ end
+
+ local aborted = false
+ local nodes = {}
+ local emerge_estimate = 0
+ for itemstring, def in pairs(minetest.registered_nodes) do
+ if itemstring ~= "ignore" and string.sub(itemstring, 1, 13) ~= "experimental:" then
+ table.insert(nodes, itemstring)
+ if def.paramtype2 == 0 then
+ emerge_estimate = emerge_estimate + 1
+ else
+ emerge_estimate = emerge_estimate + 255
+ end
+ end
+ end
+ -- Emerge area to make sure that all nodes are being placed.
+ -- Note we will emerge much more than we need to (overestimation),
+ -- the estimation code could be improved performance-wise …
+ local length = 16 + math.ceil(emerge_estimate / 24) * 2
+ minetest.emerge_area(start_pos,
+ { x = start_pos.x + 46, y = start_pos.y, z = start_pos.z + length },
+ after_emerge, { nodes = nodes, name = name, pos = pos, start_pos = start_pos, param = param })
+ return true, "Emerging area …"
+ end,
+})
+
diff --git a/games/devtest/mods/experimental/detached.lua b/games/devtest/mods/experimental/detached.lua
new file mode 100644
index 000000000..673adfdd4
--- /dev/null
+++ b/games/devtest/mods/experimental/detached.lua
@@ -0,0 +1,29 @@
+-- Create a detached inventory
+local inv = minetest.create_detached_inventory("test_inventory", {
+ allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
+ experimental.print_to_everything("allow move asked")
+ return count -- Allow all
+ end,
+ allow_put = function(inv, listname, index, stack, player)
+ experimental.print_to_everything("allow put asked")
+ return 1 -- Allow only 1
+ end,
+ allow_take = function(inv, listname, index, stack, player)
+ experimental.print_to_everything("allow take asked")
+ return 4 -- Allow 4 at max
+ end,
+ on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
+ experimental.print_to_everything(player:get_player_name().." moved items")
+ end,
+ on_put = function(inv, listname, index, stack, player)
+ experimental.print_to_everything(player:get_player_name().." put items")
+ end,
+ on_take = function(inv, listname, index, stack, player)
+ experimental.print_to_everything(player:get_player_name().." took items")
+ end,
+})
+inv:set_size("main", 4*6)
+inv:add_item("main", "experimental:callback_node")
+inv:add_item("main", "experimental:particle_spawner")
+
+
diff --git a/games/devtest/mods/experimental/init.lua b/games/devtest/mods/experimental/init.lua
new file mode 100644
index 000000000..b292f792e
--- /dev/null
+++ b/games/devtest/mods/experimental/init.lua
@@ -0,0 +1,23 @@
+--
+-- Experimental things
+--
+
+experimental = {}
+
+dofile(minetest.get_modpath("experimental").."/detached.lua")
+dofile(minetest.get_modpath("experimental").."/items.lua")
+dofile(minetest.get_modpath("experimental").."/commands.lua")
+
+function experimental.print_to_everything(msg)
+ minetest.log("action", msg)
+ minetest.chat_send_all(msg)
+end
+
+minetest.log("info", "[experimental] modname="..dump(minetest.get_current_modname()))
+minetest.log("info", "[experimental] modpath="..dump(minetest.get_modpath("experimental")))
+minetest.log("info", "[experimental] worldpath="..dump(minetest.get_worldpath()))
+
+
+minetest.register_on_mods_loaded(function()
+ minetest.log("action", "[experimental] on_mods_loaded()")
+end)
diff --git a/games/devtest/mods/experimental/items.lua b/games/devtest/mods/experimental/items.lua
new file mode 100644
index 000000000..51b063ba2
--- /dev/null
+++ b/games/devtest/mods/experimental/items.lua
@@ -0,0 +1,103 @@
+minetest.register_node("experimental:callback_node", {
+ description = "Callback Test Node (construct/destruct/timer)",
+ tiles = {"experimental_callback_node.png"},
+ groups = {dig_immediate=3},
+ -- This was known to cause a bug in minetest.item_place_node() when used
+ -- via minetest.place_node(), causing a placer with no position
+ paramtype2 = "facedir",
+ drop = "",
+
+ on_construct = function(pos)
+ experimental.print_to_everything("experimental:callback_node:on_construct("..minetest.pos_to_string(pos)..")")
+ local meta = minetest.get_meta(pos)
+ meta:set_string("mine", "test")
+ local timer = minetest.get_node_timer(pos)
+ timer:start(4, 3)
+ end,
+
+ after_place_node = function(pos, placer)
+ experimental.print_to_everything("experimental:callback_node:after_place_node("..minetest.pos_to_string(pos)..")")
+ local meta = minetest.get_meta(pos)
+ if meta:get_string("mine") == "test" then
+ experimental.print_to_everything("correct metadata found")
+ else
+ experimental.print_to_everything("incorrect metadata found")
+ end
+ end,
+
+ on_destruct = function(pos)
+ experimental.print_to_everything("experimental:callback_node:on_destruct("..minetest.pos_to_string(pos)..")")
+ end,
+
+ after_destruct = function(pos)
+ experimental.print_to_everything("experimental:callback_node:after_destruct("..minetest.pos_to_string(pos)..")")
+ end,
+
+ after_dig_node = function(pos, oldnode, oldmetadata, digger)
+ experimental.print_to_everything("experimental:callback_node:after_dig_node("..minetest.pos_to_string(pos)..")")
+ end,
+
+ on_timer = function(pos, elapsed)
+ experimental.print_to_everything("on_timer(): elapsed="..dump(elapsed))
+ return true
+ end,
+})
+
+minetest.register_tool("experimental:privatizer", {
+ description = "Node Meta Privatizer",
+ inventory_image = "experimental_tester_tool_1.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type == "node" then
+ local node = minetest.get_node(pointed_thing.under)
+ if node.name == "chest:chest" then
+ local p = pointed_thing.under
+ minetest.log("action", "Privatizer used at "..minetest.pos_to_string(p))
+ minetest.get_meta(p):mark_as_private({"infotext", "formspec"})
+ if user and user:is_player() then
+ minetest.chat_send_player(user:get_player_name(), "Chest metadata (infotext, formspec) set private!")
+ end
+ return
+ end
+ end
+ if user and user:is_player() then
+ minetest.chat_send_player(user:get_player_name(), "Privatizer can only be used on chest!")
+ end
+ end,
+})
+
+minetest.register_tool("experimental:particle_spawner", {
+ description = "Particle Spawner",
+ inventory_image = "experimental_tester_tool_1.png^[invert:g",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = function(itemstack, user, pointed_thing)
+ local pos = minetest.get_pointed_thing_position(pointed_thing, true)
+ if pos == nil then
+ if user then
+ pos = user:get_pos()
+ end
+ end
+ pos = vector.add(pos, {x=0, y=0.5, z=0})
+ local tex, anim
+ if math.random(0, 1) == 0 then
+ tex = "experimental_particle_sheet.png"
+ anim = {type="sheet_2d", frames_w=3, frames_h=2, frame_length=0.5}
+ else
+ tex = "experimental_particle_vertical.png"
+ anim = {type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3}
+ end
+
+ minetest.add_particle({
+ pos = pos,
+ velocity = {x=0, y=0, z=0},
+ acceleration = {x=0, y=0.04, z=0},
+ expirationtime = 6,
+ collisiondetection = true,
+ texture = tex,
+ animation = anim,
+ size = 4,
+ glow = math.random(0, 5),
+ })
+ end,
+})
+
diff --git a/games/devtest/mods/experimental/mod.conf b/games/devtest/mods/experimental/mod.conf
new file mode 100644
index 000000000..cf0f9cb42
--- /dev/null
+++ b/games/devtest/mods/experimental/mod.conf
@@ -0,0 +1,2 @@
+name = experimental
+description = Chaotic mod containing unstructured tests for testing out engine features. The features in this mod should be moved to other mods.
diff --git a/games/devtest/mods/experimental/textures/experimental_callback_node.png b/games/devtest/mods/experimental/textures/experimental_callback_node.png
new file mode 100644
index 000000000..e9d87434c
--- /dev/null
+++ b/games/devtest/mods/experimental/textures/experimental_callback_node.png
Binary files differ
diff --git a/games/devtest/mods/experimental/textures/experimental_particle_sheet.png b/games/devtest/mods/experimental/textures/experimental_particle_sheet.png
new file mode 100644
index 000000000..6d70394e4
--- /dev/null
+++ b/games/devtest/mods/experimental/textures/experimental_particle_sheet.png
Binary files differ
diff --git a/games/devtest/mods/experimental/textures/experimental_particle_vertical.png b/games/devtest/mods/experimental/textures/experimental_particle_vertical.png
new file mode 100644
index 000000000..0320b7545
--- /dev/null
+++ b/games/devtest/mods/experimental/textures/experimental_particle_vertical.png
Binary files differ
diff --git a/games/devtest/mods/experimental/textures/experimental_tester_tool_1.png b/games/devtest/mods/experimental/textures/experimental_tester_tool_1.png
new file mode 100644
index 000000000..5df416a58
--- /dev/null
+++ b/games/devtest/mods/experimental/textures/experimental_tester_tool_1.png
Binary files differ
diff --git a/games/devtest/mods/give_initial_stuff/init.lua b/games/devtest/mods/give_initial_stuff/init.lua
new file mode 100644
index 000000000..491a531e4
--- /dev/null
+++ b/games/devtest/mods/give_initial_stuff/init.lua
@@ -0,0 +1,37 @@
+local give_if_not_gotten_already = function(inv, list, item)
+ if not inv:contains_item(list, item) then
+ inv:add_item(list, item)
+ end
+end
+
+local give_initial_stuff = function(player)
+ local inv = player:get_inventory()
+ give_if_not_gotten_already(inv, "main", "basetools:pick_mese")
+ give_if_not_gotten_already(inv, "main", "basetools:axe_steel")
+ give_if_not_gotten_already(inv, "main", "basetools:shovel_steel")
+ give_if_not_gotten_already(inv, "main", "bucket:bucket")
+ give_if_not_gotten_already(inv, "main", "testnodes:light14")
+ give_if_not_gotten_already(inv, "main", "chest_of_everything:chest")
+ minetest.log("action", "[give_initial_stuff] Giving initial stuff to "..player:get_player_name())
+end
+
+minetest.register_on_newplayer(function(player)
+ if minetest.settings:get_bool("give_initial_stuff", true) then
+ give_initial_stuff(player)
+ end
+end)
+
+minetest.register_chatcommand("stuff", {
+ params = "",
+ privs = { give = true },
+ description = "Give yourself initial items",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ if not player or not player:is_player() then
+ return false, "No player."
+ end
+ give_initial_stuff(player)
+ return true
+ end,
+})
+
diff --git a/games/minimal/mods/give_initial_stuff/mod.conf b/games/devtest/mods/give_initial_stuff/mod.conf
index bd293f418..1ba49f52a 100644
--- a/games/minimal/mods/give_initial_stuff/mod.conf
+++ b/games/devtest/mods/give_initial_stuff/mod.conf
@@ -1,3 +1,3 @@
name = give_initial_stuff
description = Gives items to players on join
-depends = default
+depends = basetools, bucket, chest_of_everything, testnodes
diff --git a/games/devtest/mods/initial_message/init.lua b/games/devtest/mods/initial_message/init.lua
new file mode 100644
index 000000000..59e9f5f4b
--- /dev/null
+++ b/games/devtest/mods/initial_message/init.lua
@@ -0,0 +1,9 @@
+minetest.register_on_joinplayer(function(player)
+ local cb = function(player)
+ if not player or not player:is_player() then
+ return
+ end
+ minetest.chat_send_player(player:get_player_name(), "This is the \"Development Test\" [devtest], meant only for testing and development. Use Minetest Game for the real thing.")
+ end
+ minetest.after(2.0, cb, player)
+end)
diff --git a/games/devtest/mods/initial_message/mod.conf b/games/devtest/mods/initial_message/mod.conf
new file mode 100644
index 000000000..32aa2ac4e
--- /dev/null
+++ b/games/devtest/mods/initial_message/mod.conf
@@ -0,0 +1,2 @@
+name = initial_message
+description = Show message to joining players explaining what this testing game is about
diff --git a/games/devtest/mods/mapgen/init.lua b/games/devtest/mods/mapgen/init.lua
new file mode 100644
index 000000000..a5f9128fb
--- /dev/null
+++ b/games/devtest/mods/mapgen/init.lua
@@ -0,0 +1,104 @@
+--
+-- Aliases for map generator outputs
+--
+
+-- ESSENTIAL node aliases
+-- Basic nodes
+minetest.register_alias("mapgen_stone", "basenodes:stone")
+minetest.register_alias("mapgen_water_source", "basenodes:water_source")
+minetest.register_alias("mapgen_river_water_source", "basenodes:river_water_source")
+
+-- Additional essential aliases for v6
+minetest.register_alias("mapgen_lava_source", "basenodes:lava_source")
+minetest.register_alias("mapgen_dirt", "basenodes:dirt")
+minetest.register_alias("mapgen_dirt_with_grass", "basenodes:dirt_with_grass")
+minetest.register_alias("mapgen_sand", "basenodes:sand")
+minetest.register_alias("mapgen_tree", "basenodes:tree")
+minetest.register_alias("mapgen_leaves", "basenodes:leaves")
+minetest.register_alias("mapgen_apple", "basenodes:apple")
+
+-- Essential alias for dungeons
+minetest.register_alias("mapgen_cobble", "basenodes:cobble")
+
+-- Optional aliases for v6 (they all have fallback values in the engine)
+if minetest.settings:get_bool("devtest_v6_mapgen_aliases", false) then
+ minetest.register_alias("mapgen_gravel", "basenodes:gravel")
+ minetest.register_alias("mapgen_desert_stone", "basenodes:desert_stone")
+ minetest.register_alias("mapgen_desert_sand", "basenodes:desert_sand")
+ minetest.register_alias("mapgen_dirt_with_snow", "basenodes:dirt_with_snow")
+ minetest.register_alias("mapgen_snowblock", "basenodes:snowblock")
+ minetest.register_alias("mapgen_snow", "basenodes:snow")
+ minetest.register_alias("mapgen_ice", "basenodes:ice")
+ minetest.register_alias("mapgen_junglegrass", "basenodes:junglegrass")
+ minetest.register_alias("mapgen_jungletree", "basenodes:jungletree")
+ minetest.register_alias("mapgen_jungleleaves", "basenodes:jungleleaves")
+ minetest.register_alias("mapgen_pine_tree", "basenodes:pine_tree")
+ minetest.register_alias("mapgen_pine_needles", "basenodes:pine_needles")
+end
+-- Optional alias for mossycobble (should fall back to cobble)
+if minetest.settings:get_bool("devtest_dungeon_mossycobble", false) then
+ minetest.register_alias("mapgen_mossycobble", "basenodes:mossycobble")
+end
+-- Optional aliases for dungeon stairs (should fall back to full nodes)
+if minetest.settings:get_bool("devtest_dungeon_stairs", false) then
+ minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble")
+ if minetest.settings:get_bool("devtest_v6_mapgen_aliases", false) then
+ minetest.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone")
+ end
+end
+
+--
+-- Register biomes for biome API
+--
+
+minetest.clear_registered_biomes()
+minetest.clear_registered_decorations()
+
+if minetest.settings:get_bool("devtest_register_biomes", true) then
+ minetest.register_biome({
+ name = "mapgen:grassland",
+ node_top = "basenodes:dirt_with_grass",
+ depth_top = 1,
+ node_filler = "basenodes:dirt",
+ depth_filler = 1,
+ node_riverbed = "basenodes:sand",
+ depth_riverbed = 2,
+ node_dungeon = "basenodes:cobble",
+ node_dungeon_alt = "basenodes:mossycobble",
+ node_dungeon_stair = "stairs:stair_cobble",
+ y_max = 31000,
+ y_min = 4,
+ heat_point = 50,
+ humidity_point = 50,
+ })
+
+ minetest.register_biome({
+ name = "mapgen:grassland_ocean",
+ node_top = "basenodes:sand",
+ depth_top = 1,
+ node_filler = "basenodes:sand",
+ depth_filler = 3,
+ node_riverbed = "basenodes:sand",
+ depth_riverbed = 2,
+ node_cave_liquid = "basenodes:water_source",
+ node_dungeon = "basenodes:cobble",
+ node_dungeon_alt = "basenodes:mossycobble",
+ node_dungeon_stair = "stairs:stair_cobble",
+ y_max = 3,
+ y_min = -255,
+ heat_point = 50,
+ humidity_point = 50,
+ })
+
+ minetest.register_biome({
+ name = "mapgen:grassland_under",
+ node_cave_liquid = {"basenodes:water_source", "basenodes:lava_source"},
+ node_dungeon = "basenodes:cobble",
+ node_dungeon_alt = "basenodes:mossycobble",
+ node_dungeon_stair = "stairs:stair_cobble",
+ y_max = -256,
+ y_min = -31000,
+ heat_point = 50,
+ humidity_point = 50,
+ })
+end
diff --git a/games/devtest/mods/mapgen/mod.conf b/games/devtest/mods/mapgen/mod.conf
new file mode 100644
index 000000000..15750ccbe
--- /dev/null
+++ b/games/devtest/mods/mapgen/mod.conf
@@ -0,0 +1,3 @@
+name = mapgen
+description = Minimal map generator
+depends = basenodes
diff --git a/games/devtest/mods/modchannels/init.lua b/games/devtest/mods/modchannels/init.lua
new file mode 100644
index 000000000..ee925f09b
--- /dev/null
+++ b/games/devtest/mods/modchannels/init.lua
@@ -0,0 +1,14 @@
+--
+-- Mod channels experimental handlers
+--
+local mod_channel = minetest.mod_channel_join("experimental_preview")
+
+minetest.register_on_modchannel_message(function(channel, sender, message)
+ minetest.log("action", "[modchannels] Server received message `" .. message
+ .. "` on channel `" .. channel .. "` from sender `" .. sender .. "`")
+
+ if mod_channel:is_writeable() then
+ mod_channel:send_all("experimental answers to preview")
+ mod_channel:leave()
+ end
+end)
diff --git a/games/devtest/mods/modchannels/mod.conf b/games/devtest/mods/modchannels/mod.conf
new file mode 100644
index 000000000..7c13aadfb
--- /dev/null
+++ b/games/devtest/mods/modchannels/mod.conf
@@ -0,0 +1,2 @@
+name = modchannels
+description = Add experimental mod channel handlers
diff --git a/games/minimal/mods/player_api/README.txt b/games/devtest/mods/player_api/README.txt
index 0f6a0b8a5..0f6a0b8a5 100644
--- a/games/minimal/mods/player_api/README.txt
+++ b/games/devtest/mods/player_api/README.txt
diff --git a/games/minimal/mods/player_api/api.lua b/games/devtest/mods/player_api/api.lua
index 5803e954b..5803e954b 100644
--- a/games/minimal/mods/player_api/api.lua
+++ b/games/devtest/mods/player_api/api.lua
diff --git a/games/minimal/mods/player_api/init.lua b/games/devtest/mods/player_api/init.lua
index 19028de18..19028de18 100644
--- a/games/minimal/mods/player_api/init.lua
+++ b/games/devtest/mods/player_api/init.lua
diff --git a/games/minimal/mods/player_api/license.txt b/games/devtest/mods/player_api/license.txt
index dac0408a5..dac0408a5 100644
--- a/games/minimal/mods/player_api/license.txt
+++ b/games/devtest/mods/player_api/license.txt
diff --git a/games/minimal/mods/player_api/mod.conf b/games/devtest/mods/player_api/mod.conf
index 198b86dc1..198b86dc1 100644
--- a/games/minimal/mods/player_api/mod.conf
+++ b/games/devtest/mods/player_api/mod.conf
diff --git a/games/minimal/mods/player_api/models/character.b3d b/games/devtest/mods/player_api/models/character.b3d
index 8edbaf637..8edbaf637 100644
--- a/games/minimal/mods/player_api/models/character.b3d
+++ b/games/devtest/mods/player_api/models/character.b3d
Binary files differ
diff --git a/games/minimal/mods/player_api/models/character.blend b/games/devtest/mods/player_api/models/character.blend
index f0ce4117f..f0ce4117f 100644
--- a/games/minimal/mods/player_api/models/character.blend
+++ b/games/devtest/mods/player_api/models/character.blend
Binary files differ
diff --git a/games/minimal/mods/player_api/models/character.png b/games/devtest/mods/player_api/models/character.png
index 05021781e..05021781e 100644
--- a/games/minimal/mods/player_api/models/character.png
+++ b/games/devtest/mods/player_api/models/character.png
Binary files differ
diff --git a/games/minimal/mods/player_api/textures/player.png b/games/devtest/mods/player_api/textures/player.png
index 6d61c4342..6d61c4342 100644
--- a/games/minimal/mods/player_api/textures/player.png
+++ b/games/devtest/mods/player_api/textures/player.png
Binary files differ
diff --git a/games/minimal/mods/player_api/textures/player_back.png b/games/devtest/mods/player_api/textures/player_back.png
index 5e9ef0542..5e9ef0542 100644
--- a/games/minimal/mods/player_api/textures/player_back.png
+++ b/games/devtest/mods/player_api/textures/player_back.png
Binary files differ
diff --git a/games/devtest/mods/soundstuff/init.lua b/games/devtest/mods/soundstuff/init.lua
new file mode 100644
index 000000000..22012ba14
--- /dev/null
+++ b/games/devtest/mods/soundstuff/init.lua
@@ -0,0 +1,170 @@
+local simple_nodes = {
+ footstep = { "Footstep Sound Node", "soundstuff_node_footstep.png" },
+ dig = { "Dig Sound Node", "soundstuff_node_dig.png" },
+ dug = { "Dug Sound Node", "soundstuff_node_dug.png" },
+ place = { "Place Sound Node", "soundstuff_node_place.png" },
+ place_failed = { "Place Failed Sound Node", "soundstuff_node_place_failed.png" },
+}
+
+for k,v in pairs(simple_nodes) do
+ minetest.register_node("soundstuff:"..k, {
+ description = v[1],
+ tiles = {"soundstuff_node_sound.png","soundstuff_node_sound.png",v[2]},
+ groups = {dig_immediate=2},
+ sounds = {
+ [k] = { name = "soundstuff_mono", gain = 1.0 },
+ }
+ })
+end
+
+minetest.register_node("soundstuff:place_failed_attached", {
+ description = "Attached Place Failed Sound Node",
+ tiles = {"soundstuff_node_sound.png", "soundstuff_node_sound.png", "soundstuff_node_place_failed.png"},
+ groups = {dig_immediate=2, attached_node=1},
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = { type = "fixed", fixed = {
+ { -7/16, -7/16, -7/16, 7/16, 7/16, 7/16 },
+ { -0.5, -0.5, -0.5, 0.5, -7/16, 0.5 },
+ }},
+ sounds = {
+ place_failed = { name = "soundstuff_mono", gain = 1.0 },
+ },
+})
+
+minetest.register_node("soundstuff:fall", {
+ description = "Fall Sound Node",
+ tiles = {"soundstuff_node_sound.png", "soundstuff_node_sound.png", "soundstuff_node_fall.png"},
+ groups = {dig_immediate=2, falling_node=1},
+ sounds = {
+ fall = { name = "soundstuff_mono", gain = 1.0 },
+ }
+})
+
+minetest.register_node("soundstuff:fall_attached", {
+ description = "Attached Fall Sound Node",
+ tiles = {"soundstuff_node_sound.png", "soundstuff_node_sound.png", "soundstuff_node_fall.png"},
+ groups = {dig_immediate=2, attached_node=1},
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = { type = "fixed", fixed = {
+ { -7/16, -7/16, -7/16, 7/16, 7/16, 7/16 },
+ { -0.5, -0.5, -0.5, 0.5, -7/16, 0.5 },
+ }},
+ sounds = {
+ fall = { name = "soundstuff_mono", gain = 1.0 },
+ }
+})
+
+minetest.register_node("soundstuff:footstep_liquid", {
+ description = "Liquid Footstep Sound Node",
+ drawtype = "liquid",
+ tiles = {
+ "soundstuff_node_sound.png^[colorize:#0000FF:127",
+ },
+ special_tiles = {
+ {name = "soundstuff_node_sound.png^[colorize:#0000FF:127", backface_culling = false},
+ {name = "soundstuff_node_sound.png^[colorize:#0000FF:127", backface_culling = true},
+ },
+ liquids_pointable = true,
+ liquidtype = "source",
+ liquid_alternative_flowing = "soundstuff:footstep_liquid",
+ liquid_alternative_source = "soundstuff:footstep_liquid",
+ liquid_renewable = false,
+ liquid_range = 0,
+ liquid_viscosity = 0,
+ alpha = 190,
+ paramtype = "light",
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ post_effect_color = {a = 64, r = 0, g = 0, b = 200},
+ sounds = {
+ footstep = { name = "soundstuff_mono", gain = 1.0 },
+ }
+})
+
+minetest.register_node("soundstuff:footstep_climbable", {
+ description = "Climbable Footstep Sound Node",
+ drawtype = "allfaces",
+ tiles = {
+ "soundstuff_node_climbable.png",
+ },
+ alpha = 120,
+ paramtype = "light",
+ sunlight_propagates = true,
+ walkable = false,
+ climbable = true,
+ is_ground_content = false,
+ groups = { dig_immediate = 2 },
+ sounds = {
+ footstep = { name = "soundstuff_mono", gain = 1.0 },
+ }
+})
+
+
+
+minetest.register_craftitem("soundstuff:eat", {
+ description = "Eat Sound Item",
+ inventory_image = "soundstuff_eat.png",
+ on_use = minetest.item_eat(0),
+ sound = {
+ eat = { name = "soundstuff_mono", gain = 1.0 },
+ }
+})
+
+minetest.register_tool("soundstuff:breaks", {
+ description = "Break Sound Tool",
+ inventory_image = "soundstuff_node_dug.png",
+ sound = {
+ breaks = { name = "soundstuff_mono", gain = 1.0 },
+ },
+ tool_capabilities = {
+ max_drop_level=0,
+ groupcaps={
+ cracky={times={[2]=2.00, [3]=1.20}, uses=1, maxlevel=0},
+ choppy={times={[2]=2.00, [3]=1.20}, uses=1, maxlevel=0},
+ snappy={times={[2]=2.00, [3]=1.20}, uses=1, maxlevel=0},
+ crumbly={times={[2]=2.00, [3]=1.20}, uses=1, maxlevel=0},
+ },
+ },
+})
+
+-- Plays sound repeatedly
+minetest.register_node("soundstuff:positional", {
+ description = "Positional Sound Node",
+ on_construct = function(pos)
+ local timer = minetest.get_node_timer(pos)
+ timer:start(0)
+ end,
+ on_timer = function(pos, elapsed)
+ local node = minetest.get_node(pos)
+ local dist = node.param2
+ if dist == 0 then
+ dist = nil
+ end
+ minetest.sound_play("soundstuff_mono", { pos = pos, max_hear_distance = dist })
+ local timer = minetest.get_node_timer(pos)
+ timer:start(0.7)
+ end,
+ on_rightclick = function(pos, node, clicker)
+ node.param2 = (node.param2 + 1) % 64
+ minetest.set_node(pos, node)
+ if clicker and clicker:is_player() then
+ local dist = node.param2
+ local diststr
+ if dist == 0 then
+ diststr = "<default>"
+ else
+ diststr = tostring(dist)
+ end
+ minetest.chat_send_player(clicker:get_player_name(), "max_hear_distance = " .. diststr)
+ end
+ end,
+
+ groups = { dig_immediate = 2 },
+ tiles = { "soundstuff_node_sound.png" },
+})
+
diff --git a/games/devtest/mods/soundstuff/mod.conf b/games/devtest/mods/soundstuff/mod.conf
new file mode 100644
index 000000000..2c631e2da
--- /dev/null
+++ b/games/devtest/mods/soundstuff/mod.conf
@@ -0,0 +1,2 @@
+name = soundstuff
+description = Example items and nodes for testing sound effects
diff --git a/games/devtest/mods/soundstuff/sounds/soundstuff_mono.ogg b/games/devtest/mods/soundstuff/sounds/soundstuff_mono.ogg
new file mode 100644
index 000000000..43428d566
--- /dev/null
+++ b/games/devtest/mods/soundstuff/sounds/soundstuff_mono.ogg
Binary files differ
diff --git a/games/devtest/mods/soundstuff/textures/soundstuff_eat.png b/games/devtest/mods/soundstuff/textures/soundstuff_eat.png
new file mode 100644
index 000000000..aed205422
--- /dev/null
+++ b/games/devtest/mods/soundstuff/textures/soundstuff_eat.png
Binary files differ
diff --git a/games/devtest/mods/soundstuff/textures/soundstuff_node_blank.png b/games/devtest/mods/soundstuff/textures/soundstuff_node_blank.png
new file mode 100644
index 000000000..4dffacc4c
--- /dev/null
+++ b/games/devtest/mods/soundstuff/textures/soundstuff_node_blank.png
Binary files differ
diff --git a/games/devtest/mods/soundstuff/textures/soundstuff_node_climbable.png b/games/devtest/mods/soundstuff/textures/soundstuff_node_climbable.png
new file mode 100644
index 000000000..3888f793c
--- /dev/null
+++ b/games/devtest/mods/soundstuff/textures/soundstuff_node_climbable.png
Binary files differ
diff --git a/games/devtest/mods/soundstuff/textures/soundstuff_node_dig.png b/games/devtest/mods/soundstuff/textures/soundstuff_node_dig.png
new file mode 100644
index 000000000..67ba111d8
--- /dev/null
+++ b/games/devtest/mods/soundstuff/textures/soundstuff_node_dig.png
Binary files differ
diff --git a/games/devtest/mods/soundstuff/textures/soundstuff_node_dug.png b/games/devtest/mods/soundstuff/textures/soundstuff_node_dug.png
new file mode 100644
index 000000000..bab5fbe51
--- /dev/null
+++ b/games/devtest/mods/soundstuff/textures/soundstuff_node_dug.png
Binary files differ
diff --git a/games/devtest/mods/soundstuff/textures/soundstuff_node_fall.png b/games/devtest/mods/soundstuff/textures/soundstuff_node_fall.png
new file mode 100644
index 000000000..17b14f1e4
--- /dev/null
+++ b/games/devtest/mods/soundstuff/textures/soundstuff_node_fall.png
Binary files differ
diff --git a/games/devtest/mods/soundstuff/textures/soundstuff_node_footstep.png b/games/devtest/mods/soundstuff/textures/soundstuff_node_footstep.png
new file mode 100644
index 000000000..6367ae909
--- /dev/null
+++ b/games/devtest/mods/soundstuff/textures/soundstuff_node_footstep.png
Binary files differ
diff --git a/games/devtest/mods/soundstuff/textures/soundstuff_node_place.png b/games/devtest/mods/soundstuff/textures/soundstuff_node_place.png
new file mode 100644
index 000000000..d159ad533
--- /dev/null
+++ b/games/devtest/mods/soundstuff/textures/soundstuff_node_place.png
Binary files differ
diff --git a/games/devtest/mods/soundstuff/textures/soundstuff_node_place_failed.png b/games/devtest/mods/soundstuff/textures/soundstuff_node_place_failed.png
new file mode 100644
index 000000000..780ba946d
--- /dev/null
+++ b/games/devtest/mods/soundstuff/textures/soundstuff_node_place_failed.png
Binary files differ
diff --git a/games/devtest/mods/soundstuff/textures/soundstuff_node_sound.png b/games/devtest/mods/soundstuff/textures/soundstuff_node_sound.png
new file mode 100644
index 000000000..0592a0299
--- /dev/null
+++ b/games/devtest/mods/soundstuff/textures/soundstuff_node_sound.png
Binary files differ
diff --git a/games/minimal/mods/stairs/init.lua b/games/devtest/mods/stairs/init.lua
index 74b7890ee..2701cabab 100644
--- a/games/minimal/mods/stairs/init.lua
+++ b/games/devtest/mods/stairs/init.lua
@@ -18,15 +18,6 @@ function stairs.register_stair(subname, recipeitem, groups, images, description)
},
},
})
-
- minetest.register_craft({
- output = 'stairs:stair_' .. subname .. ' 4',
- recipe = {
- {recipeitem, "", ""},
- {recipeitem, recipeitem, ""},
- {recipeitem, recipeitem, recipeitem},
- },
- })
end
-- Node will be called stairs:slab_<subname>
@@ -47,13 +38,6 @@ function stairs.register_slab(subname, recipeitem, groups, images, description)
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
},
})
-
- minetest.register_craft({
- output = 'stairs:slab_' .. subname .. ' 3',
- recipe = {
- {recipeitem, recipeitem, recipeitem},
- },
- })
end
-- Nodes will be called stairs:{stair,slab}_<subname>
@@ -62,32 +46,20 @@ function stairs.register_stair_and_slab(subname, recipeitem, groups, images, des
stairs.register_slab(subname, recipeitem, groups, images, desc_slab)
end
-stairs.register_stair_and_slab("wood", "default:wood",
- {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- {"default_wood.png"},
- "Wooden stair",
- "Wooden slab")
-
-stairs.register_stair_and_slab("stone", "default:stone",
+stairs.register_stair_and_slab("stone", "basenodes:stone",
{cracky=3},
{"default_stone.png"},
- "Stone stair",
- "Stone slab")
+ "Stone Stair",
+ "Stone Slab")
-stairs.register_stair_and_slab("cobble", "default:cobble",
+stairs.register_stair_and_slab("desert_stone", "basenodes:desert_stone",
{cracky=3},
- {"default_cobble.png"},
- "Cobble stair",
- "Cobble slab")
+ {"default_desert_stone.png"},
+ "Desert Stone Stair",
+ "Desert Stone Slab")
-stairs.register_stair_and_slab("brick", "default:brick",
+stairs.register_stair_and_slab("cobble", "basenodes:cobble",
{cracky=3},
- {"default_brick.png"},
- "Brick stair",
- "Brick slab")
-
-stairs.register_stair_and_slab("sandstone", "default:sandstone",
- {crumbly=2,cracky=2},
- {"default_sandstone.png"},
- "Sandstone stair",
- "Sandstone slab")
+ {"default_cobble.png"},
+ "Cobblestone Stair",
+ "Cobblestone Slab")
diff --git a/games/minimal/mods/stairs/mod.conf b/games/devtest/mods/stairs/mod.conf
index 32bda004a..724bff881 100644
--- a/games/minimal/mods/stairs/mod.conf
+++ b/games/devtest/mods/stairs/mod.conf
@@ -1,3 +1,3 @@
name = stairs
description = Adds stairs and slabs
-depends = default
+depends = basenodes
diff --git a/games/devtest/mods/testentities/armor.lua b/games/devtest/mods/testentities/armor.lua
new file mode 100644
index 000000000..4c30cec8d
--- /dev/null
+++ b/games/devtest/mods/testentities/armor.lua
@@ -0,0 +1,41 @@
+-- Armorball: Test entity for testing armor groups
+-- Rightclick to change armor group
+
+local phasearmor = {
+ [0]={icy=100},
+ [1]={firy=100},
+ [2]={fleshy=100},
+ [3]={immortal=1},
+ [4]={punch_operable=1},
+}
+
+minetest.register_entity("testentities:armorball", {
+ initial_properties = {
+ hp_max = 20,
+ physical = false,
+ collisionbox = {-0.4,-0.4,-0.4, 0.4,0.4,0.4},
+ visual = "sprite",
+ visual_size = {x=1, y=1},
+ textures = {"testentities_armorball.png"},
+ spritediv = {x=1, y=5},
+ initial_sprite_basepos = {x=0, y=0},
+ },
+
+ _phase = 2,
+
+ on_activate = function(self, staticdata)
+ minetest.log("action", "[testentities] armorball.on_activate")
+ self.object:set_armor_groups(phasearmor[self._phase])
+ self.object:set_sprite({x=0, y=self._phase})
+ end,
+
+ on_rightclick = function(self, clicker)
+ -- Change armor group and sprite
+ self._phase = self._phase + 1
+ if self._phase >= 5 then
+ self._phase = 0
+ end
+ self.object:set_sprite({x=0, y=self._phase})
+ self.object:set_armor_groups(phasearmor[self._phase])
+ end,
+})
diff --git a/games/devtest/mods/testentities/callbacks.lua b/games/devtest/mods/testentities/callbacks.lua
new file mode 100644
index 000000000..711079f87
--- /dev/null
+++ b/games/devtest/mods/testentities/callbacks.lua
@@ -0,0 +1,75 @@
+-- Entities that test their callbacks
+
+local message = function(msg)
+ minetest.log("action", msg)
+ minetest.chat_send_all(msg)
+end
+
+local get_object_name = function(obj)
+ local name = "<nil>"
+ if obj then
+ if obj:is_player() then
+ name = obj:get_player_name()
+ else
+ name = "<entity>"
+ end
+ end
+ return name
+end
+
+local spos = function(self)
+ return minetest.pos_to_string(vector.round(self.object:get_pos()))
+end
+
+-- Callback test entity (all callbacks except on_step)
+minetest.register_entity("testentities:callback", {
+ initial_properties = {
+ visual = "upright_sprite",
+ textures = { "testentities_callback.png" },
+ },
+
+ on_activate = function(self, staticdata, dtime_s)
+ message("Callback entity: on_activate! pos="..spos(self).."; dtime_s="..dtime_s)
+ end,
+ on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage)
+ local name = get_object_name(puncher)
+ message(
+ "Callback entity: on_punch! "..
+ "pos="..spos(self).."; puncher="..name.."; "..
+ "time_from_last_punch="..time_from_last_punch.."; "..
+ "tool_capabilities="..tostring(dump(tool_capabilities)).."; "..
+ "dir="..tostring(dump(dir)).."; damage="..damage)
+ end,
+ on_rightclick = function(self, clicker)
+ local name = get_object_name(clicker)
+ message("Callback entity: on_rightclick! pos="..spos(self).."; clicker="..name)
+ end,
+ on_death = function(self, killer)
+ local name = get_object_name(killer)
+ message("Callback entity: on_death! pos="..spos(self).."; killer="..name)
+ end,
+ on_attach_child = function(self, child)
+ local name = get_object_name(child)
+ message("Callback entity: on_attach_child! pos="..spos(self).."; child="..name)
+ end,
+ on_detach_child = function(self, child)
+ local name = get_object_name(child)
+ message("Callback entity: on_detach_child! pos="..spos(self).."; child="..name)
+ end,
+ on_detach = function(self, parent)
+ local name = get_object_name(parent)
+ message("Callback entity: on_detach! pos="..spos(self).."; parent="..name)
+ end,
+ get_staticdata = function(self)
+ message("Callback entity: get_staticdata! pos="..spos(self))
+ end,
+})
+
+-- Only test on_step callback
+minetest.register_entity("testentities:callback_step", {
+ visual = "upright_sprite",
+ textures = { "testentities_callback_step.png" },
+ on_step = function(self, dtime)
+ message("on_step callback entity: on_step! pos="..spos(self).."; dtime="..dtime)
+ end,
+})
diff --git a/games/devtest/mods/testentities/init.lua b/games/devtest/mods/testentities/init.lua
new file mode 100644
index 000000000..df8c72ea7
--- /dev/null
+++ b/games/devtest/mods/testentities/init.lua
@@ -0,0 +1,3 @@
+dofile(minetest.get_modpath("testentities").."/visuals.lua")
+dofile(minetest.get_modpath("testentities").."/armor.lua")
+dofile(minetest.get_modpath("testentities").."/callbacks.lua")
diff --git a/games/devtest/mods/testentities/mod.conf b/games/devtest/mods/testentities/mod.conf
new file mode 100644
index 000000000..7a8cb5a3e
--- /dev/null
+++ b/games/devtest/mods/testentities/mod.conf
@@ -0,0 +1,2 @@
+name = testentities
+description = Example entities for testing
diff --git a/games/devtest/mods/testentities/textures/testentities_armorball.png b/games/devtest/mods/testentities/textures/testentities_armorball.png
new file mode 100644
index 000000000..88147bd1f
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_armorball.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_callback.png b/games/devtest/mods/testentities/textures/testentities_callback.png
new file mode 100644
index 000000000..c4c9066d1
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_callback.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_callback_step.png b/games/devtest/mods/testentities/textures/testentities_callback_step.png
new file mode 100644
index 000000000..b67506a97
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_callback_step.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_cube1.png b/games/devtest/mods/testentities/textures/testentities_cube1.png
new file mode 100644
index 000000000..c667e425f
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_cube1.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_cube2.png b/games/devtest/mods/testentities/textures/testentities_cube2.png
new file mode 100644
index 000000000..481823420
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_cube2.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_cube3.png b/games/devtest/mods/testentities/textures/testentities_cube3.png
new file mode 100644
index 000000000..03b5daa15
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_cube3.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_cube4.png b/games/devtest/mods/testentities/textures/testentities_cube4.png
new file mode 100644
index 000000000..639204896
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_cube4.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_cube5.png b/games/devtest/mods/testentities/textures/testentities_cube5.png
new file mode 100644
index 000000000..d8acdf0b6
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_cube5.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_cube6.png b/games/devtest/mods/testentities/textures/testentities_cube6.png
new file mode 100644
index 000000000..5f81a64d9
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_cube6.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_dungeon_master.png b/games/devtest/mods/testentities/textures/testentities_dungeon_master.png
new file mode 100644
index 000000000..1e3107746
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_dungeon_master.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_sprite.png b/games/devtest/mods/testentities/textures/testentities_sprite.png
new file mode 100644
index 000000000..a4b019699
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_sprite.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_upright_sprite1.png b/games/devtest/mods/testentities/textures/testentities_upright_sprite1.png
new file mode 100644
index 000000000..6242511df
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_upright_sprite1.png
Binary files differ
diff --git a/games/devtest/mods/testentities/textures/testentities_upright_sprite2.png b/games/devtest/mods/testentities/textures/testentities_upright_sprite2.png
new file mode 100644
index 000000000..a79a760e3
--- /dev/null
+++ b/games/devtest/mods/testentities/textures/testentities_upright_sprite2.png
Binary files differ
diff --git a/games/devtest/mods/testentities/visuals.lua b/games/devtest/mods/testentities/visuals.lua
new file mode 100644
index 000000000..83f361f16
--- /dev/null
+++ b/games/devtest/mods/testentities/visuals.lua
@@ -0,0 +1,84 @@
+-- Minimal test entities to test visuals
+
+minetest.register_entity("testentities:sprite", {
+ initial_properties = {
+ visual = "sprite",
+ textures = { "testentities_sprite.png" },
+ },
+})
+
+minetest.register_entity("testentities:upright_sprite", {
+ initial_properties = {
+ visual = "upright_sprite",
+ textures = {
+ "testentities_upright_sprite1.png",
+ "testentities_upright_sprite2.png",
+ },
+ },
+})
+
+minetest.register_entity("testentities:cube", {
+ initial_properties = {
+ visual = "cube",
+ textures = {
+ "testentities_cube1.png",
+ "testentities_cube2.png",
+ "testentities_cube3.png",
+ "testentities_cube4.png",
+ "testentities_cube5.png",
+ "testentities_cube6.png",
+ },
+ },
+})
+
+minetest.register_entity("testentities:item", {
+ initial_properties = {
+ visual = "item",
+ wield_item = "testnodes:normal",
+ },
+})
+
+minetest.register_entity("testentities:wielditem", {
+ initial_properties = {
+ visual = "wielditem",
+ wield_item = "testnodes:normal",
+ },
+})
+
+minetest.register_entity("testentities:mesh", {
+ initial_properties = {
+ visual = "mesh",
+ mesh = "testnodes_pyramid.obj",
+ textures = {
+ "testnodes_mesh_stripes2.png"
+ },
+ },
+})
+
+minetest.register_entity("testentities:mesh_unshaded", {
+ initial_properties = {
+ visual = "mesh",
+ mesh = "testnodes_pyramid.obj",
+ textures = {
+ "testnodes_mesh_stripes2.png"
+ },
+ shaded = false,
+ },
+})
+
+-- Advanced visual tests
+
+-- A test entity for testing animated and yaw-modulated sprites
+minetest.register_entity("testentities:yawsprite", {
+ initial_properties = {
+ selectionbox = {-0.3, -0.5, -0.3, 0.3, 0.3, 0.3},
+ visual = "sprite",
+ visual_size = {x=0.6666, y=1},
+ textures = {"testentities_dungeon_master.png^[makealpha:128,0,0^[makealpha:128,128,0"},
+ spritediv = {x=6, y=5},
+ initial_sprite_basepos = {x=0, y=0},
+ },
+ on_activate = function(self, staticdata)
+ self.object:set_sprite({x=0, y=0}, 1, 0, true)
+ end,
+})
diff --git a/games/devtest/mods/testfood/init.lua b/games/devtest/mods/testfood/init.lua
new file mode 100644
index 000000000..a6236ff68
--- /dev/null
+++ b/games/devtest/mods/testfood/init.lua
@@ -0,0 +1,24 @@
+local S = minetest.get_translator("testfood")
+
+minetest.register_craftitem("testfood:good1", {
+ description = S("Good Food (+1)"),
+ inventory_image = "testfood_good.png",
+ on_use = minetest.item_eat(1),
+})
+minetest.register_craftitem("testfood:good5", {
+ description = S("Good Food (+5)"),
+ inventory_image = "testfood_good2.png",
+ on_use = minetest.item_eat(5),
+})
+
+minetest.register_craftitem("testfood:bad1", {
+ description = S("Bad Food (-1)"),
+ inventory_image = "testfood_bad.png",
+ on_use = minetest.item_eat(-1),
+})
+minetest.register_craftitem("testfood:bad5", {
+ description = S("Bad Food (-5)"),
+ inventory_image = "testfood_bad2.png",
+ on_use = minetest.item_eat(-5),
+})
+
diff --git a/games/devtest/mods/testfood/mod.conf b/games/devtest/mods/testfood/mod.conf
new file mode 100644
index 000000000..7bff21b6e
--- /dev/null
+++ b/games/devtest/mods/testfood/mod.conf
@@ -0,0 +1,2 @@
+name = testfood
+description = For testing food items
diff --git a/games/devtest/mods/testfood/textures/testfood_bad.png b/games/devtest/mods/testfood/textures/testfood_bad.png
new file mode 100644
index 000000000..6e9251440
--- /dev/null
+++ b/games/devtest/mods/testfood/textures/testfood_bad.png
Binary files differ
diff --git a/games/devtest/mods/testfood/textures/testfood_bad2.png b/games/devtest/mods/testfood/textures/testfood_bad2.png
new file mode 100644
index 000000000..22b567890
--- /dev/null
+++ b/games/devtest/mods/testfood/textures/testfood_bad2.png
Binary files differ
diff --git a/games/devtest/mods/testfood/textures/testfood_good.png b/games/devtest/mods/testfood/textures/testfood_good.png
new file mode 100644
index 000000000..31df7f5dd
--- /dev/null
+++ b/games/devtest/mods/testfood/textures/testfood_good.png
Binary files differ
diff --git a/games/devtest/mods/testfood/textures/testfood_good2.png b/games/devtest/mods/testfood/textures/testfood_good2.png
new file mode 100644
index 000000000..e43dda209
--- /dev/null
+++ b/games/devtest/mods/testfood/textures/testfood_good2.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/callbacks.lua b/games/devtest/mods/testformspec/callbacks.lua
new file mode 100644
index 000000000..559380580
--- /dev/null
+++ b/games/devtest/mods/testformspec/callbacks.lua
@@ -0,0 +1,51 @@
+local callback_test = 0
+
+local out = function(player, formname, fields, number)
+ local snum = ""
+ if number then
+ snum = " "..number
+ end
+ local msg = "Formspec callback"..snum..": player="..player:get_player_name()..", formname=\""..tostring(formname).."\", fields="..dump(fields)
+ minetest.chat_send_player(player:get_player_name(), msg)
+ minetest.log("action", msg)
+end
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ if callback_test == 1 then
+ out(player, formname, fields)
+ elseif callback_test == 2 then
+ out(player, formname, fields, 1)
+ end
+end)
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ if callback_test == 2 then
+ out(player, formname, fields, 2)
+ return true -- Disable the first callback
+ end
+end)
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ if callback_test == 2 then
+ out(player, formname, fields, 3)
+ end
+end)
+
+minetest.register_chatcommand("test_formspec_callbacks", {
+ params = "[ 0 | 1 | 2 ]",
+ description = "Test: Change formspec callbacks testing mode",
+ func = function(name, param)
+ local mode = tonumber(param)
+ if not mode then
+ callback_test = (callback_test + 1 % 3)
+ else
+ callback_test = mode
+ end
+ if callback_test == 1 then
+ minetest.chat_send_player(name, "Formspec callback test mode 1 enabled: Logging only")
+ elseif callback_test == 2 then
+ minetest.chat_send_player(name, "Formspec callback test mode 2 enabled: Three callbacks, disable pre-registered callbacks")
+ else
+ callback_test = 0
+ minetest.chat_send_player(name, "Formspec callback test disabled!")
+ end
+ end
+})
diff --git a/games/devtest/mods/testformspec/dummy_items.lua b/games/devtest/mods/testformspec/dummy_items.lua
new file mode 100644
index 000000000..2037ae9cf
--- /dev/null
+++ b/games/devtest/mods/testformspec/dummy_items.lua
@@ -0,0 +1,14 @@
+-- This code adds dummy items that are supposed to be used in formspecs
+-- for testing item_image formspec elements.
+
+minetest.register_node("testformspec:node", {
+ description = "Formspec Test Node",
+ tiles = { "testformspec_node.png" },
+ groups = { dig_immediate = 3, dummy = 1 },
+})
+
+minetest.register_craftitem("testformspec:item", {
+ description = "Formspec Test Item",
+ inventory_image = "testformspec_item.png",
+ groups = { dummy = 1 },
+})
diff --git a/games/devtest/mods/testformspec/formspec.lua b/games/devtest/mods/testformspec/formspec.lua
new file mode 100644
index 000000000..08c1b6dc0
--- /dev/null
+++ b/games/devtest/mods/testformspec/formspec.lua
@@ -0,0 +1,381 @@
+local color = minetest.colorize
+
+local clip_fs = [[
+ style_type[label,button,image_button,item_image_button,
+ tabheader,scrollbar,table,animated_image
+ ,field,textarea,checkbox,dropdown;noclip=%c]
+
+ label[0,0;A clipping test]
+ button[0,1;3,0.8;clip_button;A clipping test]
+ image_button[0,2;3,0.8;testformspec_button_image.png;clip_image_button;A clipping test]
+ item_image_button[0,3;3,0.8;testformspec:item;clip_item_image_button;A clipping test]
+ tabheader[0,4.7;3,0.63;clip_tabheader;Clip,Test,Text,Tabs;1;false;false]
+ field[0,5;3,0.8;clip_field;Title;]
+ textarea[0,6;3,1;clip_textarea;Title;]
+ checkbox[0,7.5;clip_checkbox;This is a test;true]
+ dropdown[0,8;3,0.8;clip_dropdown;Select An Item,One,Two,Three,Four,Five;1]
+ scrollbar[0,9;3,0.8;horizontal;clip_scrollbar;3]
+ tablecolumns[text;text]
+ table[0,10;3,1;clip_table;one,two,three,four;1]
+ animated_image[-0.5,11;4.5,1;clip_animated_image;testformspec_animation.png;4;100]
+]]
+
+local tabheaders_fs = [[
+ tabheader[0,0;10,0.63;tabs_opaque;Opaque,Without,Border;1;false;false]
+ tabheader[0,1;10,0.63;tabs_opaque_border;Opaque,With,Border;1;false;true]
+ tabheader[0,2;10,0.63;tabs_transparent;Transparent,Without,Border;1;true;false]
+ tabheader[0,3;10,0.63;tabs_transparent_border;Transparent,With,Border;1;true;true]
+ tabheader[0,4;tabs_default;Default,Tabs;1]
+ tabheader[0,6;10,0.5;tabs_size1;Height=0.5;1;false;false]
+ tabheader[2,6;10,0.75;tabs_size1;Height=0.75;1;false;false]
+ tabheader[4,6;10,1;tabs_size2;Height=1;1;false;false]
+ tabheader[6,6;10,1.25;tabs_size2;Height=1.25;1;false;false]
+ tabheader[8,6;10,1.5;tabs_size2;Height=1.5;1;false;false]
+]]
+
+local hypertext_basic = [[
+<bigger>Normal test</bigger>
+This is a normal text.
+
+<bigger><mono>style</mono> test</bigger>
+<style color=#FFFF00>Yellow text.</style> <style color=#FF0000>Red text.</style>
+<style size=24>Size 24.</style> <style size=16>Size 16</style>. <style size=12>Size 12.</style>
+<style font=normal>Normal font.</style> <style font=mono>Mono font.</style>
+
+<bigger>Tag test</bigger>
+<normal>normal</normal>
+<mono>mono</mono>
+<b>bold</b>
+<i>italic</i>
+<u>underlined</u>
+<big>big</big>
+<bigger>bigger</bigger>
+<left>left</left>
+<center>center</center>
+<right>right</right>
+<justify>justify. Here comes a blind text: Lorem testum dolor sit amet consecutor celeron fiftifahivus e shadoninia e smalus jokus anrus relsocutoti rubenwardus. Erasputinus hara holisti dominus wusi. Grumarinsti erltusmuate ol fortitusti fla flo, blani burki e sfani fahif. Ultae ratii, e megus gigae don anonimus. Grinus dimondus krockus e nore. Endus finalus nowus comus endus o blindus tekstus.</justify>
+
+<bigger>Custom tag test</bigger>
+<tag name=t_green color=green>
+<tag name=t_hover hovercolor=yellow>
+<tag name=t_size size=24>
+<tag name=t_mono font=mono>
+<tag name=t_multi color=green font=mono size=24>
+<t_green>color=green</t_green>
+Action: <action name=color><t_green>color=green</t_green></action>
+Action: <action name=hovercolor><t_hover>hovercolor=yellow</t_hover></action>
+<t_size>size=24</t_size>
+<t_mono>font=mono</t_mono>
+<t_multi>color=green font=mono size=24</t_multi>
+
+<bigger><mono>action</mono> test</bigger>
+<action name=action_test>action</action>
+
+<bigger><mono>img</mono> test</bigger>
+Normal:
+<img name=testformspec_item.png>
+<mono>width=48 height=48</mono>:
+<img name=testformspec_item.png width=48 height=48>
+<mono>float=left</mono>:
+<img name=testformspec_item.png float=left>
+<mono>float=right</mono>:
+<img name=testformspec_item.png float=right>
+
+<bigger><mono>item</mono> test</bigger>
+Normal:
+<item name=testformspec:node>
+<mono>width=48 height=48</mono>
+<item name=testformspec:node width=48 height=48>
+<mono>angle=30,0,0</mono>:
+<item name=testformspec:node angle=30,0,0>
+<mono>angle=0,30,0</mono>:
+<item name=testformspec:node angle=0,30,0>
+<mono>angle=0,0,30</mono>:
+<item name=testformspec:node angle=0,0,30>
+<mono>rotate=yes</mono>:
+<item name=testformspec:node rotate=yes>
+<mono>rotate=100,0,0</mono>:
+<item name=testformspec:node rotate=100,0,0>
+<mono>rotate=0,100,0</mono>:
+<item name=testformspec:node rotate=0,100,0>
+<mono>rotate=0,0,100</mono>:
+<item name=testformspec:node rotate=0,0,100>
+<mono>rotate=50,75,100</mono>:
+<item name=testformspec:node rotate=50,75,100>
+<mono>angle=-30,-45,90 rotate=100,150,-50</mono>:
+<item name=testformspec:node angle=-30,-45,90 rotate=100,150,-50>]]
+
+local hypertext_global = [[
+<global background=gray margin=20 valign=bottom halign=right color=pink hovercolor=purple size=12 font=mono>
+This is a test of the global tag. The parameters are:
+background=gray margin=20 valign=bottom halign=right color=pink hovercolor=purple size=12 font=mono
+<action name=global>action</action>]]
+
+local hypertext_fs = "hypertext[0,0;11,9;hypertext;"..minetest.formspec_escape(hypertext_basic).."]"..
+ "hypertext[0,9.5;11,2.5;hypertext;"..minetest.formspec_escape(hypertext_global).."]"
+
+local style_fs = [[
+ style[one_btn1;bgcolor=red;textcolor=yellow;bgcolor_hovered=orange;
+ bgcolor_pressed=purple]
+ button[0,0;2.5,0.8;one_btn1;Button]
+
+ style[one_btn2;border=false;textcolor=cyan] ]]..
+ "button[0,1.05;2.5,0.8;one_btn2;Text " .. color("#FF0", "Yellow") .. [[]
+
+ style[one_btn3;bgimg=testformspec_button_image.png;bgimg_hovered=testformspec_hovered.png;
+ bgimg_pressed=testformspec_pressed.png]
+ button[0,2.1;1,1;one_btn3;Border]
+
+ style[one_btn4;bgimg=testformspec_button_image.png;bgimg_hovered=testformspec_hovered.png;
+ bgimg_pressed=testformspec_pressed.png;border=false]
+ button[1.25,2.1;1,1;one_btn4;NoBor]
+
+ style[one_btn5;bgimg=testformspec_button_image.png;bgimg_hovered=testformspec_hovered.png;
+ bgimg_pressed=testformspec_pressed.png;border=false;alpha=false]
+ button[0,3.35;1,1;one_btn5;Alph]
+
+ style[one_btn6;border=true]
+ image_button[0,4.6;1,1;testformspec_button_image.png;one_btn6;Border]
+
+ style[one_btn7;border=false]
+ image_button[1.25,4.6;1,1;testformspec_button_image.png;one_btn7;NoBor]
+
+ style[one_btn8;border=false]
+ image_button[0,5.85;1,1;testformspec_button_image.png;one_btn8;Border;false;true;testformspec_pressed.png]
+
+ style[one_btn9;border=true]
+ image_button[1.25,5.85;1,1;testformspec_button_image.png;one_btn9;NoBor;false;false;testformspec_pressed.png]
+
+ style[one_btn10;alpha=false]
+ image_button[0,7.1;1,1;testformspec_button_image.png;one_btn10;NoAlpha]
+
+ style[one_btn11;alpha=true]
+ image_button[1.25,7.1;1,1;testformspec_button_image.png;one_btn11;Alpha]
+
+ style[one_btn12;border=true]
+ item_image_button[0,8.35;1,1;testformspec:item;one_btn12;Border]
+
+ style[one_btn13;border=false]
+ item_image_button[1.25,8.35;1,1;testformspec:item;one_btn13;NoBor]
+
+ style[one_btn14;border=false;bgimg=testformspec_bg.png;fgimg=testformspec_button_image.png]
+ style[one_btn14:hovered;bgimg=testformspec_bg_hovered.png;fgimg=testformspec_hovered.png;textcolor=yellow]
+ style[one_btn14:pressed;bgimg=testformspec_bg_pressed.png;fgimg=testformspec_pressed.png;textcolor=blue]
+ style[one_btn14:hovered+pressed;textcolor=purple]
+ image_button[0,9.6;1,1;testformspec_button_image.png;one_btn14;Bg]
+
+ style[one_btn15;border=false;bgimg=testformspec_bg.png;bgimg_hovered=testformspec_bg_hovered.png;bgimg_pressed=testformspec_bg_pressed.png]
+ item_image_button[1.25,9.6;1,1;testformspec:item;one_btn15;Bg]
+
+ style[one_btn16;border=false;bgimg=testformspec_bg_9slice.png;bgimg_hovered=testformspec_bg_9slice_hovered.png;bgimg_pressed=testformspec_bg_9slice_pressed.png;bgimg_middle=4,6]
+ button[2.5,9.6;2,1;one_btn16;9-Slice Bg]
+
+
+
+ container[2.75,0]
+
+ style[one_tb1;textcolor=Yellow]
+ tabheader[0,3;2.5,0.63;one_tb1;Yellow,Text,Tabs;1;false;false]
+
+ style[one_f1;textcolor=yellow]
+ field[0,4.25;2.5,0.8;one_f1;Field One;Yellow Text]
+
+ style[one_f2;border=false;textcolor=cyan]
+ field[0,5.75;2.5,0.8;one_f2;Field Two;Borderless Cyan Text]
+
+ style[one_f3;textcolor=yellow]
+ textarea[0,7.025;2.5,0.8;one_f3;Label;]] ..
+ minetest.formspec_escape("Yellow Text\nLine two") .. [[ ]
+
+ style[one_f4;border=false;textcolor=cyan]
+ textarea[0,8.324999999999999;2.5,0.8;one_f4;Label;]] ..
+ minetest.formspec_escape("Borderless Cyan Text\nLine two") .. [[ ]
+
+ container_end[]
+]]
+
+local scroll_fs =
+ "button[8.5,1;4,1;outside;Outside of container]"..
+ "box[1,1;8,6;#00aa]"..
+ "scroll_container[1,1;8,6;scrbar;vertical]"..
+ "button[0,1;1,1;lorem;Lorem]"..
+ "button[0,10;1,1;ipsum;Ipsum]"..
+ "pwdfield[2,2;1,1;lorem2;Lorem]"..
+ "list[current_player;main;4,4;1,5;]"..
+ "box[2,5;3,2;#ffff00]"..
+ "image[1,10;3,2;testformspec_item.png]"..
+ "image[3,1;testformspec_item.png]"..
+ "item_image[2,6;3,2;testformspec:node]"..
+ "label[2,15;bla Bli\nfoo bar]"..
+ "item_image_button[2,3;1,1;testformspec:node;itemimagebutton;ItemImageButton]"..
+ "tooltip[0,11;3,2;Buz;#f00;#000]"..
+ "box[0,11;3,2;#00ff00]"..
+ "hypertext[3,13;3,3;;" .. hypertext_basic .. "]" ..
+ "container[0,18]"..
+ "box[1,2;3,2;#0a0a]"..
+ "scroll_container[1,2;3,2;scrbar2;horizontal;0.06]"..
+ "button[0,0;6,1;butnest;Nest]"..
+ "label[10,0.5;nest]"..
+ "scroll_container_end[]"..
+ "scrollbar[1,0;3.5,0.3;horizontal;scrbar2;0]"..
+ "container_end[]"..
+ "dropdown[0,6;2;hmdrpdwn;apple,bulb;1]"..
+ "image_button[0,4;2,2;testformspec_button_image.png;imagebutton;bbbbtt;false;true;testformspec_pressed.png]"..
+ "box[1,22.5;4,1;#a00a]"..
+ "scroll_container_end[]"..
+ "scrollbaroptions[max=170]".. -- lowest seen pos is: 0.1*170+6=23 (factor*max+height)
+ "scrollbar[7.5,0;0.3,4;vertical;scrbar;0]"..
+ "scrollbar[8,0;0.3,4;vertical;scrbarhmmm;0]"..
+ "dropdown[0,6;2;hmdrpdwnnn;Outside,of,container;1]"
+
+--style_type[label;textcolor=green]
+--label[0,0;Green]
+--style_type[label;textcolor=blue]
+--label[0,1;Blue]
+--style_type[label;textcolor=;border=true]
+--label[1.2,0;Border]
+--style_type[label;border=true;bgcolor=red]
+--label[1.2,1;Background]
+--style_type[label;border=;bgcolor=]
+--label[0.75,2;Reset]
+
+
+local pages = {
+ -- Real Coordinates
+ [[
+ formspec_version[3]
+ size[12,13]
+ image_button[0,0;1,1;logo.png;rc_image_button_1x1;1x1]
+ image_button[1,0;2,2;logo.png;rc_image_button_2x2;2x2]
+ button[0,2;1,1;rc_button_1x1;1x1]
+ button[1,2;2,2;rc_button_2x2;2x2]
+ item_image[0,4;1,1;air]
+ item_image[1,4;2,2;air]
+ item_image_button[0,6;1,1;testformspec:node;rc_item_image_button_1x1;1x1]
+ item_image_button[1,6;2,2;testformspec:node;rc_item_image_button_2x2;2x2]
+ field[3,.5;3,.5;rc_field;Field;text]
+ pwdfield[6,.5;3,1;rc_pwdfield;Password Field]
+ field[3,1;3,1;;Read-Only Field;text]
+ textarea[3,2;3,.5;rc_textarea_small;Textarea;text]
+ textarea[6,2;3,2;rc_textarea_big;Textarea;text\nmore text]
+ textarea[3,3;3,1;;Read-Only Textarea;text\nmore text]
+ textlist[3,4;3,2;rc_textlist;Textlist,Perfect Coordinates;1;false]
+ tableoptions[highlight=#ABCDEF75;background=#00000055;border=false]
+ table[6,4;3,2;rc_table;Table,Cool Stuff,Foo,Bar;2]
+ dropdown[3,6;3,1;rc_dropdown_small;This,is,a,dropdown;1]
+ dropdown[6,6;3,2;rc_dropdown_big;I,am,a,bigger,dropdown;5]
+ image[0,8;3,2;ignore.png]
+ box[3,7;3,1;#00A3FF]
+ checkbox[3,8;rc_checkbox_1;Check me!;false]
+ checkbox[3,9;rc_checkbox_2;Uncheck me now!;true]
+ scrollbar[0,11.5;11.5,.5;horizontal;rc_scrollbar_horizontal;500]
+ scrollbar[11.5,0;.5,11.5;vertical;rc_scrollbar_vertical;0]
+ list[current_player;main;6,8;3,2;1]
+ button[9,0;2.5,1;rc_empty_button_1;]
+ button[9,1;2.5,1;rc_empty_button_2;]
+ button[9,2;2.5,1;rc_empty_button_3;] ]]..
+ "label[9,0.5;This is a label.\nLine\nLine\nLine\nEnd]"..
+ [[button[9,3;1,1;rc_empty_button_4;]
+ vertlabel[9,4;VERT]
+ label[10,3;HORIZ]
+ tabheader[8,0;6,0.65;rc_tabheader;Tab 1,Tab 2,Tab 3,Secrets;1;false;false]
+ ]],
+ -- Style
+
+ "formspec_version[3]size[12,13]" ..
+ ("label[0.375,0.375;Styled - %s %s]"):format(
+ color("#F00", "red text"),
+ color("#77FF00CC", "green text")) ..
+ "label[6.375,0.375;Unstyled]" ..
+ "box[0,0.75;12,0.1;#999]" ..
+ "box[6,0.85;0.1,11.15;#999]" ..
+ "container[0.375,1.225]" ..
+ style_fs ..
+ "container_end[]container[6.375,1.225]" ..
+ style_fs:gsub("one_", "two_"):gsub("style%[[^%]]+%]", ""):gsub("style_type%[[^%]]+%]", "") ..
+ "container_end[]",
+
+ -- Noclip
+ "formspec_version[3]size[12,13]" ..
+ "label[0.1,0.5;Clip]" ..
+ "container[-2.5,1]" .. clip_fs:gsub("%%c", "false") .. "container_end[]" ..
+ "label[11,0.5;Noclip]" ..
+ "container[11.5,1]" .. clip_fs:gsub("%%c", "true") .. "container_end[]",
+
+ -- Hypertext
+ "size[12,13]real_coordinates[true]" ..
+ "container[0.5,0.5]" .. hypertext_fs .. "container_end[]",
+
+ -- Tabheaders
+ "size[12,13]real_coordinates[true]" ..
+ "container[0.5,1.5]" .. tabheaders_fs .. "container_end[]",
+
+ -- Animation
+ [[
+ formspec_version[3]
+ size[12,13]
+ animated_image[0.5,0.5;1,1;;testformspec_animation.png;4;100]
+ animated_image[0.5,1.75;1,1;;testformspec_animation.jpg;4;100]
+ animated_image[1.75,0.5;1,1;;testformspec_animation.png;100;100]
+ animated_image[3,0.5;1,1;ani_img_1;testformspec_animation.png;4;1000]
+ button[4.25,0.5;1,1;ani_btn_1;Current
+Number]
+ animated_image[3,1.75;1,1;ani_img_2;testformspec_animation.png;4;1000;2]
+ button[4.25,1.75;1,1;ani_btn_2;Current
+Number]
+ animated_image[3,3;1,1;;testformspec_animation.png;4;0]
+ animated_image[3,4.25;1,1;;testformspec_animation.png;4;0;3]
+ 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]
+ ]],
+
+ -- Scroll containers
+ "formspec_version[3]size[12,13]" ..
+ scroll_fs,
+}
+
+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,Anim,ScrollC;" .. page_id .. ";false;false]"
+
+ minetest.show_formspec(pname, "testformspec:formspec", fs)
+end
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ if formname ~= "testformspec:formspec" then
+ return false
+ end
+
+
+ if fields.maintabs then
+ show_test_formspec(player:get_player_name(), tonumber(fields.maintabs))
+ return true
+ end
+
+ if fields.ani_img_1 and fields.ani_btn_1 then
+ minetest.chat_send_player(player:get_player_name(), "ani_img_1 = " .. tostring(fields.ani_img_1))
+ return true
+ elseif fields.ani_img_2 and fields.ani_btn_2 then
+ minetest.chat_send_player(player:get_player_name(), "ani_img_2 = " .. tostring(fields.ani_img_2))
+ return true
+ end
+
+ if fields.hypertext then
+ minetest.chat_send_player(player:get_player_name(), "Hypertext action received: " .. tostring(fields.hypertext))
+ return true
+ end
+end)
+
+minetest.register_chatcommand("test_formspec", {
+ params = "",
+ description = "Open the test formspec",
+ func = function(name)
+ if not minetest.get_player_by_name(name) then
+ return false, "You need to be online!"
+ end
+
+ show_test_formspec(name)
+ return true
+ end,
+})
diff --git a/games/devtest/mods/testformspec/init.lua b/games/devtest/mods/testformspec/init.lua
new file mode 100644
index 000000000..23b565f08
--- /dev/null
+++ b/games/devtest/mods/testformspec/init.lua
@@ -0,0 +1,3 @@
+dofile(minetest.get_modpath("testformspec").."/dummy_items.lua")
+dofile(minetest.get_modpath("testformspec").."/formspec.lua")
+dofile(minetest.get_modpath("testformspec").."/callbacks.lua")
diff --git a/games/devtest/mods/testformspec/mod.conf b/games/devtest/mods/testformspec/mod.conf
new file mode 100644
index 000000000..00eac307a
--- /dev/null
+++ b/games/devtest/mods/testformspec/mod.conf
@@ -0,0 +1,2 @@
+name = testformspec
+description = Contains an example formspec to test all the features of formspecs
diff --git a/games/minimal/mods/test/textures/test_animation.jpg b/games/devtest/mods/testformspec/textures/testformspec_animation.jpg
index b98ca2677..b98ca2677 100644
--- a/games/minimal/mods/test/textures/test_animation.jpg
+++ b/games/devtest/mods/testformspec/textures/testformspec_animation.jpg
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_animation.png b/games/devtest/mods/testformspec/textures/testformspec_animation.png
new file mode 100644
index 000000000..b972e5dbb
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_animation.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_bg.png b/games/devtest/mods/testformspec/textures/testformspec_bg.png
new file mode 100644
index 000000000..cd1e50900
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_bg.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_bg_9slice.png b/games/devtest/mods/testformspec/textures/testformspec_bg_9slice.png
new file mode 100644
index 000000000..34433ac82
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_bg_9slice.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_bg_9slice_hovered.png b/games/devtest/mods/testformspec/textures/testformspec_bg_9slice_hovered.png
new file mode 100644
index 000000000..01c2dc777
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_bg_9slice_hovered.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_bg_9slice_pressed.png b/games/devtest/mods/testformspec/textures/testformspec_bg_9slice_pressed.png
new file mode 100644
index 000000000..0cbac7536
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_bg_9slice_pressed.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_bg_hovered.png b/games/devtest/mods/testformspec/textures/testformspec_bg_hovered.png
new file mode 100644
index 000000000..3ebbb988c
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_bg_hovered.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_bg_pressed.png b/games/devtest/mods/testformspec/textures/testformspec_bg_pressed.png
new file mode 100644
index 000000000..2fb5fc21e
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_bg_pressed.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_button_image.png b/games/devtest/mods/testformspec/textures/testformspec_button_image.png
new file mode 100644
index 000000000..75c438a9a
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_button_image.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_hovered.png b/games/devtest/mods/testformspec/textures/testformspec_hovered.png
new file mode 100644
index 000000000..3ccad30a2
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_hovered.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_item.png b/games/devtest/mods/testformspec/textures/testformspec_item.png
new file mode 100644
index 000000000..4fd823b55
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_item.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_node.png b/games/devtest/mods/testformspec/textures/testformspec_node.png
new file mode 100644
index 000000000..c107f28a3
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_node.png
Binary files differ
diff --git a/games/devtest/mods/testformspec/textures/testformspec_pressed.png b/games/devtest/mods/testformspec/textures/testformspec_pressed.png
new file mode 100644
index 000000000..45c504f27
--- /dev/null
+++ b/games/devtest/mods/testformspec/textures/testformspec_pressed.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/README.md b/games/devtest/mods/testnodes/README.md
new file mode 100644
index 000000000..13ed972c0
--- /dev/null
+++ b/games/devtest/mods/testnodes/README.md
@@ -0,0 +1,11 @@
+# Test Nodes
+
+This mod contains a bunch of basic nodes to test development stuff.
+Most nodes are kept as minimal as possible in order to show off one particular feature of the engine, to make testing stuff easier.
+
+This mod includes tests for:
+
+* drawtypes
+* paramtype2's
+* node properties such as damage, drowning, falling, etc.
+* other random stuff
diff --git a/games/devtest/mods/testnodes/drawtypes.lua b/games/devtest/mods/testnodes/drawtypes.lua
new file mode 100644
index 000000000..6bf57fa37
--- /dev/null
+++ b/games/devtest/mods/testnodes/drawtypes.lua
@@ -0,0 +1,528 @@
+--[[ Drawtype Test: This file tests out and provides examples for
+all drawtypes in Minetest. It is attempted to keep the node
+definitions as simple and minimal as possible to keep
+side-effects to a minimum.
+
+How to read the node definitions:
+There are two parts which are separated by 2 newlines:
+The first part contains the things that are more or less essential
+for defining the drawtype (except description, which is
+at the top for readability).
+The second part (after the 2 newlines) contains stuff that are
+unrelated to the drawtype, stuff that is mostly there to make
+testing this node easier and more convenient.
+]]
+
+local S = minetest.get_translator("testnodes")
+
+-- If set to true, will show an inventory image for nodes that have no inventory image as of Minetest 5.1.0.
+-- This is due to <https://github.com/minetest/minetest/issues/9209>.
+-- This is only added to make the items more visible to avoid confusion, but you will no longer see
+-- the default inventory images for these items. When you want to test the default inventory image of drawtypes,
+-- this should be turned off.
+-- TODO: Remove support for fallback inventory image as soon #9209 is fixed.
+local SHOW_FALLBACK_IMAGE = minetest.settings:get_bool("testnodes_show_fallback_image", false)
+
+local fallback_image = function(img)
+ if SHOW_FALLBACK_IMAGE then
+ return img
+ else
+ return nil
+ end
+end
+
+-- A regular cube
+minetest.register_node("testnodes:normal", {
+ description = S("Normal Drawtype Test Node"),
+ drawtype = "normal",
+ tiles = { "testnodes_normal.png" },
+
+ groups = { dig_immediate = 3 },
+})
+
+-- Standard glasslike node
+minetest.register_node("testnodes:glasslike", {
+ description = S("Glasslike Drawtype Test Node"),
+ drawtype = "glasslike",
+ paramtype = "light",
+ tiles = { "testnodes_glasslike.png" },
+
+ groups = { dig_immediate = 3 },
+})
+
+-- Glasslike framed with the two textures (normal and "detail")
+minetest.register_node("testnodes:glasslike_framed", {
+ description = S("Glasslike Framed Drawtype Test Node"),
+ drawtype = "glasslike_framed",
+ paramtype = "light",
+ tiles = {
+ "testnodes_glasslike_framed.png",
+ "testnodes_glasslike_detail.png",
+ },
+
+
+ sunlight_propagates = true,
+ groups = { dig_immediate = 3 },
+})
+
+-- Like the one above, but without the "detail" texture (texture 2).
+-- This node was added to see how the engine behaves when the "detail" texture
+-- is missing.
+minetest.register_node("testnodes:glasslike_framed_no_detail", {
+ description = S("Glasslike Framed without Detail Drawtype Test Node"),
+ drawtype = "glasslike_framed",
+ paramtype = "light",
+ tiles = { "testnodes_glasslike_framed2.png" },
+
+
+ sunlight_propagates = true,
+ groups = { dig_immediate = 3 },
+})
+
+
+minetest.register_node("testnodes:glasslike_framed_optional", {
+ description = S("Glasslike Framed Optional Drawtype Test Node"),
+ drawtype = "glasslike_framed_optional",
+ paramtype = "light",
+ tiles = {
+ "testnodes_glasslike_framed_optional.png",
+ "testnodes_glasslike_detail.png",
+ },
+
+
+ sunlight_propagates = true,
+ groups = { dig_immediate = 3 },
+})
+
+
+
+minetest.register_node("testnodes:allfaces", {
+ description = S("Allfaces Drawtype Test Node"),
+ drawtype = "allfaces",
+ paramtype = "light",
+ tiles = { "testnodes_allfaces.png" },
+
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:allfaces_optional", {
+ description = S("Allfaces Optional Drawtype Test Node"),
+ drawtype = "allfaces_optional",
+ paramtype = "light",
+ tiles = { "testnodes_allfaces_optional.png" },
+
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:allfaces_optional_waving", {
+ description = S("Waving Allfaces Optional Drawtype Test Node"),
+ drawtype = "allfaces_optional",
+ paramtype = "light",
+ tiles = { "testnodes_allfaces_optional.png^[brighten" },
+ waving = 2,
+
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:firelike", {
+ description = S("Firelike Drawtype Test Node"),
+ drawtype = "firelike",
+ paramtype = "light",
+ tiles = { "testnodes_firelike.png" },
+
+
+ walkable = false,
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:fencelike", {
+ description = S("Fencelike Drawtype Test Node"),
+ drawtype = "fencelike",
+ paramtype = "light",
+ tiles = { "testnodes_fencelike.png" },
+
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:torchlike", {
+ description = S("Wallmounted Torchlike Drawtype Test Node"),
+ drawtype = "torchlike",
+ paramtype = "light",
+ paramtype2 = "wallmounted",
+ tiles = {
+ "testnodes_torchlike_floor.png",
+ "testnodes_torchlike_ceiling.png",
+ "testnodes_torchlike_wall.png",
+ },
+
+
+ walkable = false,
+ sunlight_propagates = true,
+ groups = { dig_immediate = 3 },
+ inventory_image = fallback_image("testnodes_torchlike_floor.png"),
+})
+
+minetest.register_node("testnodes:signlike", {
+ description = S("Wallmounted Signlike Drawtype Test Node"),
+ drawtype = "signlike",
+ paramtype = "light",
+ paramtype2 = "wallmounted",
+ tiles = { "testnodes_signlike.png" },
+
+
+ walkable = false,
+ groups = { dig_immediate = 3 },
+ sunlight_propagates = true,
+ inventory_image = fallback_image("testnodes_signlike.png"),
+})
+
+minetest.register_node("testnodes:plantlike", {
+ description = S("Plantlike Drawtype Test Node"),
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = { "testnodes_plantlike.png" },
+
+
+ walkable = false,
+ sunlight_propagates = true,
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:plantlike_waving", {
+ description = S("Waving Plantlike Drawtype Test Node"),
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = { "testnodes_plantlike_waving.png" },
+ waving = 1,
+
+
+ walkable = false,
+ sunlight_propagates = true,
+ groups = { dig_immediate = 3 },
+})
+
+
+
+-- param2 will rotate
+minetest.register_node("testnodes:plantlike_degrotate", {
+ description = S("Degrotate Plantlike Drawtype Test Node"),
+ drawtype = "plantlike",
+ paramtype = "light",
+ paramtype2 = "degrotate",
+ tiles = { "testnodes_plantlike_degrotate.png" },
+
+
+ walkable = false,
+ sunlight_propagates = true,
+ groups = { dig_immediate = 3 },
+})
+
+-- param2 will change height
+minetest.register_node("testnodes:plantlike_leveled", {
+ description = S("Leveled Plantlike Drawtype Test Node"),
+ drawtype = "plantlike",
+ paramtype = "light",
+ paramtype2 = "leveled",
+ tiles = {
+ { name = "testnodes_plantlike_leveled.png", tileable_vertical = true },
+ },
+
+
+ -- We set a default param2 here only for convenience, to make the "plant" visible after placement
+ place_param2 = 8,
+ walkable = false,
+ sunlight_propagates = true,
+ groups = { dig_immediate = 3 },
+})
+
+-- param2 changes shape
+minetest.register_node("testnodes:plantlike_meshoptions", {
+ description = S("Meshoptions Plantlike Drawtype Test Node"),
+ drawtype = "plantlike",
+ paramtype = "light",
+ paramtype2 = "meshoptions",
+ tiles = { "testnodes_plantlike_meshoptions.png" },
+
+
+ walkable = false,
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:plantlike_rooted", {
+ description = S("Rooted Plantlike Drawtype Test Node"),
+ drawtype = "plantlike_rooted",
+ paramtype = "light",
+ tiles = { "testnodes_plantlike_rooted_base.png" },
+ special_tiles = { "testnodes_plantlike_rooted.png" },
+
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:plantlike_rooted_waving", {
+ description = S("Waving Rooted Plantlike Drawtype Test Node"),
+ drawtype = "plantlike_rooted",
+ paramtype = "light",
+ tiles = {
+ "testnodes_plantlike_rooted_base.png",
+ "testnodes_plantlike_rooted_base.png",
+ "testnodes_plantlike_rooted_base_side_waving.png",
+ },
+ special_tiles = { "testnodes_plantlike_rooted_waving.png" },
+ waving = 1,
+
+ groups = { dig_immediate = 3 },
+})
+
+-- param2 changes height
+minetest.register_node("testnodes:plantlike_rooted_leveled", {
+ description = S("Leveled Rooted Plantlike Drawtype Test Node"),
+ drawtype = "plantlike_rooted",
+ paramtype = "light",
+ paramtype2 = "leveled",
+ tiles = {
+ "testnodes_plantlike_rooted_base.png",
+ "testnodes_plantlike_rooted_base.png",
+ "testnodes_plantlike_rooted_base_side_leveled.png",
+ },
+ special_tiles = {
+ { name = "testnodes_plantlike_rooted_leveled.png", tileable_vertical = true },
+ },
+
+
+ -- We set a default param2 here only for convenience, to make the "plant" visible after placement
+ place_param2 = 8,
+ groups = { dig_immediate = 3 },
+})
+
+-- param2 changes shape
+minetest.register_node("testnodes:plantlike_rooted_meshoptions", {
+ description = S("Meshoptions Rooted Plantlike Drawtype Test Node"),
+ drawtype = "plantlike_rooted",
+ paramtype = "light",
+ paramtype2 = "meshoptions",
+ tiles = {
+ "testnodes_plantlike_rooted_base.png",
+ "testnodes_plantlike_rooted_base.png",
+ "testnodes_plantlike_rooted_base_side_meshoptions.png",
+ },
+ special_tiles = {
+ "testnodes_plantlike_rooted_meshoptions.png",
+ },
+
+ groups = { dig_immediate = 3 },
+})
+
+-- param2 changes rotation
+minetest.register_node("testnodes:plantlike_rooted_degrotate", {
+ description = S("Degrotate Rooted Plantlike Drawtype Test Node"),
+ drawtype = "plantlike_rooted",
+ paramtype = "light",
+ paramtype2 = "degrotate",
+ tiles = {
+ "testnodes_plantlike_rooted_base.png",
+ "testnodes_plantlike_rooted_base.png",
+ "testnodes_plantlike_rooted_base_side_degrotate.png",
+ },
+ special_tiles = {
+ "testnodes_plantlike_rooted_degrotate.png",
+ },
+
+ groups = { dig_immediate = 3 },
+})
+
+-- Demonstrative liquid nodes, source and flowing form.
+minetest.register_node("testnodes:liquid", {
+ description = S("Source Liquid Drawtype Test Node"),
+ drawtype = "liquid",
+ paramtype = "light",
+ tiles = {
+ "testnodes_liquidsource.png",
+ },
+ special_tiles = {
+ {name="testnodes_liquidsource.png", backface_culling=false},
+ {name="testnodes_liquidsource.png", backface_culling=true},
+ },
+ use_texture_alpha = true,
+
+
+ walkable = false,
+ liquidtype = "source",
+ liquid_range = 1,
+ liquid_viscosity = 0,
+ liquid_alternative_flowing = "testnodes:liquid_flowing",
+ liquid_alternative_source = "testnodes:liquid",
+ groups = { dig_immediate = 3 },
+})
+minetest.register_node("testnodes:liquid_flowing", {
+ description = S("Flowing Liquid Drawtype Test Node"),
+ drawtype = "flowingliquid",
+ paramtype = "light",
+ paramtype2 = "flowingliquid",
+ tiles = {
+ "testnodes_liquidflowing.png",
+ },
+ special_tiles = {
+ {name="testnodes_liquidflowing.png", backface_culling=false},
+ {name="testnodes_liquidflowing.png", backface_culling=false},
+ },
+ use_texture_alpha = true,
+
+
+ walkable = false,
+ liquidtype = "flowing",
+ liquid_range = 1,
+ liquid_viscosity = 0,
+ liquid_alternative_flowing = "testnodes:liquid_flowing",
+ liquid_alternative_source = "testnodes:liquid",
+ groups = { dig_immediate = 3 },
+})
+minetest.register_node("testnodes:liquid_waving", {
+ description = S("Waving Source Liquid Drawtype Test Node"),
+ drawtype = "liquid",
+ paramtype = "light",
+ tiles = {
+ "testnodes_liquidsource.png^[brighten",
+ },
+ special_tiles = {
+ {name="testnodes_liquidsource.png^[brighten", backface_culling=false},
+ {name="testnodes_liquidsource.png^[brighten", backface_culling=true},
+ },
+ use_texture_alpha = true,
+ waving = 3,
+
+
+ walkable = false,
+ liquidtype = "source",
+ liquid_range = 1,
+ liquid_viscosity = 0,
+ liquid_alternative_flowing = "testnodes:liquid_flowing_waving",
+ liquid_alternative_source = "testnodes:liquid_waving",
+ groups = { dig_immediate = 3 },
+})
+minetest.register_node("testnodes:liquid_flowing_waving", {
+ description = S("Waving Flowing Liquid Drawtype Test Node"),
+ drawtype = "flowingliquid",
+ paramtype = "light",
+ paramtype2 = "flowingliquid",
+ tiles = {
+ "testnodes_liquidflowing.png^[brighten",
+ },
+ special_tiles = {
+ {name="testnodes_liquidflowing.png^[brighten", backface_culling=false},
+ {name="testnodes_liquidflowing.png^[brighten", backface_culling=false},
+ },
+ use_texture_alpha = true,
+ waving = 3,
+
+
+ walkable = false,
+ liquidtype = "flowing",
+ liquid_range = 1,
+ liquid_viscosity = 0,
+ liquid_alternative_flowing = "testnodes:liquid_flowing_waving",
+ liquid_alternative_source = "testnodes:liquid_waving",
+ groups = { dig_immediate = 3 },
+})
+
+
+
+-- Invisible node
+minetest.register_node("testnodes:airlike", {
+ description = S("Airlike Drawtype Test Node"),
+ drawtype = "airlike",
+ paramtype = "light",
+
+
+ walkable = false,
+ groups = { dig_immediate = 3 },
+ sunlight_propagates = true,
+ inventory_image = fallback_image("testnodes_airlike.png"),
+})
+
+-- param2 changes liquid height
+minetest.register_node("testnodes:glassliquid", {
+ description = S("Glasslike Liquid Level Drawtype Test Node"),
+ drawtype = "glasslike_framed",
+ paramtype = "light",
+ paramtype2 = "glasslikeliquidlevel",
+ tiles = {
+ "testnodes_glasslikeliquid.png",
+ },
+ special_tiles = {
+ "testnodes_liquid.png",
+ },
+
+ groups = { dig_immediate = 3 },
+})
+
+-- Adding many raillike examples, primarily to demonstrate the behavior of
+-- "raillike groups". Nodes of the same type (rail, groupless, line, street)
+-- should connect to nodes of the same "rail type" (=same shape, different
+-- color) only.
+local rails = {
+ { "rail", {"testnodes_rail_straight.png", "testnodes_rail_curved.png", "testnodes_rail_t_junction.png", "testnodes_rail_crossing.png"} },
+ { "line", {"testnodes_line_straight.png", "testnodes_line_curved.png", "testnodes_line_t_junction.png", "testnodes_line_crossing.png"}, },
+ { "street", {"testnodes_street_straight.png", "testnodes_street_curved.png", "testnodes_street_t_junction.png", "testnodes_street_crossing.png"}, },
+ -- the "groupless" nodes are nodes in which the "connect_to_raillike" group is not set
+ { "groupless", {"testnodes_rail2_straight.png", "testnodes_rail2_curved.png", "testnodes_rail2_t_junction.png", "testnodes_rail2_crossing.png"} },
+}
+local colors = { "", "cyan", "red" }
+
+for r=1, #rails do
+ local id = rails[r][1]
+ local tiles = rails[r][2]
+ local raillike_group
+ if id ~= "groupless" then
+ raillike_group = minetest.raillike_group(id)
+ end
+ for c=1, #colors do
+ local color
+ if colors[c] ~= "" then
+ color = colors[c]
+ end
+ minetest.register_node("testnodes:raillike_"..id..c, {
+ description = S("Raillike Drawtype Test Node: @1 @2", id, c),
+ drawtype = "raillike",
+ paramtype = "light",
+ tiles = tiles,
+ groups = { connect_to_raillike = raillike_group, dig_immediate = 3 },
+
+
+ color = color,
+ selection_box = {
+ type = "fixed",
+ fixed = {{-0.5, -0.5, -0.5, 0.5, -0.4, 0.5}},
+ },
+ sunlight_propagates = true,
+ walkable = false,
+ })
+ end
+end
+
+
+
+-- Add visual_scale variants of previous nodes for half and double size
+local scale = function(subname, desc_double, desc_half)
+ local original = "testnodes:"..subname
+ local def = table.copy(minetest.registered_items[original])
+ def.visual_scale = 2.0
+ def.description = desc_double
+ minetest.register_node("testnodes:"..subname.."_double", def)
+ def = table.copy(minetest.registered_items[original])
+ def.visual_scale = 0.5
+ def.description = desc_half
+ minetest.register_node("testnodes:"..subname.."_half", def)
+end
+
+scale("plantlike",
+ S("Double-sized Plantlike Drawtype Test Node"),
+ S("Half-sized Plantlike Drawtype Test Node"))
+scale("torchlike",
+ S("Double-sized Wallmounted Torchlike Drawtype Test Node"),
+ S("Half-sized Wallmounted Torchlike Drawtype Test Node"))
+scale("signlike",
+ S("Double-sized Wallmounted Signlike Drawtype Test Node"),
+ S("Half-sized Wallmounted Signlike Drawtype Test Node"))
+scale("firelike",
+ S("Double-sized Firelike Drawtype Test Node"),
+ S("Half-sized Firelike Drawtype Test Node"))
diff --git a/games/devtest/mods/testnodes/init.lua b/games/devtest/mods/testnodes/init.lua
new file mode 100644
index 000000000..92e2c5630
--- /dev/null
+++ b/games/devtest/mods/testnodes/init.lua
@@ -0,0 +1,10 @@
+local path = minetest.get_modpath(minetest.get_current_modname())
+
+dofile(path.."/drawtypes.lua")
+dofile(path.."/meshes.lua")
+dofile(path.."/nodeboxes.lua")
+dofile(path.."/param2.lua")
+dofile(path.."/properties.lua")
+dofile(path.."/liquids.lua")
+dofile(path.."/light.lua")
+dofile(path.."/textures.lua")
diff --git a/games/devtest/mods/testnodes/light.lua b/games/devtest/mods/testnodes/light.lua
new file mode 100644
index 000000000..94409e83f
--- /dev/null
+++ b/games/devtest/mods/testnodes/light.lua
@@ -0,0 +1,48 @@
+-- Test Nodes: Light test
+
+local S = minetest.get_translator("testnodes")
+
+-- All possible light levels
+for i=1, minetest.LIGHT_MAX do
+ minetest.register_node("testnodes:light"..i, {
+ description = S("Light Source (@1)", i),
+ paramtype = "light",
+ light_source = i,
+
+
+ tiles ={"testnodes_light_"..i..".png"},
+ drawtype = "glasslike",
+ walkable = false,
+ sunlight_propagates = true,
+ is_ground_content = false,
+ groups = {dig_immediate=3},
+ })
+end
+
+-- Lets light through, but not sunlight, leading to a
+-- reduction in light level when light passes through
+minetest.register_node("testnodes:sunlight_filter", {
+ description = S("Sunlight Filter"),
+ paramtype = "light",
+
+
+ drawtype = "glasslike",
+ tiles = {
+ "testnodes_sunlight_filter.png",
+ },
+ groups = { dig_immediate = 3 },
+})
+
+-- Lets light and sunlight through without obstruction
+minetest.register_node("testnodes:sunlight_propagator", {
+ description = S("Sunlight Propagator"),
+ paramtype = "light",
+ sunlight_propagates = true,
+
+
+ drawtype = "glasslike",
+ tiles = {
+ "testnodes_sunlight_filter.png^[brighten",
+ },
+ groups = { dig_immediate = 3 },
+})
diff --git a/games/devtest/mods/testnodes/liquids.lua b/games/devtest/mods/testnodes/liquids.lua
new file mode 100644
index 000000000..e316782ad
--- /dev/null
+++ b/games/devtest/mods/testnodes/liquids.lua
@@ -0,0 +1,91 @@
+-- Add liquids for ranges and viscosity levels 0-8
+
+for d=0, 8 do
+ minetest.register_node("testnodes:rliquid_"..d, {
+ description = "Test Liquid Source, Range "..d,
+ drawtype = "liquid",
+ tiles = {"testnodes_liquidsource_r"..d..".png"},
+ special_tiles = {
+ {name = "testnodes_liquidsource_r"..d..".png", backface_culling = false},
+ {name = "testnodes_liquidsource_r"..d..".png", backface_culling = true},
+ },
+ alpha = 192,
+ paramtype = "light",
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ liquidtype = "source",
+ liquid_alternative_flowing = "testnodes:rliquid_flowing_"..d,
+ liquid_alternative_source = "testnodes:rliquid_"..d,
+ liquid_range = d,
+ })
+
+ minetest.register_node("testnodes:rliquid_flowing_"..d, {
+ description = "Flowing Test Liquid, Range "..d,
+ drawtype = "flowingliquid",
+ tiles = {"testnodes_liquidflowing_r"..d..".png"},
+ special_tiles = {
+ {name = "testnodes_liquidflowing_r"..d..".png", backface_culling = false},
+ {name = "testnodes_liquidflowing_r"..d..".png", backface_culling = false},
+ },
+ alpha = 192,
+ paramtype = "light",
+ paramtype2 = "flowingliquid",
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ liquidtype = "flowing",
+ liquid_alternative_flowing = "testnodes:rliquid_flowing_"..d,
+ liquid_alternative_source = "testnodes:rliquid_"..d,
+ liquid_range = d,
+ })
+
+ local mod = "^[colorize:#000000:127"
+ minetest.register_node("testnodes:vliquid_"..d, {
+ description = "Test Liquid Source, Viscosity "..d,
+ drawtype = "liquid",
+ tiles = {"testnodes_liquidsource_r"..d..".png"..mod},
+ special_tiles = {
+ {name = "testnodes_liquidsource_r"..d..".png"..mod, backface_culling = false},
+ {name = "testnodes_liquidsource_r"..d..".png"..mod, backface_culling = true},
+ },
+ alpha = 192,
+ paramtype = "light",
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ liquidtype = "source",
+ liquid_alternative_flowing = "testnodes:vliquid_flowing_"..d,
+ liquid_alternative_source = "testnodes:vliquid_"..d,
+ liquid_viscosity = d,
+ })
+
+ minetest.register_node("testnodes:vliquid_flowing_"..d, {
+ description = "Flowing Test Liquid, Viscosity "..d,
+ drawtype = "flowingliquid",
+ tiles = {"testnodes_liquidflowing_r"..d..".png"..mod},
+ special_tiles = {
+ {name = "testnodes_liquidflowing_r"..d..".png"..mod, backface_culling = false},
+ {name = "testnodes_liquidflowing_r"..d..".png"..mod, backface_culling = false},
+ },
+ alpha = 192,
+ paramtype = "light",
+ paramtype2 = "flowingliquid",
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ liquidtype = "flowing",
+ liquid_alternative_flowing = "testnodes:vliquid_flowing_"..d,
+ liquid_alternative_source = "testnodes:vliquid_"..d,
+ liquid_viscosity = d,
+ })
+
+end
diff --git a/games/devtest/mods/testnodes/meshes.lua b/games/devtest/mods/testnodes/meshes.lua
new file mode 100644
index 000000000..900abc180
--- /dev/null
+++ b/games/devtest/mods/testnodes/meshes.lua
@@ -0,0 +1,145 @@
+-- Meshes
+
+local S = minetest.get_translator("testnodes")
+
+local ocorner_cbox = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
+ {-0.5, -0.25, -0.25, 0.25, 0, 0.5},
+ {-0.5, 0, 0, 0, 0.25, 0.5},
+ {-0.5, 0.25, 0.25, -0.25, 0.5, 0.5}
+ }
+}
+
+local tall_pyr_cbox = {
+ type = "fixed",
+ fixed = {
+ { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 },
+ { -0.375, -0.25, -0.375, 0.375, 0, 0.375},
+ { -0.25, 0, -0.25, 0.25, 0.25, 0.25},
+ { -0.125, 0.25, -0.125, 0.125, 0.5, 0.125}
+ }
+}
+
+-- Normal mesh
+minetest.register_node("testnodes:mesh", {
+ description = S("Mesh Test Node"),
+ drawtype = "mesh",
+ mesh = "testnodes_pyramid.obj",
+ tiles = {"testnodes_mesh_stripes2.png"},
+ paramtype = "light",
+ collision_box = tall_pyr_cbox,
+
+ groups = {dig_immediate=3},
+})
+
+-- Facedir mesh: outer corner slope
+minetest.register_node("testnodes:mesh_facedir", {
+ description = S("Facedir Mesh Test Node"),
+ drawtype = "mesh",
+ mesh = "testnodes_ocorner.obj",
+ tiles = {"testnodes_mesh_stripes.png"},
+ paramtype = "light",
+ paramtype2 = "facedir",
+ collision_box = ocorner_cbox,
+
+ groups = {dig_immediate=3},
+})
+
+minetest.register_node("testnodes:mesh_colorfacedir", {
+ description = S("Color Facedir Mesh Test Node"),
+ drawtype = "mesh",
+ mesh = "testnodes_ocorner.obj",
+ tiles = {"testnodes_mesh_stripes3.png"},
+ paramtype = "light",
+ paramtype2 = "colorfacedir",
+ palette = "testnodes_palette_facedir.png",
+ collision_box = ocorner_cbox,
+
+ groups = {dig_immediate=3},
+})
+
+-- Wallmounted mesh: pyramid
+minetest.register_node("testnodes:mesh_wallmounted", {
+ description = S("Wallmounted Mesh Test Node"),
+ drawtype = "mesh",
+ mesh = "testnodes_pyramid.obj",
+ tiles = {"testnodes_mesh_stripes2.png"},
+ paramtype = "light",
+ paramtype2 = "wallmounted",
+ collision_box = tall_pyr_cbox,
+
+ groups = {dig_immediate=3},
+})
+
+minetest.register_node("testnodes:mesh_colorwallmounted", {
+ description = S("Color Wallmounted Mesh Test Node"),
+ drawtype = "mesh",
+ mesh = "testnodes_pyramid.obj",
+ tiles = {"testnodes_mesh_stripes3.png"},
+ paramtype = "light",
+ paramtype2 = "colorwallmounted",
+ palette = "testnodes_palette_wallmounted.png",
+ collision_box = tall_pyr_cbox,
+
+ groups = {dig_immediate=3},
+})
+
+
+minetest.register_node("testnodes:mesh_double", {
+ description = S("Double-sized Mesh Test Node"),
+ drawtype = "mesh",
+ mesh = "testnodes_pyramid.obj",
+ tiles = {"testnodes_mesh_stripes2.png"},
+ paramtype = "light",
+ collision_box = tall_pyr_cbox,
+ visual_scale = 2,
+
+ groups = {dig_immediate=3},
+})
+minetest.register_node("testnodes:mesh_half", {
+ description = S("Half-sized Mesh Test Node"),
+ drawtype = "mesh",
+ mesh = "testnodes_pyramid.obj",
+ tiles = {"testnodes_mesh_stripes2.png"},
+ paramtype = "light",
+ collision_box = tall_pyr_cbox,
+ visual_scale = 0.5,
+
+ groups = {dig_immediate=3},
+})
+
+minetest.register_node("testnodes:mesh_waving1", {
+ description = S("Plantlike-waving Mesh Test Node"),
+ drawtype = "mesh",
+ mesh = "testnodes_pyramid.obj",
+ tiles = {"testnodes_mesh_stripes4.png^[multiply:#B0FFB0"},
+ paramtype = "light",
+ collision_box = tall_pyr_cbox,
+ waving = 1,
+
+ groups = {dig_immediate=3},
+})
+minetest.register_node("testnodes:mesh_waving2", {
+ description = S("Leaflike-waving Mesh Test Node"),
+ drawtype = "mesh",
+ mesh = "testnodes_pyramid.obj",
+ tiles = {"testnodes_mesh_stripes4.png^[multiply:#FFFFB0"},
+ paramtype = "light",
+ collision_box = tall_pyr_cbox,
+ waving = 2,
+
+ groups = {dig_immediate=3},
+})
+minetest.register_node("testnodes:mesh_waving3", {
+ description = S("Liquidlike-waving Mesh Test Node"),
+ drawtype = "mesh",
+ mesh = "testnodes_pyramid.obj",
+ tiles = {"testnodes_mesh_stripes4.png^[multiply:#B0B0FF"},
+ paramtype = "light",
+ collision_box = tall_pyr_cbox,
+ waving = 3,
+
+ groups = {dig_immediate=3},
+})
diff --git a/games/devtest/mods/testnodes/mod.conf b/games/devtest/mods/testnodes/mod.conf
new file mode 100644
index 000000000..4824c6ed0
--- /dev/null
+++ b/games/devtest/mods/testnodes/mod.conf
@@ -0,0 +1,2 @@
+name = testnodes
+description = Contains a bunch of basic example nodes for demonstrative purposes, development and testing
diff --git a/games/devtest/mods/testnodes/models/testnodes_ocorner.obj b/games/devtest/mods/testnodes/models/testnodes_ocorner.obj
new file mode 100644
index 000000000..231d7056b
--- /dev/null
+++ b/games/devtest/mods/testnodes/models/testnodes_ocorner.obj
@@ -0,0 +1,23 @@
+# Blender v2.73 (sub 0) OBJ File: 'slope_test_ocorner_onetexture.blend'
+# www.blender.org
+o Cube_Cube.002
+v 0.500000 0.500000 0.500000
+v -0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 -0.500000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vn 0.000000 -1.000000 -0.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 -0.000000 1.000000
+vn -0.707100 0.707100 0.000000
+vn 0.000000 0.707100 -0.707100
+s off
+f 3/1/1 2/2/1 4/3/1 5/4/1
+f 1/2/2 3/3/2 5/4/2
+f 1/1/3 2/3/3 3/4/3
+f 1/1/4 4/3/4 2/4/4
+f 1/2/5 5/3/5 4/4/5
diff --git a/games/devtest/mods/testnodes/models/testnodes_pyramid.obj b/games/devtest/mods/testnodes/models/testnodes_pyramid.obj
new file mode 100644
index 000000000..b305af2f8
--- /dev/null
+++ b/games/devtest/mods/testnodes/models/testnodes_pyramid.obj
@@ -0,0 +1,24 @@
+# Blender v2.73 (sub 0) OBJ File: 'slope_test_pyramid_onetexture.blend'
+# www.blender.org
+o Cube
+v 0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+v -0.000000 0.500000 -0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 0.500000 1.000000
+vn 0.000000 -1.000000 0.000000
+vn -0.894400 0.447200 -0.000000
+vn 0.000000 0.447200 -0.894400
+vn 0.894400 0.447200 0.000000
+vn -0.000000 0.447200 0.894400
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 3/4/2 5/5/2 4/3/2
+f 5/5/3 1/3/3 4/4/3
+f 1/4/4 5/5/4 2/3/4
+f 2/4/5 5/5/5 3/3/5
diff --git a/games/devtest/mods/testnodes/nodeboxes.lua b/games/devtest/mods/testnodes/nodeboxes.lua
new file mode 100644
index 000000000..ebd858337
--- /dev/null
+++ b/games/devtest/mods/testnodes/nodeboxes.lua
@@ -0,0 +1,80 @@
+local S = minetest.get_translator("testnodes")
+
+-- Nodebox examples and tests.
+
+-- An simple example nodebox with one centered box
+minetest.register_node("testnodes:nodebox_fixed", {
+ description = S("Fixed Nodebox Test Node"),
+ tiles = {"testnodes_nodebox.png"},
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {
+ type = "fixed",
+ fixed = {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25},
+ },
+
+ groups = {dig_immediate=3},
+})
+
+-- 50% higher than a regular node
+minetest.register_node("testnodes:nodebox_overhigh", {
+ description = S("Overhigh Nodebox Test Node"),
+ tiles = {"testnodes_nodebox.png"},
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 1, 0.5},
+ },
+
+ groups = {dig_immediate=3},
+})
+
+-- 100% higher than a regular node
+minetest.register_node("testnodes:nodebox_overhigh2", {
+ description = S("Double-height Nodebox Test Node"),
+ tiles = {"testnodes_nodebox.png"},
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5},
+ },
+
+ groups = {dig_immediate=3},
+})
+
+-- Height of nodebox changes with its param2 value
+minetest.register_node("testnodes:nodebox_leveled", {
+ description = S("Leveled Nodebox Test Node"),
+ tiles = {"testnodes_nodebox.png"},
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "leveled",
+ node_box = {
+ type = "leveled",
+ fixed = {-0.5, 0.0, -0.5, 0.5, -0.499, 0.5},
+ },
+
+ groups = {dig_immediate=3},
+})
+
+-- Wall-like nodebox that connects to neighbors
+minetest.register_node("testnodes:nodebox_connected", {
+ description = S("Connected Nodebox Test Node"),
+ tiles = {"testnodes_nodebox.png"},
+ groups = {connected_nodebox=1, dig_immediate=3},
+ drawtype = "nodebox",
+ paramtype = "light",
+ connects_to = {"group:connected_nodebox"},
+ connect_sides = {"front", "back", "left", "right"},
+ node_box = {
+ type = "connected",
+ fixed = {-0.125, -0.500, -0.125, 0.125, 0.500, 0.125},
+ connect_front = {-0.125, -0.500, -0.500, 0.125, 0.400, -0.125},
+ connect_back = {-0.125, -0.500, 0.125, 0.125, 0.400, 0.500},
+ connect_left = {-0.500, -0.500, -0.125, -0.125, 0.400, 0.125},
+ connect_right = {0.125, -0.500, -0.125, 0.500, 0.400, 0.125},
+ },
+})
+
diff --git a/games/devtest/mods/testnodes/param2.lua b/games/devtest/mods/testnodes/param2.lua
new file mode 100644
index 000000000..5d64376fa
--- /dev/null
+++ b/games/devtest/mods/testnodes/param2.lua
@@ -0,0 +1,168 @@
+-- This file is for misc. param2 tests that aren't covered in drawtypes.lua already.
+
+local S = minetest.get_translator("testnodes")
+
+minetest.register_node("testnodes:facedir", {
+ description = S("Facedir Test Node"),
+ paramtype2 = "facedir",
+ tiles = {
+ "testnodes_1.png",
+ "testnodes_2.png",
+ "testnodes_3.png",
+ "testnodes_4.png",
+ "testnodes_5.png",
+ "testnodes_6.png",
+ },
+
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:facedir_nodebox", {
+ description = S("Facedir Nodebox Test Node"),
+ tiles = {
+ "testnodes_1.png",
+ "testnodes_2.png",
+ "testnodes_3.png",
+ "testnodes_4.png",
+ "testnodes_5.png",
+ "testnodes_6.png",
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.2, 0.2, 0.2},
+ },
+
+ groups = {dig_immediate=3},
+})
+
+minetest.register_node("testnodes:wallmounted", {
+ description = S("Wallmounted Test Node"),
+ paramtype2 = "wallmounted",
+ tiles = {
+ "testnodes_1w.png",
+ "testnodes_2w.png",
+ "testnodes_3w.png",
+ "testnodes_4w.png",
+ "testnodes_5w.png",
+ "testnodes_6w.png",
+ },
+
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:wallmounted_nodebox", {
+ description = S("Wallmounted Nodebox Test Node"),
+ paramtype2 = "wallmounted",
+ paramtype = "light",
+ tiles = {
+ "testnodes_1w.png",
+ "testnodes_2w.png",
+ "testnodes_3w.png",
+ "testnodes_4w.png",
+ "testnodes_5w.png",
+ "testnodes_6w.png",
+ },
+ drawtype = "nodebox",
+ node_box = {
+ type = "wallmounted",
+ wall_top = { -0.5, 0, -0.5, 0.5, 0.5, 0.5 },
+ wall_bottom = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 },
+ wall_side = { -0.5, -0.5, -0.5, 0, 0.5, 0.5 },
+ },
+
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:color", {
+ description = S("Color Test Node"),
+ paramtype2 = "color",
+ palette = "testnodes_palette_full.png",
+ tiles = {
+ "testnodes_node.png",
+ },
+
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:colorfacedir", {
+ description = S("Color Facedir Test Node"),
+ paramtype2 = "colorfacedir",
+ palette = "testnodes_palette_facedir.png",
+ tiles = {
+ "testnodes_1g.png",
+ "testnodes_2g.png",
+ "testnodes_3g.png",
+ "testnodes_4g.png",
+ "testnodes_5g.png",
+ "testnodes_6g.png",
+ },
+
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:colorfacedir_nodebox", {
+ description = S("Color Facedir Nodebox Test Node"),
+ tiles = {
+ "testnodes_1g.png",
+ "testnodes_2g.png",
+ "testnodes_3g.png",
+ "testnodes_4g.png",
+ "testnodes_5g.png",
+ "testnodes_6g.png",
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "colorfacedir",
+ palette = "testnodes_palette_facedir.png",
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.2, 0.2, 0.2},
+ },
+
+ groups = {dig_immediate=3},
+})
+
+minetest.register_node("testnodes:colorwallmounted", {
+ description = S("Color Wallmounted Test Node"),
+ paramtype2 = "colorwallmounted",
+ paramtype = "light",
+ palette = "testnodes_palette_wallmounted.png",
+ tiles = {
+ "testnodes_1wg.png",
+ "testnodes_2wg.png",
+ "testnodes_3wg.png",
+ "testnodes_4wg.png",
+ "testnodes_5wg.png",
+ "testnodes_6wg.png",
+ },
+
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:colorwallmounted_nodebox", {
+ description = S("Color Wallmounted Nodebox Test Node"),
+ paramtype2 = "colorwallmounted",
+ paramtype = "light",
+ palette = "testnodes_palette_wallmounted.png",
+ tiles = {
+ "testnodes_1wg.png",
+ "testnodes_2wg.png",
+ "testnodes_3wg.png",
+ "testnodes_4wg.png",
+ "testnodes_5wg.png",
+ "testnodes_6wg.png",
+ },
+ drawtype = "nodebox",
+ node_box = {
+ type = "wallmounted",
+ wall_top = { -0.5, 0, -0.5, 0.5, 0.5, 0.5 },
+ wall_bottom = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 },
+ wall_side = { -0.5, -0.5, -0.5, 0, 0.5, 0.5 },
+ },
+
+ groups = { dig_immediate = 3 },
+})
+
diff --git a/games/devtest/mods/testnodes/properties.lua b/games/devtest/mods/testnodes/properties.lua
new file mode 100644
index 000000000..01846a5f0
--- /dev/null
+++ b/games/devtest/mods/testnodes/properties.lua
@@ -0,0 +1,277 @@
+-- Test Nodes: Node property tests
+
+local S = minetest.get_translator("testnodes")
+
+-- Is supposed to fall when it doesn't rest on solid ground
+minetest.register_node("testnodes:falling", {
+ description = S("Falling Node"),
+ tiles = {
+ "testnodes_node.png",
+ "testnodes_node.png",
+ "testnodes_node_falling.png",
+ },
+ groups = { falling_node = 1, dig_immediate = 3 },
+})
+
+-- Same as falling node, but will stop falling on top of liquids
+minetest.register_node("testnodes:falling_float", {
+ description = S("Falling+Floating Node"),
+ groups = { falling_node = 1, float = 1, dig_immediate = 3 },
+
+
+ tiles = {
+ "testnodes_node.png",
+ "testnodes_node.png",
+ "testnodes_node_falling.png",
+ },
+ color = "cyan",
+})
+
+-- This node attaches to the floor and drops as item
+-- when the floor is gone.
+minetest.register_node("testnodes:attached", {
+ description = S("Floor-Attached Node"),
+ tiles = {
+ "testnodes_attached_top.png",
+ "testnodes_attached_bottom.png",
+ "testnodes_attached_side.png",
+ },
+ groups = { attached_node = 1, dig_immediate = 3 },
+})
+
+-- This node attaches to the side of a node and drops as item
+-- when the node it attaches to is gone.
+minetest.register_node("testnodes:attached_wallmounted", {
+ description = S("Wallmounted Attached Node"),
+ paramtype2 = "wallmounted",
+ tiles = {
+ "testnodes_attachedw_top.png",
+ "testnodes_attachedw_bottom.png",
+ "testnodes_attachedw_side.png",
+ },
+ groups = { attached_node = 1, dig_immediate = 3 },
+})
+
+-- Jump disabled
+minetest.register_node("testnodes:nojump", {
+ description = S("Non-jumping Node"),
+ groups = {disable_jump=1, dig_immediate=3},
+ tiles = {"testnodes_nojump_top.png", "testnodes_nojump_side.png"},
+})
+
+-- Jump disabled plant
+minetest.register_node("testnodes:nojump_walkable", {
+ description = S("Non-jumping Plant Node"),
+ drawtype = "plantlike",
+ groups = {disable_jump=1, dig_immediate=3},
+ walkable = false,
+ tiles = {"testnodes_nojump_top.png"},
+})
+
+-- Climbable up and down with jump and sneak keys
+minetest.register_node("testnodes:climbable", {
+ description = S("Climbable Node"),
+ climbable = true,
+ walkable = false,
+
+
+ paramtype = "light",
+ sunlight_propagates = true,
+ is_ground_content = false,
+ tiles ={"testnodes_climbable_side.png"},
+ drawtype = "glasslike",
+ groups = {dig_immediate=3},
+})
+
+-- Climbable only downwards with sneak key
+minetest.register_node("testnodes:climbable_nojump", {
+ description = S("Downwards-climbable Node"),
+ climbable = true,
+ walkable = false,
+
+ groups = {disable_jump=1, dig_immediate=3},
+ drawtype = "glasslike",
+ tiles ={"testnodes_climbable_nojump_side.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+})
+
+-- A liquid in which you can't rise
+minetest.register_node("testnodes:liquid_nojump", {
+ description = S("Non-jumping Liquid Source Node"),
+ liquidtype = "source",
+ liquid_range = 1,
+ liquid_viscosity = 0,
+ liquid_alternative_flowing = "testnodes:liquidflowing_nojump",
+ liquid_alternative_source = "testnodes:liquid_nojump",
+ liquid_renewable = false,
+ groups = {disable_jump=1, dig_immediate=3},
+ walkable = false,
+
+ drawtype = "liquid",
+ tiles = {"testnodes_liquidsource.png^[colorize:#FF0000:127"},
+ special_tiles = {
+ {name = "testnodes_liquidsource.png^[colorize:#FF0000:127", backface_culling = false},
+ {name = "testnodes_liquidsource.png^[colorize:#FF0000:127", backface_culling = true},
+ },
+ use_texture_alpha = true,
+ paramtype = "light",
+ pointable = false,
+ liquids_pointable = true,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ post_effect_color = {a = 70, r = 255, g = 0, b = 200},
+})
+
+-- A liquid in which you can't rise (flowing variant)
+minetest.register_node("testnodes:liquidflowing_nojump", {
+ description = S("Non-jumping Flowing Liquid Node"),
+ liquidtype = "flowing",
+ liquid_range = 1,
+ liquid_viscosity = 0,
+ liquid_alternative_flowing = "testnodes:liquidflowing_nojump",
+ liquid_alternative_source = "testnodes:liquid_nojump",
+ liquid_renewable = false,
+ groups = {disable_jump=1, dig_immediate=3},
+ walkable = false,
+
+
+ drawtype = "flowingliquid",
+ tiles = {"testnodes_liquidflowing.png^[colorize:#FF0000:127"},
+ special_tiles = {
+ {name = "testnodes_liquidflowing.png^[colorize:#FF0000:127", backface_culling = false},
+ {name = "testnodes_liquidflowing.png^[colorize:#FF0000:127", backface_culling = false},
+ },
+ use_texture_alpha = true,
+ paramtype = "light",
+ paramtype2 = "flowingliquid",
+ pointable = false,
+ liquids_pointable = true,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ post_effect_color = {a = 70, r = 255, g = 0, b = 200},
+})
+
+-- Nodes that modify fall damage (various damage modifiers)
+for i=-100, 100, 25 do
+ if i ~= 0 then
+ local subname, descnum
+ if i < 0 then
+ subname = "m"..math.abs(i)
+ descnum = tostring(i)
+ else
+ subname = tostring(i)
+ descnum = S("+@1", i)
+ end
+ local tex, color, desc
+ if i > 0 then
+ local val = math.floor((i/100)*255)
+ tex = "testnodes_fall_damage_plus.png"
+ color = { b=0, g=255-val, r=255, a=255 }
+ desc = S("Fall Damage Node (+@1%)", i)
+ else
+ tex = "testnodes_fall_damage_minus.png"
+ if i == -100 then
+ color = { r=0, b=0, g=255, a=255 }
+ else
+ local val = math.floor((math.abs(i)/100)*255)
+ color = { r=0, b=255, g=255-val, a=255 }
+ end
+ desc = S("Fall Damage Node (-@1%)", math.abs(i))
+ end
+ minetest.register_node("testnodes:damage"..subname, {
+ description = desc,
+ groups = {fall_damage_add_percent=i, dig_immediate=3},
+
+
+ tiles = { tex },
+ is_ground_content = false,
+ color = color,
+ })
+ end
+end
+
+-- Bouncy nodes (various bounce levels)
+for i=20, 180, 20 do
+ local val = math.floor(((i-20)/200)*255)
+ minetest.register_node("testnodes:bouncy"..i, {
+ description = S("Bouncy Node (@1%)", i),
+ groups = {bouncy=i, dig_immediate=3},
+
+
+ tiles ={"testnodes_bouncy.png"},
+ is_ground_content = false,
+ color = { r=255, g=255-val, b=val, a=255 },
+ })
+end
+
+-- Slippery nodes (various slippery levels)
+for i=1, 5 do
+ minetest.register_node("testnodes:slippery"..i, {
+ description = S("Slippery Node (@1)", i),
+ tiles ={"testnodes_slippery.png"},
+ is_ground_content = false,
+ groups = {slippery=i, dig_immediate=3},
+ color = { r=0, g=255, b=math.floor((i/5)*255), a=255 },
+ })
+end
+
+-- By placing something on the node, the node itself will be replaced
+minetest.register_node("testnodes:buildable_to", {
+ description = S("Replacable Node"),
+ buildable_to = true,
+ tiles = {"testnodes_buildable_to.png"},
+ is_ground_content = false,
+ groups = {dig_immediate=3},
+})
+
+-- Nodes that deal damage to players that are inside them.
+-- Negative damage nodes should heal.
+for d=-3,3 do
+ if d ~= 0 then
+ local sub, tile
+ if d > 0 then
+ sub = tostring(d)
+ tile = "testnodes_damage.png"
+ else
+ sub = "m" .. tostring(math.abs(d))
+ tile = "testnodes_damage_neg.png"
+ end
+ if math.abs(d) == 2 then
+ tile = tile .. "^[colorize:#000000:70"
+ elseif math.abs(d) == 3 then
+ tile = tile .. "^[colorize:#000000:140"
+ end
+ minetest.register_node("testnodes:damage_"..sub, {
+ description = S("Damage Node (@1 damage per second)", d),
+ damage_per_second = d,
+
+
+ walkable = false,
+ is_ground_content = false,
+ drawtype = "allfaces",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { tile },
+ groups = {dig_immediate=3},
+ })
+ end
+end
+
+-- Causes drowning damage
+minetest.register_node("testnodes:drowning_1", {
+ description = S("Drowning Node (@1 damage)", 1),
+ drowning = 1,
+
+
+ walkable = false,
+ is_ground_content = false,
+ drawtype = "allfaces",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_drowning.png" },
+ groups = {dig_immediate=3},
+})
+
diff --git a/games/devtest/mods/testnodes/settingtypes.txt b/games/devtest/mods/testnodes/settingtypes.txt
new file mode 100644
index 000000000..7f753bf3e
--- /dev/null
+++ b/games/devtest/mods/testnodes/settingtypes.txt
@@ -0,0 +1,4 @@
+# If set to true, will show an inventory image for nodes that have no inventory image as of Minetest 5.1.0.
+# This is due to <https://github.com/minetest/minetest/issues/9209>.
+# This is only added to make the items more visible to avoid confusion, but you will no longer see the default inventory images for these items. When you want to test the default inventory image of drawtypes, this should be turned off.
+testnodes_show_fallback_image (Use fallback inventory images) bool false
diff --git a/games/devtest/mods/testnodes/textures.lua b/games/devtest/mods/testnodes/textures.lua
new file mode 100644
index 000000000..6ffef8fe9
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures.lua
@@ -0,0 +1,73 @@
+-- Node texture tests
+
+local S = minetest.get_translator("testnodes")
+
+minetest.register_node("testnodes:6sides", {
+ description = S("Six Textures Test Node"),
+ tiles = {
+ "testnodes_normal1.png",
+ "testnodes_normal2.png",
+ "testnodes_normal3.png",
+ "testnodes_normal4.png",
+ "testnodes_normal5.png",
+ "testnodes_normal6.png",
+ },
+
+ groups = { dig_immediate = 2 },
+})
+
+minetest.register_node("testnodes:anim", {
+ description = S("Animated Test Node"),
+ tiles = {
+ { name = "testnodes_anim.png",
+ animation = {
+ type = "vertical_frames",
+ aspect_w = 16,
+ aspect_h = 16,
+ length = 4.0,
+ }, },
+ },
+
+ groups = { dig_immediate = 2 },
+})
+
+-- Node texture transparency test
+
+local alphas = { 64, 128, 191 }
+
+for a=1,#alphas do
+ local alpha = alphas[a]
+
+ -- Transparency taken from texture
+ minetest.register_node("testnodes:alpha_texture_"..alpha, {
+ description = S("Texture Alpha Test Node (@1)", alpha),
+ drawtype = "glasslike",
+ paramtype = "light",
+ tiles = {
+ "testnodes_alpha"..alpha..".png",
+ },
+ use_texture_alpha = true,
+
+ groups = { dig_immediate = 3 },
+ })
+
+ -- Transparency set via "alpha" parameter
+ minetest.register_node("testnodes:alpha_"..alpha, {
+ description = S("Alpha Test Node (@1)", alpha),
+ -- It seems that only the liquid drawtype supports the alpha parameter
+ drawtype = "liquid",
+ paramtype = "light",
+ tiles = {
+ "testnodes_alpha.png",
+ },
+ alpha = alpha,
+
+
+ liquidtype = "source",
+ liquid_range = 0,
+ liquid_viscosity = 0,
+ liquid_alternative_source = "testnodes:alpha_"..alpha,
+ liquid_alternative_flowing = "testnodes:alpha_"..alpha,
+ groups = { dig_immediate = 3 },
+ })
+end
diff --git a/games/devtest/mods/testnodes/textures/testnodes_1.png b/games/devtest/mods/testnodes/textures/testnodes_1.png
new file mode 100644
index 000000000..6730997e2
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_1.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_1g.png b/games/devtest/mods/testnodes/textures/testnodes_1g.png
new file mode 100644
index 000000000..529298ece
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_1g.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_1w.png b/games/devtest/mods/testnodes/textures/testnodes_1w.png
new file mode 100644
index 000000000..d24e571cc
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_1w.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_1wg.png b/games/devtest/mods/testnodes/textures/testnodes_1wg.png
new file mode 100644
index 000000000..b2eba0e9a
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_1wg.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_2.png b/games/devtest/mods/testnodes/textures/testnodes_2.png
new file mode 100644
index 000000000..6c87c868d
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_2.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_2g.png b/games/devtest/mods/testnodes/textures/testnodes_2g.png
new file mode 100644
index 000000000..cb9060f7b
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_2g.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_2w.png b/games/devtest/mods/testnodes/textures/testnodes_2w.png
new file mode 100644
index 000000000..b56874ee1
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_2w.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_2wg.png b/games/devtest/mods/testnodes/textures/testnodes_2wg.png
new file mode 100644
index 000000000..108dc87bb
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_2wg.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_3.png b/games/devtest/mods/testnodes/textures/testnodes_3.png
new file mode 100644
index 000000000..05b45629a
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_3.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_3g.png b/games/devtest/mods/testnodes/textures/testnodes_3g.png
new file mode 100644
index 000000000..5c84f5882
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_3g.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_3w.png b/games/devtest/mods/testnodes/textures/testnodes_3w.png
new file mode 100644
index 000000000..8b435cf01
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_3w.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_3wg.png b/games/devtest/mods/testnodes/textures/testnodes_3wg.png
new file mode 100644
index 000000000..9ee900667
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_3wg.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_4.png b/games/devtest/mods/testnodes/textures/testnodes_4.png
new file mode 100644
index 000000000..15e6ffec7
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_4.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_4g.png b/games/devtest/mods/testnodes/textures/testnodes_4g.png
new file mode 100644
index 000000000..8f144fae0
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_4g.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_4w.png b/games/devtest/mods/testnodes/textures/testnodes_4w.png
new file mode 100644
index 000000000..214e0df9d
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_4w.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_4wg.png b/games/devtest/mods/testnodes/textures/testnodes_4wg.png
new file mode 100644
index 000000000..888b3d482
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_4wg.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_5.png b/games/devtest/mods/testnodes/textures/testnodes_5.png
new file mode 100644
index 000000000..1ef1c728c
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_5.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_5g.png b/games/devtest/mods/testnodes/textures/testnodes_5g.png
new file mode 100644
index 000000000..30da4793a
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_5g.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_5w.png b/games/devtest/mods/testnodes/textures/testnodes_5w.png
new file mode 100644
index 000000000..b4cb42426
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_5w.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_5wg.png b/games/devtest/mods/testnodes/textures/testnodes_5wg.png
new file mode 100644
index 000000000..fac9db28e
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_5wg.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_6.png b/games/devtest/mods/testnodes/textures/testnodes_6.png
new file mode 100644
index 000000000..805813e57
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_6.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_6g.png b/games/devtest/mods/testnodes/textures/testnodes_6g.png
new file mode 100644
index 000000000..a88f4c9f8
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_6g.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_6w.png b/games/devtest/mods/testnodes/textures/testnodes_6w.png
new file mode 100644
index 000000000..e6bbf97d9
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_6w.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_6wg.png b/games/devtest/mods/testnodes/textures/testnodes_6wg.png
new file mode 100644
index 000000000..29ca933e0
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_6wg.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_airlike.png b/games/devtest/mods/testnodes/textures/testnodes_airlike.png
new file mode 100644
index 000000000..5a5664a2a
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_airlike.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_allfaces.png b/games/devtest/mods/testnodes/textures/testnodes_allfaces.png
new file mode 100644
index 000000000..c0a7dc550
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_allfaces.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_allfaces_optional.png b/games/devtest/mods/testnodes/textures/testnodes_allfaces_optional.png
new file mode 100644
index 000000000..1f6a17313
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_allfaces_optional.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_alpha.png b/games/devtest/mods/testnodes/textures/testnodes_alpha.png
new file mode 100644
index 000000000..157fa7386
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_alpha.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_alpha128.png b/games/devtest/mods/testnodes/textures/testnodes_alpha128.png
new file mode 100644
index 000000000..16babf6c7
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_alpha128.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_alpha191.png b/games/devtest/mods/testnodes/textures/testnodes_alpha191.png
new file mode 100644
index 000000000..f165d2887
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_alpha191.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_alpha64.png b/games/devtest/mods/testnodes/textures/testnodes_alpha64.png
new file mode 100644
index 000000000..c343c32c3
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_alpha64.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_anim.png b/games/devtest/mods/testnodes/textures/testnodes_anim.png
new file mode 100644
index 000000000..d321fe857
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_anim.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_attached_bottom.png b/games/devtest/mods/testnodes/textures/testnodes_attached_bottom.png
new file mode 100644
index 000000000..e01ae576f
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_attached_bottom.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_attached_side.png b/games/devtest/mods/testnodes/textures/testnodes_attached_side.png
new file mode 100644
index 000000000..9459cbb05
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_attached_side.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_attached_top.png b/games/devtest/mods/testnodes/textures/testnodes_attached_top.png
new file mode 100644
index 000000000..0148b41e0
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_attached_top.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_attachedw_bottom.png b/games/devtest/mods/testnodes/textures/testnodes_attachedw_bottom.png
new file mode 100644
index 000000000..488ad23a9
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_attachedw_bottom.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_attachedw_side.png b/games/devtest/mods/testnodes/textures/testnodes_attachedw_side.png
new file mode 100644
index 000000000..a02facbc7
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_attachedw_side.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_attachedw_top.png b/games/devtest/mods/testnodes/textures/testnodes_attachedw_top.png
new file mode 100644
index 000000000..1f4fc7b85
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_attachedw_top.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_bouncy.png b/games/devtest/mods/testnodes/textures/testnodes_bouncy.png
new file mode 100644
index 000000000..eabbbdfe4
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_bouncy.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_buildable_to.png b/games/devtest/mods/testnodes/textures/testnodes_buildable_to.png
new file mode 100644
index 000000000..23b5e54d2
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_buildable_to.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_climbable_nojump_side.png b/games/devtest/mods/testnodes/textures/testnodes_climbable_nojump_side.png
new file mode 100644
index 000000000..d5ca13033
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_climbable_nojump_side.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_climbable_side.png b/games/devtest/mods/testnodes/textures/testnodes_climbable_side.png
new file mode 100644
index 000000000..c56ea90d7
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_climbable_side.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_damage.png b/games/devtest/mods/testnodes/textures/testnodes_damage.png
new file mode 100644
index 000000000..9de2ab5e8
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_damage.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_damage_neg.png b/games/devtest/mods/testnodes/textures/testnodes_damage_neg.png
new file mode 100644
index 000000000..85811bc8e
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_damage_neg.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_drowning.png b/games/devtest/mods/testnodes/textures/testnodes_drowning.png
new file mode 100644
index 000000000..57ffc8fcf
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_drowning.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_fall_damage_minus.png b/games/devtest/mods/testnodes/textures/testnodes_fall_damage_minus.png
new file mode 100644
index 000000000..88d3bdf58
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_fall_damage_minus.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_fall_damage_plus.png b/games/devtest/mods/testnodes/textures/testnodes_fall_damage_plus.png
new file mode 100644
index 000000000..61fdec2e3
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_fall_damage_plus.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_fencelike.png b/games/devtest/mods/testnodes/textures/testnodes_fencelike.png
new file mode 100644
index 000000000..84dea1b7c
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_fencelike.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_firelike.png b/games/devtest/mods/testnodes/textures/testnodes_firelike.png
new file mode 100644
index 000000000..ee59b0db1
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_firelike.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_glasslike.png b/games/devtest/mods/testnodes/textures/testnodes_glasslike.png
new file mode 100644
index 000000000..cf3e35414
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_glasslike.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_glasslike_detail.png b/games/devtest/mods/testnodes/textures/testnodes_glasslike_detail.png
new file mode 100644
index 000000000..30c9586e8
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_glasslike_detail.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed.png b/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed.png
new file mode 100644
index 000000000..8a513f21c
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed2.png b/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed2.png
new file mode 100644
index 000000000..4ea839c8b
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed2.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed_optional.png b/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed_optional.png
new file mode 100644
index 000000000..37de77dd1
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_glasslike_framed_optional.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_glasslikeliquid.png b/games/devtest/mods/testnodes/textures/testnodes_glasslikeliquid.png
new file mode 100644
index 000000000..e1e96ffb9
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_glasslikeliquid.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light.png b/games/devtest/mods/testnodes/textures/testnodes_light.png
new file mode 100644
index 000000000..4ba0081c3
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_1.png b/games/devtest/mods/testnodes/textures/testnodes_light_1.png
new file mode 100644
index 000000000..57adf5a4a
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_1.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_10.png b/games/devtest/mods/testnodes/textures/testnodes_light_10.png
new file mode 100644
index 000000000..483834770
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_10.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_11.png b/games/devtest/mods/testnodes/textures/testnodes_light_11.png
new file mode 100644
index 000000000..4c423d9b4
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_11.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_12.png b/games/devtest/mods/testnodes/textures/testnodes_light_12.png
new file mode 100644
index 000000000..bc7946d09
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_12.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_13.png b/games/devtest/mods/testnodes/textures/testnodes_light_13.png
new file mode 100644
index 000000000..0b63c84a6
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_13.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_14.png b/games/devtest/mods/testnodes/textures/testnodes_light_14.png
new file mode 100644
index 000000000..a817bd394
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_14.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_2.png b/games/devtest/mods/testnodes/textures/testnodes_light_2.png
new file mode 100644
index 000000000..852eaeff1
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_2.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_3.png b/games/devtest/mods/testnodes/textures/testnodes_light_3.png
new file mode 100644
index 000000000..79fc834cc
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_3.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_4.png b/games/devtest/mods/testnodes/textures/testnodes_light_4.png
new file mode 100644
index 000000000..75f8c6136
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_4.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_5.png b/games/devtest/mods/testnodes/textures/testnodes_light_5.png
new file mode 100644
index 000000000..b6eede0ae
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_5.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_6.png b/games/devtest/mods/testnodes/textures/testnodes_light_6.png
new file mode 100644
index 000000000..ef54addec
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_6.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_7.png b/games/devtest/mods/testnodes/textures/testnodes_light_7.png
new file mode 100644
index 000000000..4a885b0f6
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_7.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_8.png b/games/devtest/mods/testnodes/textures/testnodes_light_8.png
new file mode 100644
index 000000000..b283301e3
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_8.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_light_9.png b/games/devtest/mods/testnodes/textures/testnodes_light_9.png
new file mode 100644
index 000000000..2aa902358
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_light_9.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_line_crossing.png b/games/devtest/mods/testnodes/textures/testnodes_line_crossing.png
new file mode 100644
index 000000000..e566f2793
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_line_crossing.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_line_curved.png b/games/devtest/mods/testnodes/textures/testnodes_line_curved.png
new file mode 100644
index 000000000..ab9f8e720
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_line_curved.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_line_straight.png b/games/devtest/mods/testnodes/textures/testnodes_line_straight.png
new file mode 100644
index 000000000..4f33d9c6d
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_line_straight.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_line_t_junction.png b/games/devtest/mods/testnodes/textures/testnodes_line_t_junction.png
new file mode 100644
index 000000000..5668f6ea3
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_line_t_junction.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquid.png b/games/devtest/mods/testnodes/textures/testnodes_liquid.png
new file mode 100644
index 000000000..98ab270c2
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquid.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidflowing.png b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing.png
new file mode 100644
index 000000000..1736b89ba
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r0.png b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r0.png
new file mode 100644
index 000000000..e8a61039d
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r0.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r1.png b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r1.png
new file mode 100644
index 000000000..b4e45b42f
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r1.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r2.png b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r2.png
new file mode 100644
index 000000000..e064b8f2d
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r2.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r3.png b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r3.png
new file mode 100644
index 000000000..bef773968
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r3.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r4.png b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r4.png
new file mode 100644
index 000000000..de1001b2d
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r4.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r5.png b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r5.png
new file mode 100644
index 000000000..97b422e9a
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r5.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r6.png b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r6.png
new file mode 100644
index 000000000..4cd8e4e8e
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r6.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r7.png b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r7.png
new file mode 100644
index 000000000..711dd961c
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r7.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r8.png b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r8.png
new file mode 100644
index 000000000..9cf22b8ca
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidflowing_r8.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidsource.png b/games/devtest/mods/testnodes/textures/testnodes_liquidsource.png
new file mode 100644
index 000000000..b3f29b702
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidsource.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r0.png b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r0.png
new file mode 100644
index 000000000..da0a99623
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r0.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r1.png b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r1.png
new file mode 100644
index 000000000..66bf2be8f
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r1.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r2.png b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r2.png
new file mode 100644
index 000000000..fc5f65cb6
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r2.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r3.png b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r3.png
new file mode 100644
index 000000000..0f46e291e
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r3.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r4.png b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r4.png
new file mode 100644
index 000000000..0693a04d7
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r4.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r5.png b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r5.png
new file mode 100644
index 000000000..cc9d03992
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r5.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r6.png b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r6.png
new file mode 100644
index 000000000..e276a07ae
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r6.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r7.png b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r7.png
new file mode 100644
index 000000000..3534a4b15
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r7.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r8.png b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r8.png
new file mode 100644
index 000000000..ee1a8b169
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_liquidsource_r8.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes.png b/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes.png
new file mode 100644
index 000000000..51b8e0025
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes2.png b/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes2.png
new file mode 100644
index 000000000..9ea65c1ec
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes2.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes3.png b/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes3.png
new file mode 100644
index 000000000..96bc55ac5
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes3.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes4.png b/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes4.png
new file mode 100644
index 000000000..fca33727d
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_mesh_stripes4.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_node.png b/games/devtest/mods/testnodes/textures/testnodes_node.png
new file mode 100644
index 000000000..145099b3a
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_node.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_node_falling.png b/games/devtest/mods/testnodes/textures/testnodes_node_falling.png
new file mode 100644
index 000000000..44153185c
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_node_falling.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_nodebox.png b/games/devtest/mods/testnodes/textures/testnodes_nodebox.png
new file mode 100644
index 000000000..66e8dd663
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_nodebox.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_nojump_side.png b/games/devtest/mods/testnodes/textures/testnodes_nojump_side.png
new file mode 100644
index 000000000..6a64cfff0
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_nojump_side.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_nojump_top.png b/games/devtest/mods/testnodes/textures/testnodes_nojump_top.png
new file mode 100644
index 000000000..fe770838f
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_nojump_top.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_normal.png b/games/devtest/mods/testnodes/textures/testnodes_normal.png
new file mode 100644
index 000000000..a1acfd9fd
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_normal.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_normal1.png b/games/devtest/mods/testnodes/textures/testnodes_normal1.png
new file mode 100644
index 000000000..edaba77e4
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_normal1.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_normal2.png b/games/devtest/mods/testnodes/textures/testnodes_normal2.png
new file mode 100644
index 000000000..0080a9ee7
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_normal2.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_normal3.png b/games/devtest/mods/testnodes/textures/testnodes_normal3.png
new file mode 100644
index 000000000..0426ab216
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_normal3.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_normal4.png b/games/devtest/mods/testnodes/textures/testnodes_normal4.png
new file mode 100644
index 000000000..0d1922eb6
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_normal4.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_normal5.png b/games/devtest/mods/testnodes/textures/testnodes_normal5.png
new file mode 100644
index 000000000..0b7dcd2da
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_normal5.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_normal6.png b/games/devtest/mods/testnodes/textures/testnodes_normal6.png
new file mode 100644
index 000000000..f34a67d71
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_normal6.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_palette_facedir.png b/games/devtest/mods/testnodes/textures/testnodes_palette_facedir.png
new file mode 100644
index 000000000..8cf47bbbe
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_palette_facedir.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_palette_full.png b/games/devtest/mods/testnodes/textures/testnodes_palette_full.png
new file mode 100644
index 000000000..e0a5f8b34
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_palette_full.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_palette_wallmounted.png b/games/devtest/mods/testnodes/textures/testnodes_palette_wallmounted.png
new file mode 100644
index 000000000..682f3ac84
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_palette_wallmounted.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike.png
new file mode 100644
index 000000000..cc464444d
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_degrotate.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_degrotate.png
new file mode 100644
index 000000000..01c81da8e
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_degrotate.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_leveled.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_leveled.png
new file mode 100644
index 000000000..53504dbcd
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_leveled.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_meshoptions.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_meshoptions.png
new file mode 100644
index 000000000..d504d459f
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_meshoptions.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted.png
new file mode 100644
index 000000000..79cf2125e
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base.png
new file mode 100644
index 000000000..b9ee9e5be
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_degrotate.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_degrotate.png
new file mode 100644
index 000000000..85311cb2c
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_degrotate.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_leveled.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_leveled.png
new file mode 100644
index 000000000..bc602bafe
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_leveled.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_meshoptions.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_meshoptions.png
new file mode 100644
index 000000000..d10002375
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_meshoptions.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_waving.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_waving.png
new file mode 100644
index 000000000..527817bc1
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_waving.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_degrotate.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_degrotate.png
new file mode 100644
index 000000000..45e75bdd3
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_degrotate.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_leveled.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_leveled.png
new file mode 100644
index 000000000..8954b2c34
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_leveled.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_meshoptions.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_meshoptions.png
new file mode 100644
index 000000000..a782d4874
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_meshoptions.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_waving.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_waving.png
new file mode 100644
index 000000000..112a0540f
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_waving.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_waving.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_waving.png
new file mode 100644
index 000000000..b584a8dc9
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_waving.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_rail2_crossing.png b/games/devtest/mods/testnodes/textures/testnodes_rail2_crossing.png
new file mode 100644
index 000000000..530bbba7a
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_rail2_crossing.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_rail2_curved.png b/games/devtest/mods/testnodes/textures/testnodes_rail2_curved.png
new file mode 100644
index 000000000..4ed1ca00f
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_rail2_curved.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_rail2_straight.png b/games/devtest/mods/testnodes/textures/testnodes_rail2_straight.png
new file mode 100644
index 000000000..8749330d8
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_rail2_straight.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_rail2_t_junction.png b/games/devtest/mods/testnodes/textures/testnodes_rail2_t_junction.png
new file mode 100644
index 000000000..0517f6570
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_rail2_t_junction.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_rail_crossing.png b/games/devtest/mods/testnodes/textures/testnodes_rail_crossing.png
new file mode 100644
index 000000000..3916ce1ef
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_rail_crossing.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_rail_curved.png b/games/devtest/mods/testnodes/textures/testnodes_rail_curved.png
new file mode 100644
index 000000000..e44419848
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_rail_curved.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_rail_straight.png b/games/devtest/mods/testnodes/textures/testnodes_rail_straight.png
new file mode 100644
index 000000000..872d04fb9
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_rail_straight.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_rail_t_junction.png b/games/devtest/mods/testnodes/textures/testnodes_rail_t_junction.png
new file mode 100644
index 000000000..7e4af5182
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_rail_t_junction.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_signlike.png b/games/devtest/mods/testnodes/textures/testnodes_signlike.png
new file mode 100644
index 000000000..33ffcba6c
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_signlike.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_slippery.png b/games/devtest/mods/testnodes/textures/testnodes_slippery.png
new file mode 100644
index 000000000..b990468a1
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_slippery.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_street_crossing.png b/games/devtest/mods/testnodes/textures/testnodes_street_crossing.png
new file mode 100644
index 000000000..d6e35ad7a
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_street_crossing.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_street_curved.png b/games/devtest/mods/testnodes/textures/testnodes_street_curved.png
new file mode 100644
index 000000000..251b7fb71
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_street_curved.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_street_straight.png b/games/devtest/mods/testnodes/textures/testnodes_street_straight.png
new file mode 100644
index 000000000..639e24b93
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_street_straight.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_street_t_junction.png b/games/devtest/mods/testnodes/textures/testnodes_street_t_junction.png
new file mode 100644
index 000000000..713621e06
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_street_t_junction.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_sunlight_filter.png b/games/devtest/mods/testnodes/textures/testnodes_sunlight_filter.png
new file mode 100644
index 000000000..b38ea4072
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_sunlight_filter.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_torchlike_ceiling.png b/games/devtest/mods/testnodes/textures/testnodes_torchlike_ceiling.png
new file mode 100644
index 000000000..5d9862cc9
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_torchlike_ceiling.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_torchlike_floor.png b/games/devtest/mods/testnodes/textures/testnodes_torchlike_floor.png
new file mode 100644
index 000000000..adf1e002d
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_torchlike_floor.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_torchlike_wall.png b/games/devtest/mods/testnodes/textures/testnodes_torchlike_wall.png
new file mode 100644
index 000000000..cb442b22d
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_torchlike_wall.png
Binary files differ
diff --git a/games/devtest/mods/testpathfinder/README.md b/games/devtest/mods/testpathfinder/README.md
new file mode 100644
index 000000000..2b9d46e70
--- /dev/null
+++ b/games/devtest/mods/testpathfinder/README.md
@@ -0,0 +1,15 @@
+# Pathfinder Tester
+
+Usage:
+
+Use the Pathfinder Tester tool (`testpathfinder:testpathfinder`).
+Here's how it works:
+
+* Place on node: Set destination position
+* Punch: Find path
+* Sneak+punch: Select pathfinding algorithm
+
+Information will be shown in chat. If a path was found, all waypoints
+will be shown for a few seconds.
+
+See `init.lua` for config variables.
diff --git a/games/devtest/mods/testpathfinder/init.lua b/games/devtest/mods/testpathfinder/init.lua
new file mode 100644
index 000000000..f94848236
--- /dev/null
+++ b/games/devtest/mods/testpathfinder/init.lua
@@ -0,0 +1,132 @@
+local S = minetest.get_translator("testpathfinder")
+
+-- Config parameters
+
+-- Maximum direct distance between start and end
+local MAX_DIRECT_DISTANCE = 64
+-- Maximum search distance
+local MAX_SEARCH_DISTANCE = 32
+-- Maximum permitted jump height
+local MAX_JUMP = 1
+-- Maximum permitted drop height
+local MAX_DROP = 5
+-- If true, mod won't refuse to run pathfinder even at long distances
+local IGNORE_MAX_DISTANCE_SAFEGUARD = false
+
+-- End of config parameters
+
+local timer = 0
+local algorithms = {
+ "A*_noprefetch",
+ "A*",
+ "Dijkstra",
+}
+
+local function find_path_for_player(player, itemstack)
+ local meta = itemstack:get_meta()
+ if not meta then
+ return
+ end
+ local x = meta:get_int("pos_x")
+ local y = meta:get_int("pos_y")
+ local z = meta:get_int("pos_z")
+ local algo = meta:get_int("algorithm")
+ if x and y and z then
+ local pos2 = {x=x, y=y, z=z}
+ algo = algorithms[algo+1]
+ local pos1 = vector.round(player:get_pos())
+ -- Don't bother calling pathfinder for high distance to avoid freezing
+ if (not IGNORE_MAX_DISTANCE_SAFEGUARD) and (vector.distance(pos1, pos2) > MAX_DIRECT_DISTANCE) then
+ minetest.chat_send_player(player:get_player_name(), S("Destination too far away! Set a destination (via placing) within a distance of @1 and try again!", MAX_DIRECT_DISTANCE))
+ return
+ end
+ local str = S("Path from @1 to @2:",
+ minetest.pos_to_string(pos1),
+ minetest.pos_to_string(pos2))
+
+ minetest.chat_send_player(player:get_player_name(), str)
+ local time_start = minetest.get_us_time()
+ local path = minetest.find_path(pos1, pos2, MAX_SEARCH_DISTANCE, MAX_JUMP, MAX_DROP, algo)
+ local time_end = minetest.get_us_time()
+ local time_diff = time_end - time_start
+ str = ""
+ if not path then
+ minetest.chat_send_player(player:get_player_name(), S("No path!"))
+ minetest.chat_send_player(player:get_player_name(), S("Time: @1 ms", time_diff/1000))
+ return
+ end
+ for s=1, #path do
+ str = str .. minetest.pos_to_string(path[s]) .. "\n"
+ local t
+ if s == #path then
+ t = "testpathfinder_waypoint_end.png"
+ elseif s == 1 then
+ t = "testpathfinder_waypoint_start.png"
+ else
+ local c = math.floor(((#path-s)/#path)*255)
+ t = string.format("testpathfinder_waypoint.png^[multiply:#%02x%02x00", 0xFF-c, c)
+ end
+ minetest.add_particle({
+ pos = path[s],
+ expirationtime = 5 + 0.2 * s,
+ playername = player:get_player_name(),
+ glow = minetest.LIGHT_MAX,
+ texture = t,
+ size = 3,
+ })
+ end
+ minetest.chat_send_player(player:get_player_name(), str)
+ minetest.chat_send_player(player:get_player_name(), S("Path length: @1", #path))
+ minetest.chat_send_player(player:get_player_name(), S("Time: @1 ms", time_diff/1000))
+ end
+end
+
+local function set_destination(itemstack, user, pointed_thing)
+ if not (user and user:is_player()) then
+ return
+ end
+ local name = user:get_player_name()
+ local obj
+ local meta = itemstack:get_meta()
+ if pointed_thing.type == "node" then
+ local pos = pointed_thing.above
+ meta:set_int("pos_x", pos.x)
+ meta:set_int("pos_y", pos.y)
+ meta:set_int("pos_z", pos.z)
+ minetest.chat_send_player(user:get_player_name(), S("Destination set to @1", minetest.pos_to_string(pos)))
+ return itemstack
+ end
+end
+
+local function find_path_or_set_algorithm(itemstack, user, pointed_thing)
+ if not (user and user:is_player()) then
+ return
+ end
+ local ctrl = user:get_player_control()
+ -- No sneak: Find path
+ if not ctrl.sneak then
+ find_path_for_player(user, itemstack)
+ else
+ -- Sneak: Set algorithm
+ local meta = itemstack:get_meta()
+ local algo = meta:get_int("algorithm")
+ algo = (algo + 1) % #algorithms
+ meta:set_int("algorithm", algo)
+ minetest.chat_send_player(user:get_player_name(), S("Algorithm: @1", algorithms[algo+1]))
+ return itemstack
+ end
+end
+
+-- Punch: Find path
+-- Sneak+punch: Select pathfinding algorithm
+-- Place: Select destination node
+minetest.register_tool("testpathfinder:testpathfinder", {
+ description = S("Pathfinder Tester"),
+ inventory_image = "testpathfinder_testpathfinder.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = find_path_or_set_algorithm,
+ on_secondary_use = set_destination,
+ on_place = set_destination,
+})
+
+
diff --git a/games/devtest/mods/testpathfinder/mod.conf b/games/devtest/mods/testpathfinder/mod.conf
new file mode 100644
index 000000000..e6034ae8c
--- /dev/null
+++ b/games/devtest/mods/testpathfinder/mod.conf
@@ -0,0 +1,2 @@
+name = testpathfinder
+description = Tool to test Minetest's pathfinder function
diff --git a/games/devtest/mods/testpathfinder/textures/testpathfinder_testpathfinder.png b/games/devtest/mods/testpathfinder/textures/testpathfinder_testpathfinder.png
new file mode 100644
index 000000000..37eef0565
--- /dev/null
+++ b/games/devtest/mods/testpathfinder/textures/testpathfinder_testpathfinder.png
Binary files differ
diff --git a/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint.png b/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint.png
new file mode 100644
index 000000000..661dcf906
--- /dev/null
+++ b/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint.png
Binary files differ
diff --git a/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_end.png b/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_end.png
new file mode 100644
index 000000000..41a1cc549
--- /dev/null
+++ b/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_end.png
Binary files differ
diff --git a/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_start.png b/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_start.png
new file mode 100644
index 000000000..a22e31c3b
--- /dev/null
+++ b/games/devtest/mods/testpathfinder/textures/testpathfinder_waypoint_start.png
Binary files differ
diff --git a/games/devtest/mods/testtools/README.md b/games/devtest/mods/testtools/README.md
new file mode 100644
index 000000000..9cfe29ea4
--- /dev/null
+++ b/games/devtest/mods/testtools/README.md
@@ -0,0 +1,99 @@
+# Test Tools readme
+
+Test Tools is a mod for developers that adds a bunch of tools to directly manipulate nodes and entities. This is great for quickly testing out stuff.
+
+Here's the list of tools:
+
+## Remover
+Removes nodes and non-player entities that you punch.
+
+## Node Setter
+Replace a node with another one.
+
+First, punch a node you want to remember.
+Then rightclick any other node to replace it with the node you remembered.
+
+If you rightclick while pointing nothing, you can manually enter the node and param2.
+
+## Param2 Tool
+Change the value param2 of nodes.
+
+* Punch: Add 1 to param2
+* Sneak+Punch: Add 8 to param2
+* Place: Subtract 1 from param2
+* Sneak+Place: Subtract 8 from param2
+
+Note: Use the debug screen (F5) to see the param2 of the pointed node.
+
+## Falling Node Tool
+Turns nodes into falling nodes.
+
+Usage:
+
+* Punch node: Make it fall
+* Place: Try to teleport up to 2 units upwards, then make it fall
+
+## Entity Rotator
+Changes the entity rotation (with `set_rotation`).
+
+Usage:
+
+* Punch entity: Rotate yaw
+* Punch entity while holding down “Sneak†key: Rotate pitch
+* Punch entity while holding down “Special†key (aka “Auxâ€): Rotate roll
+
+Each usage rotates the entity by 22.5°.
+
+## Entity Spawner
+Spawns entities.
+
+Usage:
+
+* Punch to select entity or spawn one directly
+* Place to place selected entity
+
+## Object Property Editor
+Edits properties of objects.
+
+Usage:
+
+* Punch object to open a formspec that allows you to view and edit properties
+* Punch air to edit properties of your own player object
+
+To edit a property, select it in the list, enter a new value (in Lua syntax)
+and hit “Submitâ€.
+
+## Object Attacher
+Allows you to attach an object to another one.
+
+Basic usage:
+* First select the parent object, then the child object that should be attached
+* Selecting an object is done by punching it
+* Sneak+punch to detach selected object
+* If you punch air, you select yourself
+
+Configuration:
+* Place: Increase attachment Y position
+* Sneak+place: decrease attachment Y position
+* Aux+place: Increase attachment X rotation
+* Aux+Sneak+Rightclick: Decrease attachment X rotation
+
+Hint: To detach all objects nearby you (including on yourself), use the
+`/detach` server command.
+
+## Object Mover
+Move an object by a given distance.
+
+Usage:
+* Punch object into the direction you want to move it
+* Sneak+punch: Move object towards you
+* Place: Increase move distance
+* Sneak+place: Decrease move distance
+
+## Entity Visual Scaler
+Change visual size of entities
+
+Usage:
+
+* Punch entity to increase visual size
+* Sneak+punch entity to decrease visual size
diff --git a/games/devtest/mods/testtools/init.lua b/games/devtest/mods/testtools/init.lua
new file mode 100644
index 000000000..d68a086b9
--- /dev/null
+++ b/games/devtest/mods/testtools/init.lua
@@ -0,0 +1,692 @@
+local S = minetest.get_translator("testtools")
+local F = minetest.formspec_escape
+
+-- TODO: Add a Node Metadata tool
+
+-- Param 2 Tool: Set param2 value of tools
+-- Punch: +1
+-- Punch+Shift: +8
+-- Place: -1
+-- Place+Shift: -8
+minetest.register_tool("testtools:param2tool", {
+ description = S("Param2 Tool"),
+ inventory_image = "testtools_param2tool.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = function(itemstack, user, pointed_thing)
+ local pos = minetest.get_pointed_thing_position(pointed_thing)
+ if pointed_thing.type ~= "node" or (not pos) then
+ return
+ end
+ local add = 1
+ if user then
+ local ctrl = user:get_player_control()
+ if ctrl.sneak then
+ add = 8
+ end
+ end
+ local node = minetest.get_node(pos)
+ node.param2 = node.param2 + add
+ minetest.swap_node(pos, node)
+ end,
+ on_place = function(itemstack, user, pointed_thing)
+ local pos = minetest.get_pointed_thing_position(pointed_thing)
+ if pointed_thing.type ~= "node" or (not pos) then
+ return
+ end
+ local add = -1
+ if user then
+ local ctrl = user:get_player_control()
+ if ctrl.sneak then
+ add = -8
+ end
+ end
+ local node = minetest.get_node(pos)
+ node.param2 = node.param2 + add
+ minetest.swap_node(pos, node)
+ end,
+})
+
+minetest.register_tool("testtools:node_setter", {
+ description = S("Node Setter"),
+ inventory_image = "testtools_node_setter.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = function(itemstack, user, pointed_thing)
+ local pos = minetest.get_pointed_thing_position(pointed_thing)
+ if pointed_thing.type == "nothing" then
+ local meta = itemstack:get_meta()
+ meta:set_string("node", "air")
+ meta:set_int("node_param2", 0)
+ if user and user:is_player() then
+ minetest.chat_send_player(user:get_player_name(), S("Now placing: @1 (param2=@2)", "air", 0))
+ end
+ return itemstack
+ elseif pointed_thing.type ~= "node" or (not pos) then
+ return
+ end
+ local node = minetest.get_node(pos)
+ local meta = itemstack:get_meta()
+ meta:set_string("node", node.name)
+ meta:set_int("node_param2", node.param2)
+ if user and user:is_player() then
+ minetest.chat_send_player(user:get_player_name(), S("Now placing: @1 (param2=@2)", node.name, node.param2))
+ end
+ return itemstack
+ end,
+ on_secondary_use = function(itemstack, user, pointed_thing)
+ local meta = itemstack:get_meta()
+ local nodename = meta:get_string("node") or ""
+ local param2 = meta:get_int("node_param2") or 0
+
+ minetest.show_formspec(user:get_player_name(), "testtools:node_setter",
+ "size[4,4]"..
+ "field[0.5,1;3,1;nodename;"..F(S("Node name (itemstring):"))..";"..F(nodename).."]"..
+ "field[0.5,2;3,1;param2;"..F(S("param2:"))..";"..F(tostring(param2)).."]"..
+ "button_exit[0.5,3;3,1;submit;"..F(S("Submit")).."]"
+ )
+ end,
+ on_place = function(itemstack, user, pointed_thing)
+ local pos = minetest.get_pointed_thing_position(pointed_thing)
+ local meta = itemstack:get_meta()
+ local nodename = meta:get_string("node")
+ if nodename == "" and user and user:is_player() then
+ minetest.chat_send_player(user:get_player_name(), S("Punch a node first!"))
+ return
+ end
+ local param2 = meta:get_int("node_param2")
+ if not param2 then
+ param2 = 0
+ end
+ local node = { name = nodename, param2 = param2 }
+ if not minetest.registered_nodes[nodename] then
+ minetest.chat_send_player(user:get_player_name(), S("Cannot set unknown node: @1", nodename))
+ return
+ end
+ minetest.set_node(pos, node)
+ 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"),
+ inventory_image = "testtools_remover.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = function(itemstack, user, pointed_thing)
+ local pos = minetest.get_pointed_thing_position(pointed_thing)
+ if pointed_thing.type == "node" and pos ~= nil then
+ minetest.remove_node(pos)
+ elseif pointed_thing.type == "object" then
+ local obj = pointed_thing.ref
+ if not obj:is_player() then
+ obj:remove()
+ end
+ end
+ end,
+})
+
+minetest.register_tool("testtools:falling_node_tool", {
+ description = S("Falling Node Tool"),
+ inventory_image = "testtools_falling_node_tool.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_place = function(itemstack, user, pointed_thing)
+ -- Teleport node 1-2 units upwards (if possible) and make it fall
+ local pos = minetest.get_pointed_thing_position(pointed_thing)
+ if pointed_thing.type ~= "node" or (not pos) then
+ return
+ end
+ local ok = false
+ local highest
+ for i=1,2 do
+ local above = {x=pos.x,y=pos.y+i,z=pos.z}
+ local n2 = minetest.get_node(above)
+ local def2 = minetest.registered_nodes[n2.name]
+ if def2 and (not def2.walkable) then
+ highest = above
+ else
+ break
+ end
+ end
+ if highest then
+ local node = minetest.get_node(pos)
+ local metatable = minetest.get_meta(pos):to_table()
+ minetest.remove_node(pos)
+ minetest.set_node(highest, node)
+ local meta_highest = minetest.get_meta(highest)
+ meta_highest:from_table(metatable)
+ ok = minetest.spawn_falling_node(highest)
+ else
+ ok = minetest.spawn_falling_node(pos)
+ end
+ if not ok and user and user:is_player() then
+ minetest.chat_send_player(user:get_player_name(), S("Falling node could not be spawned!"))
+ end
+ end,
+ on_use = function(itemstack, user, pointed_thing)
+ local pos = minetest.get_pointed_thing_position(pointed_thing)
+ if pointed_thing.type ~= "node" or (not pos) then
+ return
+ end
+ local ok = minetest.spawn_falling_node(pos)
+ if not ok and user and user:is_player() then
+ minetest.chat_send_player(user:get_player_name(), S("Falling node could not be spawned!"))
+ end
+ end,
+})
+
+minetest.register_tool("testtools:rotator", {
+ description = S("Entity Rotator"),
+ inventory_image = "testtools_entity_rotator.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type ~= "object" then
+ return
+ end
+ local obj = pointed_thing.ref
+ if obj:is_player() then
+ -- No player rotation
+ return
+ else
+ local axis = "y"
+ if user and user:is_player() then
+ local ctrl = user:get_player_control()
+ if ctrl.sneak then
+ axis = "x"
+ elseif ctrl.aux1 then
+ axis = "z"
+ end
+ end
+ local rot = obj:get_rotation()
+ rot[axis] = rot[axis] + math.pi/8
+ if rot[axis] > math.pi*2 then
+ rot[axis] = rot[axis] - math.pi*2
+ end
+ obj:set_rotation(rot)
+ end
+ end,
+})
+
+local mover_config = function(itemstack, user, pointed_thing)
+ if not (user and user:is_player()) then
+ return
+ end
+ local name = user:get_player_name()
+ local ctrl = user:get_player_control()
+ local meta = itemstack:get_meta()
+ local dist = 1.0
+ if meta:contains("distance") then
+ dist = meta:get_int("distance")
+ end
+ if ctrl.sneak then
+ dist = dist - 1
+ else
+ dist = dist + 1
+ end
+ meta:set_int("distance", dist)
+ minetest.chat_send_player(user:get_player_name(), S("distance=@1/10", dist*2))
+ return itemstack
+end
+
+minetest.register_tool("testtools:object_mover", {
+ description = S("Object Mover"),
+ inventory_image = "testtools_object_mover.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_place = mover_config,
+ on_secondary_use = mover_config,
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type ~= "object" then
+ return
+ end
+ local obj = pointed_thing.ref
+ if not (user and user:is_player()) then
+ return
+ end
+ local yaw = user:get_look_horizontal()
+ local dir = minetest.yaw_to_dir(yaw)
+ local pos = obj:get_pos()
+ local pitch = user:get_look_vertical()
+ if pitch > 0.25 * math.pi then
+ dir.y = -1
+ dir.x = 0
+ dir.z = 0
+ elseif pitch < -0.25 * math.pi then
+ dir.y = 1
+ dir.x = 0
+ dir.z = 0
+ end
+ local ctrl = user:get_player_control()
+ if ctrl.sneak then
+ dir = vector.multiply(dir, -1)
+ end
+ local meta = itemstack:get_meta()
+ if meta:contains("distance") then
+ local dist = meta:get_int("distance")
+ dir = vector.multiply(dir, dist*0.2)
+ end
+ pos = vector.add(pos, dir)
+ obj:set_pos(pos)
+ end,
+})
+
+
+
+minetest.register_tool("testtools:entity_scaler", {
+ description = S("Entity Visual Scaler"),
+ inventory_image = "testtools_entity_scaler.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type ~= "object" then
+ return
+ end
+ local obj = pointed_thing.ref
+ if obj:is_player() then
+ -- No player scaling
+ return
+ else
+ local diff = 0.1
+ if user and user:is_player() then
+ local ctrl = user:get_player_control()
+ if ctrl.sneak then
+ diff = -0.1
+ end
+ end
+ local prop = obj:get_properties()
+ if not prop.visual_size then
+ prop.visual_size = { x=1, y=1, z=1 }
+ else
+ prop.visual_size = { x=prop.visual_size.x+diff, y=prop.visual_size.y+diff, z=prop.visual_size.z+diff }
+ if prop.visual_size.x <= 0.1 then
+ prop.visual_size.x = 0.1
+ end
+ if prop.visual_size.y <= 0.1 then
+ prop.visual_size.y = 0.1
+ end
+ if prop.visual_size.z <= 0.1 then
+ prop.visual_size.z = 0.1
+ end
+ end
+ obj:set_properties(prop)
+ end
+ end,
+})
+
+local selections = {}
+local entity_list
+local function get_entity_list()
+ if entity_list then
+ return entity_list
+ end
+ local ents = minetest.registered_entities
+ local list = {}
+ for k,_ in pairs(ents) do
+ table.insert(list, k)
+ end
+ table.sort(list)
+ entity_list = list
+ return entity_list
+end
+minetest.register_tool("testtools:entity_spawner", {
+ description = S("Entity Spawner"),
+ inventory_image = "testtools_entity_spawner.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_place = function(itemstack, user, pointed_thing)
+ local name = user:get_player_name()
+ if selections[name] and pointed_thing.type == "node" then
+ local pos = pointed_thing.above
+ minetest.add_entity(pos, get_entity_list()[selections[name]])
+ end
+ end,
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type == "object" then
+ return
+ end
+ if user and user:is_player() then
+ local list = table.concat(get_entity_list(), ",")
+ local name = user:get_player_name()
+ local sel = selections[name] or ""
+ minetest.show_formspec(name, "testtools:entity_list",
+ "size[9,9]"..
+ "textlist[0,0;9,8;entity_list;"..list..";"..sel..";false]"..
+ "button[0,8;4,1;spawn;Spawn entity]"
+ )
+ end
+ end,
+})
+
+local function prop_to_string(property)
+ if type(property) == "string" then
+ return "\"" .. property .. "\""
+ elseif type(property) == "table" then
+ return tostring(dump(property)):gsub("\n", "")
+ else
+ return tostring(property)
+ end
+end
+
+local property_formspec_data = {}
+local property_formspec_index = {}
+local selected_objects = {}
+local function get_object_properties_form(obj, playername)
+ if not playername then return "" end
+ local props = obj:get_properties()
+ local str = ""
+ property_formspec_data[playername] = {}
+ local proplist = {}
+ for k,_ in pairs(props) do
+ table.insert(proplist, k)
+ end
+ table.sort(proplist)
+ for p=1, #proplist do
+ local k = proplist[p]
+ local v = props[k]
+ local newline = ""
+ newline = k .. " = "
+ newline = newline .. prop_to_string(v)
+ str = str .. F(newline)
+ if p < #proplist then
+ str = str .. ","
+ end
+ table.insert(property_formspec_data[playername], k)
+ end
+ return str
+end
+
+local editor_formspec_selindex = {}
+
+local editor_formspec = function(playername, obj, value, sel)
+ if not value then
+ value = ""
+ end
+ if not sel then
+ sel = ""
+ end
+ local list = get_object_properties_form(obj, playername)
+ local title
+ if obj:is_player() then
+ title = S("Object properties of player “@1â€", obj:get_player_name())
+ else
+ local ent = obj:get_luaentity()
+ title = S("Object properties of @1", ent.name)
+ end
+ minetest.show_formspec(playername, "testtools:object_editor",
+ "size[9,9]"..
+ "label[0,0;"..F(title).."]"..
+ "textlist[0,0.5;9,7.5;object_props;"..list..";"..sel..";false]"..
+ "field[0.2,8.75;8,1;value;"..F(S("Value"))..";"..F(value).."]"..
+ "field_close_on_enter[value;false]"..
+ "button[8,8.5;1,1;submit;"..F(S("Submit")).."]"
+ )
+end
+
+minetest.register_tool("testtools:object_editor", {
+ description = S("Object Property Editor"),
+ inventory_image = "testtools_object_editor.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()
+
+ if pointed_thing.type == "object" then
+ selected_objects[name] = pointed_thing.ref
+ elseif pointed_thing.type == "nothing" then
+ -- Use on yourself if pointing nothing
+ selected_objects[name] = user
+ else
+ -- Unsupported pointed thing
+ return
+ end
+
+ local sel = editor_formspec_selindex[name]
+ local val
+ if selected_objects[name] and selected_objects[name]:get_properties() then
+ local props = selected_objects[name]:get_properties()
+ local keys = property_formspec_data[name]
+ if property_formspec_index[name] and props then
+ local key = keys[property_formspec_index[name]]
+ val = prop_to_string(props[key])
+ end
+ end
+
+ editor_formspec(name, selected_objects[name], val, sel)
+ end
+ end,
+})
+
+local ent_parent = {}
+local ent_child = {}
+local DEFAULT_ATTACH_OFFSET_Y = 11
+
+local attacher_config = function(itemstack, user, pointed_thing)
+ if not (user and user:is_player()) then
+ return
+ end
+ if pointed_thing.type == "object" then
+ return
+ end
+ local name = user:get_player_name()
+ local ctrl = user:get_player_control()
+ local meta = itemstack:get_meta()
+ if ctrl.aux1 then
+ local rot_x = meta:get_float("rot_x")
+ if ctrl.sneak then
+ rot_x = rot_x - math.pi/8
+ else
+ rot_x = rot_x + math.pi/8
+ end
+ if rot_x > 6.2 then
+ rot_x = 0
+ elseif rot_x < 0 then
+ rot_x = math.pi * (15/8)
+ end
+ minetest.chat_send_player(name, S("rotation=@1", minetest.pos_to_string({x=rot_x,y=0,z=0})))
+ meta:set_float("rot_x", rot_x)
+ else
+ local pos_y
+ if meta:contains("pos_y") then
+ pos_y = meta:get_int("pos_y")
+ else
+ pos_y = DEFAULT_ATTACH_OFFSET_Y
+ end
+ if ctrl.sneak then
+ pos_y = pos_y - 1
+ else
+ pos_y = pos_y + 1
+ end
+ minetest.chat_send_player(name, S("position=@1", minetest.pos_to_string({x=0,y=pos_y,z=0})))
+ meta:set_int("pos_y", pos_y)
+ end
+ return itemstack
+end
+
+minetest.register_tool("testtools:object_attacher", {
+ description = S("Object Attacher"),
+ inventory_image = "testtools_object_attacher.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_place = attacher_config,
+ on_secondary_use = attacher_config,
+ on_use = function(itemstack, user, pointed_thing)
+ if user and user:is_player() then
+ local name = user:get_player_name()
+ local selected_object
+ if pointed_thing.type == "object" then
+ selected_object = pointed_thing.ref
+ elseif pointed_thing.type == "nothing" then
+ selected_object = user
+ else
+ return
+ end
+ local ctrl = user:get_player_control()
+ if ctrl.sneak then
+ if selected_object:get_attach() then
+ selected_object:set_detach()
+ minetest.chat_send_player(name, S("Object detached!"))
+ else
+ minetest.chat_send_player(name, S("Object is not attached!"))
+ end
+ return
+ end
+ local parent = ent_parent[name]
+ local child = ent_child[name]
+ local ename = S("<unknown>")
+ if not parent then
+ parent = selected_object
+ ent_parent[name] = parent
+ elseif not child then
+ child = selected_object
+ ent_child[name] = child
+ end
+ local entity = selected_object:get_luaentity()
+ if entity then
+ ename = entity.name
+ elseif selected_object:is_player() then
+ ename = selected_object:get_player_name()
+ end
+ if selected_object == parent then
+ minetest.chat_send_player(name, S("Parent object selected: @1", ename))
+ elseif selected_object == child then
+ minetest.chat_send_player(name, S("Child object selected: @1", ename))
+ end
+ if parent and child then
+ if parent == child then
+ minetest.chat_send_player(name, S("Can't attach an object to itself!"))
+ ent_parent[name] = nil
+ ent_child[name] = nil
+ return
+ end
+ local meta = itemstack:get_meta()
+ local y
+ if meta:contains("pos_y") then
+ y = meta:get_int("pos_y")
+ else
+ y = DEFAULT_ATTACH_OFFSET_Y
+ end
+ local rx = meta:get_float("rot_x") or 0
+ local offset = {x=0,y=y,z=0}
+ local angle = {x=rx,y=0,z=0}
+ child:set_attach(parent, "", offset, angle)
+ local check_parent = child:get_attach()
+ if check_parent then
+ minetest.chat_send_player(name, S("Object attached! position=@1, rotation=@2",
+ minetest.pos_to_string(offset), minetest.pos_to_string(angle)))
+ else
+ minetest.chat_send_player(name, S("Attachment failed!"))
+ end
+ ent_parent[name] = nil
+ ent_child[name] = nil
+ end
+ 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
+ -- someone is actually crazy enough to run this on a public server.
+ local privs = minetest.get_player_privs(player:get_player_name())
+ if not privs.server then
+ return false, "You need 'server' privilege to change object properties!"
+ end
+ if not param then
+ return false, "Failed: parameter is nil"
+ end
+ --[[ DANGER ZONE ]]
+ -- Interpret string as Lua value
+ local func, errormsg = loadstring("return (" .. param .. ")")
+ if not func then
+ return false, "Failed: " .. errormsg
+ end
+
+ -- Apply sandbox here using setfenv
+ setfenv(func, {})
+
+ -- Run it
+ local good, errOrResult = pcall(func)
+ if not good then
+ -- A Lua error was thrown
+ return false, "Failed: " .. errOrResult
+ end
+
+ -- errOrResult will be the value
+ return true, errOrResult
+end
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ if not (player and player:is_player()) then
+ return
+ end
+ if formname == "testtools:entity_list" then
+ local name = player:get_player_name()
+ if fields.entity_list then
+ local expl = minetest.explode_textlist_event(fields.entity_list)
+ if expl.type == "DCL" then
+ local pos = vector.add(player:get_pos(), {x=0,y=1,z=0})
+ selections[name] = expl.index
+ minetest.add_entity(pos, get_entity_list()[expl.index])
+ return
+ elseif expl.type == "CHG" then
+ selections[name] = expl.index
+ return
+ end
+ elseif fields.spawn and selections[name] then
+ local pos = vector.add(player:get_pos(), {x=0,y=1,z=0})
+ minetest.add_entity(pos, get_entity_list()[selections[name]])
+ return
+ end
+ elseif formname == "testtools:object_editor" then
+ local name = player:get_player_name()
+ if fields.object_props then
+ local expl = minetest.explode_textlist_event(fields.object_props)
+ if expl.type == "DCL" or expl.type == "CHG" then
+ property_formspec_index[name] = expl.index
+
+ local props = selected_objects[name]:get_properties()
+ local keys = property_formspec_data[name]
+ if (not property_formspec_index[name]) or (not props) then
+ return
+ end
+ local key = keys[property_formspec_index[name]]
+ editor_formspec_selindex[name] = expl.index
+ editor_formspec(name, selected_objects[name], prop_to_string(props[key]), expl.index)
+ return
+ end
+ end
+ if fields.key_enter_field == "value" or fields.submit then
+ local props = selected_objects[name]:get_properties()
+ local keys = property_formspec_data[name]
+ if (not property_formspec_index[name]) or (not props) then
+ return
+ end
+ local key = keys[property_formspec_index[name]]
+ if not key then
+ return
+ end
+ local success, str = use_loadstring(fields.value, player)
+ if success then
+ props[key] = str
+ else
+ minetest.chat_send_player(name, str)
+ return
+ end
+ selected_objects[name]:set_properties(props)
+ local sel = editor_formspec_selindex[name]
+ editor_formspec(name, selected_objects[name], prop_to_string(props[key]), sel)
+ return
+ end
+ end
+end)
diff --git a/games/devtest/mods/testtools/mod.conf b/games/devtest/mods/testtools/mod.conf
new file mode 100644
index 000000000..cde1b2685
--- /dev/null
+++ b/games/devtest/mods/testtools/mod.conf
@@ -0,0 +1,2 @@
+name = testtools
+description = Some tools to directly manipulate nodes and entities. Great for development and testing
diff --git a/games/devtest/mods/testtools/textures/testtools_entity_rotator.png b/games/devtest/mods/testtools/textures/testtools_entity_rotator.png
new file mode 100644
index 000000000..17ebb2d35
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_entity_rotator.png
Binary files differ
diff --git a/games/devtest/mods/testtools/textures/testtools_entity_scaler.png b/games/devtest/mods/testtools/textures/testtools_entity_scaler.png
new file mode 100644
index 000000000..4909c25b0
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_entity_scaler.png
Binary files differ
diff --git a/games/devtest/mods/testtools/textures/testtools_entity_spawner.png b/games/devtest/mods/testtools/textures/testtools_entity_spawner.png
new file mode 100644
index 000000000..6199e0145
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_entity_spawner.png
Binary files differ
diff --git a/games/devtest/mods/testtools/textures/testtools_falling_node_tool.png b/games/devtest/mods/testtools/textures/testtools_falling_node_tool.png
new file mode 100644
index 000000000..30099a7ef
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_falling_node_tool.png
Binary files differ
diff --git a/games/devtest/mods/testtools/textures/testtools_node_setter.png b/games/devtest/mods/testtools/textures/testtools_node_setter.png
new file mode 100644
index 000000000..8599438de
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_node_setter.png
Binary files differ
diff --git a/games/devtest/mods/testtools/textures/testtools_object_attacher.png b/games/devtest/mods/testtools/textures/testtools_object_attacher.png
new file mode 100644
index 000000000..4d9bf6fd1
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_object_attacher.png
Binary files differ
diff --git a/games/devtest/mods/testtools/textures/testtools_object_editor.png b/games/devtest/mods/testtools/textures/testtools_object_editor.png
new file mode 100644
index 000000000..d1ce9cecd
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_object_editor.png
Binary files differ
diff --git a/games/devtest/mods/testtools/textures/testtools_object_mover.png b/games/devtest/mods/testtools/textures/testtools_object_mover.png
new file mode 100644
index 000000000..8b14e9fb2
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_object_mover.png
Binary files differ
diff --git a/games/devtest/mods/testtools/textures/testtools_param2tool.png b/games/devtest/mods/testtools/textures/testtools_param2tool.png
new file mode 100644
index 000000000..dbc663575
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_param2tool.png
Binary files differ
diff --git a/games/devtest/mods/testtools/textures/testtools_remover.png b/games/devtest/mods/testtools/textures/testtools_remover.png
new file mode 100644
index 000000000..73f14cd54
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_remover.png
Binary files differ
diff --git a/games/devtest/mods/tiled/init.lua b/games/devtest/mods/tiled/init.lua
new file mode 100644
index 000000000..68ead8e3a
--- /dev/null
+++ b/games/devtest/mods/tiled/init.lua
@@ -0,0 +1,33 @@
+minetest.register_node("tiled:tiled", {
+ description = "Tiled Node (world-aligned)",
+ tiles = {{
+ name = "tiled_tiled.png",
+ align_style = "world",
+ scale = 8,
+ }},
+ groups = {cracky=3},
+})
+
+minetest.register_node("tiled:tiled_n", {
+ description = "Tiled Node (node-aligned)",
+ tiles = {{
+ name = "tiled_tiled.png",
+ align_style = "node",
+ scale = 8,
+ }},
+ groups = {cracky=3},
+})
+
+stairs.register_stair_and_slab("tiled_n", "tiled:tiled",
+ {cracky=3},
+ {{name="tiled_tiled.png", align_style="node", scale=8}},
+ "Tiled Stair (node-aligned)",
+ "Tiled Slab (node-aligned)")
+
+stairs.register_stair_and_slab("tiled", "tiled:tiled",
+ {cracky=3},
+ {{name="tiled_tiled.png", align_style="world", scale=8}},
+ "Tiled Stair (world-aligned)",
+ "Tiled Slab (world-aligned)")
+
+
diff --git a/games/devtest/mods/tiled/mod.conf b/games/devtest/mods/tiled/mod.conf
new file mode 100644
index 000000000..78b19f93b
--- /dev/null
+++ b/games/devtest/mods/tiled/mod.conf
@@ -0,0 +1,3 @@
+name = tiled
+description = Add nodes with a special texture that spans multiple nodes (aka "world-aligned")
+depends = stairs
diff --git a/games/devtest/mods/tiled/textures/tiled_tiled.png b/games/devtest/mods/tiled/textures/tiled_tiled.png
new file mode 100644
index 000000000..363a26487
--- /dev/null
+++ b/games/devtest/mods/tiled/textures/tiled_tiled.png
Binary files differ
diff --git a/games/devtest/mods/unittests/crafting.lua b/games/devtest/mods/unittests/crafting.lua
new file mode 100644
index 000000000..eff13ce09
--- /dev/null
+++ b/games/devtest/mods/unittests/crafting.lua
@@ -0,0 +1,120 @@
+-- Test minetest.clear_craft function
+local function test_clear_craft()
+ minetest.log("info", "[unittests] Testing minetest.clear_craft")
+ -- Clearing by output
+ minetest.register_craft({
+ output = "foo",
+ recipe = {{"bar"}}
+ })
+ minetest.register_craft({
+ output = "foo 4",
+ recipe = {{"foo", "bar"}}
+ })
+ assert(#minetest.get_all_craft_recipes("foo") == 2)
+ minetest.clear_craft({output="foo"})
+ assert(minetest.get_all_craft_recipes("foo") == nil)
+ -- Clearing by input
+ minetest.register_craft({
+ output = "foo 4",
+ recipe = {{"foo", "bar"}}
+ })
+ assert(#minetest.get_all_craft_recipes("foo") == 1)
+ minetest.clear_craft({recipe={{"foo", "bar"}}})
+ assert(minetest.get_all_craft_recipes("foo") == nil)
+end
+
+-- Test minetest.get_craft_result function
+local function test_get_craft_result()
+ minetest.log("info", "[unittests] Testing minetest.get_craft_result")
+
+ -- normal
+ local input = {
+ method = "normal",
+ width = 2,
+ items = {"", "unittests:coal_lump", "", "unittests:stick"}
+ }
+ minetest.log("info", "[unittests] torch crafting input: "..dump(input))
+ local output, decremented_input = minetest.get_craft_result(input)
+ minetest.log("info", "[unittests] torch crafting output: "..dump(output))
+ minetest.log("info", "[unittests] torch crafting decremented input: "..dump(decremented_input))
+ assert(output.item)
+ minetest.log("info", "[unittests] torch crafting output.item:to_table(): "..dump(output.item:to_table()))
+ assert(output.item:get_name() == "unittests:torch")
+ assert(output.item:get_count() == 4)
+
+ -- fuel
+ input = {
+ method = "fuel",
+ width = 1,
+ items = {"unittests:coal_lump"}
+ }
+ minetest.log("info", "[unittests] coal fuel input: "..dump(input))
+ output, decremented_input = minetest.get_craft_result(input)
+ minetest.log("info", "[unittests] coal fuel output: "..dump(output))
+ minetest.log("info", "[unittests] coal fuel decremented input: "..dump(decremented_input))
+ assert(output.time)
+ assert(output.time > 0)
+
+ -- cooking
+ input = {
+ method = "cooking",
+ width = 1,
+ items = {"unittests:iron_lump"}
+ }
+ minetest.log("info", "[unittests] iron lump cooking input: "..dump(output))
+ output, decremented_input = minetest.get_craft_result(input)
+ minetest.log("info", "[unittests] iron lump cooking output: "..dump(output))
+ minetest.log("info", "[unittests] iron lump cooking decremented input: "..dump(decremented_input))
+ assert(output.time)
+ assert(output.time > 0)
+ assert(output.item)
+ minetest.log("info", "[unittests] iron lump cooking output.item:to_table(): "..dump(output.item:to_table()))
+ assert(output.item:get_name() == "unittests:steel_ingot")
+ assert(output.item:get_count() == 1)
+
+ -- tool repair (repairable)
+ input = {
+ method = "normal",
+ width = 2,
+ -- Using a wear of 60000
+ items = {"unittests:repairable_tool 1 60000", "unittests:repairable_tool 1 60000"}
+ }
+ minetest.log("info", "[unittests] repairable tool crafting input: "..dump(input))
+ output, decremented_input = minetest.get_craft_result(input)
+ minetest.log("info", "[unittests] repairable tool crafting output: "..dump(output))
+ minetest.log("info", "[unittests] repairable tool crafting decremented input: "..dump(decremented_input))
+ assert(output.item)
+ minetest.log("info", "[unittests] repairable tool crafting output.item:to_table(): "..dump(output.item:to_table()))
+ assert(output.item:get_name() == "unittests:repairable_tool")
+ -- Test the wear value.
+ -- See src/craftdef.cpp in Minetest source code for the formula. The formula to calculate
+ -- the value 51187 is:
+ -- 65536 - ((65536-60000)+(65536-60000)) + floor(additonal_wear * 65536 + 0.5) = 51187
+ -- where additional_wear = 0.05
+ assert(output.item:get_wear() == 51187)
+ assert(output.item:get_count() == 1)
+
+ -- failing tool repair (unrepairable)
+ input = {
+ method = "normal",
+ width = 2,
+ items = {"unittests:unrepairable_tool 1 60000", "unittests:unrepairable_tool 1 60000"}
+ }
+ minetest.log("info", "[unittests] unrepairable tool crafting input: "..dump(input))
+ output, decremented_input = minetest.get_craft_result(input)
+ minetest.log("info", "[unittests] unrepairable tool crafting output: "..dump(output))
+ minetest.log("info", "[unittests] unrepairable tool crafting decremented input: "..dump(decremented_input))
+ assert(output.item)
+ minetest.log("info", "[unittests] unrepairable tool crafting output.item:to_table(): "..dump(output.item:to_table()))
+ -- unrepairable tool must not yield any output
+ assert(output.item:get_name() == "")
+
+end
+
+function unittests.test_crafting()
+ test_clear_craft()
+ test_get_craft_result()
+ minetest.log("action", "[unittests] Crafting tests passed!")
+ return true
+end
+
diff --git a/games/devtest/mods/unittests/crafting_prepare.lua b/games/devtest/mods/unittests/crafting_prepare.lua
new file mode 100644
index 000000000..a09734827
--- /dev/null
+++ b/games/devtest/mods/unittests/crafting_prepare.lua
@@ -0,0 +1,88 @@
+-- Registering some dummy items and recipes for the crafting tests
+
+minetest.register_craftitem("unittests:torch", {
+ description = "Crafting Test Item: Torch",
+ inventory_image = "unittests_torch.png",
+
+ groups = { dummy = 1 },
+})
+minetest.register_craftitem("unittests:coal_lump", {
+ description = "Crafting Test Item: Coal Lump",
+ inventory_image = "unittests_coal_lump.png",
+
+ groups = { dummy = 1 },
+})
+minetest.register_craftitem("unittests:stick", {
+ description = "Crafting Test Item: Stick",
+ inventory_image = "unittests_stick.png",
+
+ groups = { dummy = 1 },
+})
+minetest.register_craftitem("unittests:iron_lump", {
+ description = "Crafting Test Item: Iron Lump",
+ inventory_image = "unittests_iron_lump.png",
+
+ groups = { dummy = 1 },
+})
+minetest.register_craftitem("unittests:steel_ingot", {
+ description = "Crafting Test Item: Steel Ingot",
+ inventory_image = "unittests_steel_ingot.png",
+
+ groups = { dummy = 1 },
+})
+
+-- Recipes for tests: Normal crafting, cooking and fuel
+
+minetest.register_craft({
+ output = 'unittests:torch 4',
+ recipe = {
+ {'unittests:coal_lump'},
+ {'unittests:stick'},
+ }
+})
+
+minetest.register_craft({
+ type = "cooking",
+ output = "unittests:steel_ingot",
+ recipe = "unittests:iron_lump",
+})
+
+minetest.register_craft({
+ type = "fuel",
+ recipe = "unittests:coal_lump",
+ burntime = 40,
+})
+
+-- Test tool repair
+minetest.register_craft({
+ type = "toolrepair",
+ additional_wear = -0.05,
+})
+
+-- Test the disable_repair=1 group
+minetest.register_tool("unittests:unrepairable_tool", {
+ description = "Crafting Test Item: Unrepairable Tool",
+ inventory_image = "unittests_unrepairable_tool.png",
+ tool_capabilities = {
+ groupcaps = {
+ cracky = {
+ times = {3, 2, 1},
+ }
+ }
+ },
+ groups = { disable_repair = 1, dummy = 1 }
+})
+
+minetest.register_tool("unittests:repairable_tool", {
+ description = "Crafting Test Item: Repairable Tool",
+ inventory_image = "unittests_repairable_tool.png",
+ tool_capabilities = {
+ groupcaps = {
+ cracky = {
+ times = {3, 2, 1},
+ }
+ }
+ },
+
+ groups = { dummy = 1 },
+})
diff --git a/games/devtest/mods/unittests/init.lua b/games/devtest/mods/unittests/init.lua
new file mode 100644
index 000000000..6c1728420
--- /dev/null
+++ b/games/devtest/mods/unittests/init.lua
@@ -0,0 +1,16 @@
+unittests = {}
+
+local modpath = minetest.get_modpath("unittests")
+dofile(modpath .. "/random.lua")
+dofile(modpath .. "/player.lua")
+dofile(modpath .. "/crafting_prepare.lua")
+dofile(modpath .. "/crafting.lua")
+
+if minetest.settings:get_bool("devtest_unittests_autostart", false) then
+ unittests.test_random()
+ unittests.test_crafting()
+ minetest.register_on_joinplayer(function(player)
+ unittests.test_player(player)
+ end)
+end
+
diff --git a/games/devtest/mods/unittests/mod.conf b/games/devtest/mods/unittests/mod.conf
new file mode 100644
index 000000000..0d5e3c959
--- /dev/null
+++ b/games/devtest/mods/unittests/mod.conf
@@ -0,0 +1,2 @@
+name = unittests
+description = Adds automated unit tests for the engine
diff --git a/games/minimal/mods/test/player.lua b/games/devtest/mods/unittests/player.lua
index 563d0d985..4a681310d 100644
--- a/games/minimal/mods/test/player.lua
+++ b/games/devtest/mods/unittests/player.lua
@@ -1,13 +1,11 @@
--
--- Minimal Development Test
--- Mod: test
---
-
---
-- HP Change Reasons
--
local expect = nil
local function run_hpchangereason_tests(player)
+ local old_hp = player:get_hp()
+
+ player:set_hp(20)
expect = { type = "set_hp", from = "mod" }
player:set_hp(3)
assert(expect == nil)
@@ -19,23 +17,9 @@ local function run_hpchangereason_tests(player)
expect = { df = 3458973454, type = "fall", from = "mod" }
player:set_hp(10, { type = "fall", df = 3458973454 })
assert(expect == nil)
-end
-minetest.register_on_player_hpchange(function(player, hp, reason)
- if not expect then
- return
- end
-
- for key, value in pairs(reason) do
- assert(expect[key] == value)
- end
-
- for key, value in pairs(expect) do
- assert(reason[key] == value)
- end
-
- expect = nil
-end)
+ player:set_hp(old_hp)
+end
local function run_player_meta_tests(player)
local meta = player:get_meta()
@@ -48,7 +32,6 @@ local function run_player_meta_tests(player)
assert(meta2:get_string("foo") == "bar")
assert(meta2:get("foo") == "bar")
assert(meta:equals(meta2))
- assert(player:get_attribute("foo") == "bar")
meta:set_string("bob", "dillan")
assert(meta:get_string("foo") == "bar")
@@ -58,8 +41,6 @@ local function run_player_meta_tests(player)
assert(meta2:get_string("bob") == "dillan")
assert(meta2:get("bob") == "dillan")
assert(meta:equals(meta2))
- assert(player:get_attribute("foo") == "bar")
- assert(player:get_attribute("bob") == "dillan")
meta:set_string("foo", "")
assert(not meta:contains("foo"))
@@ -68,9 +49,28 @@ local function run_player_meta_tests(player)
assert(meta:equals(meta2))
end
-local function run_player_tests(player)
+function unittests.test_player(player)
+ minetest.register_on_player_hpchange(function(player, hp, reason)
+ if not expect then
+ return
+ end
+
+ for key, value in pairs(reason) do
+ assert(expect[key] == value)
+ end
+
+ for key, value in pairs(expect) do
+ assert(reason[key] == value)
+ end
+
+ expect = nil
+ end)
+
run_hpchangereason_tests(player)
run_player_meta_tests(player)
- minetest.chat_send_all("All tests pass!")
+ local msg = "Player tests passed for player '"..player:get_player_name().."'!"
+ minetest.chat_send_all(msg)
+ minetest.log("action", "[unittests] "..msg)
+ return true
end
-minetest.register_on_joinplayer(run_player_tests)
+
diff --git a/games/devtest/mods/unittests/random.lua b/games/devtest/mods/unittests/random.lua
new file mode 100644
index 000000000..f94f0a88e
--- /dev/null
+++ b/games/devtest/mods/unittests/random.lua
@@ -0,0 +1,10 @@
+function unittests.test_random()
+ -- Try out PseudoRandom
+ minetest.log("action", "[unittests] Testing PseudoRandom ...")
+ local pseudo = PseudoRandom(13)
+ assert(pseudo:next() == 22290)
+ assert(pseudo:next() == 13854)
+ minetest.log("action", "[unittests] PseudoRandom test passed!")
+ return true
+end
+
diff --git a/games/devtest/mods/unittests/textures/unittests_coal_lump.png b/games/devtest/mods/unittests/textures/unittests_coal_lump.png
new file mode 100644
index 000000000..f460d909e
--- /dev/null
+++ b/games/devtest/mods/unittests/textures/unittests_coal_lump.png
Binary files differ
diff --git a/games/devtest/mods/unittests/textures/unittests_iron_lump.png b/games/devtest/mods/unittests/textures/unittests_iron_lump.png
new file mode 100644
index 000000000..22f43e9cc
--- /dev/null
+++ b/games/devtest/mods/unittests/textures/unittests_iron_lump.png
Binary files differ
diff --git a/games/devtest/mods/unittests/textures/unittests_repairable_tool.png b/games/devtest/mods/unittests/textures/unittests_repairable_tool.png
new file mode 100644
index 000000000..46fbbaa74
--- /dev/null
+++ b/games/devtest/mods/unittests/textures/unittests_repairable_tool.png
Binary files differ
diff --git a/games/devtest/mods/unittests/textures/unittests_steel_ingot.png b/games/devtest/mods/unittests/textures/unittests_steel_ingot.png
new file mode 100644
index 000000000..6977696a2
--- /dev/null
+++ b/games/devtest/mods/unittests/textures/unittests_steel_ingot.png
Binary files differ
diff --git a/games/devtest/mods/unittests/textures/unittests_stick.png b/games/devtest/mods/unittests/textures/unittests_stick.png
new file mode 100644
index 000000000..ffdce70d4
--- /dev/null
+++ b/games/devtest/mods/unittests/textures/unittests_stick.png
Binary files differ
diff --git a/games/devtest/mods/unittests/textures/unittests_torch.png b/games/devtest/mods/unittests/textures/unittests_torch.png
new file mode 100644
index 000000000..ba5eebef0
--- /dev/null
+++ b/games/devtest/mods/unittests/textures/unittests_torch.png
Binary files differ
diff --git a/games/devtest/mods/unittests/textures/unittests_unrepairable_tool.png b/games/devtest/mods/unittests/textures/unittests_unrepairable_tool.png
new file mode 100644
index 000000000..c676213a5
--- /dev/null
+++ b/games/devtest/mods/unittests/textures/unittests_unrepairable_tool.png
Binary files differ
diff --git a/games/devtest/mods/util_commands/init.lua b/games/devtest/mods/util_commands/init.lua
new file mode 100644
index 000000000..3a0e91a41
--- /dev/null
+++ b/games/devtest/mods/util_commands/init.lua
@@ -0,0 +1,137 @@
+minetest.register_chatcommand("hotbar", {
+ params = "<size>",
+ description = "Set hotbar size",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ if not player then
+ return false, "No player."
+ end
+ local size = tonumber(param)
+ if not size then
+ return false, "Missing or incorrect size parameter!"
+ end
+ local ok = player:hud_set_hotbar_itemcount(size)
+ if ok then
+ return true
+ else
+ return false, "Invalid item count!"
+ end
+ end,
+})
+
+minetest.register_chatcommand("hp", {
+ params = "<hp>",
+ description = "Set your health",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ if not player then
+ return false, "No player."
+ end
+ local hp = tonumber(param)
+ if not hp then
+ return false, "Missing or incorrect hp parameter!"
+ end
+ player:set_hp(hp)
+ return true
+ end,
+})
+
+minetest.register_chatcommand("zoom", {
+ params = "[<zoom_fov>]",
+ description = "Set or display your zoom_fov",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ if not player then
+ return false, "No player."
+ end
+ if param == "" then
+ local fov = player:get_properties().zoom_fov
+ return true, "zoom_fov = "..tostring(fov)
+ end
+ local fov = tonumber(param)
+ if not fov then
+ return false, "Missing or incorrect zoom_fov parameter!"
+ end
+ player:set_properties({zoom_fov = fov})
+ fov = player:get_properties().zoom_fov
+ return true, "zoom_fov = "..tostring(fov)
+ end,
+})
+
+
+
+local s_infplace = minetest.settings:get("devtest_infplace")
+if s_infplace == "true" then
+ infplace = true
+elseif s_infplace == "false" then
+ infplace = false
+else
+ infplace = minetest.is_creative_enabled("")
+end
+
+minetest.register_chatcommand("infplace", {
+ params = "",
+ description = "Toggle infinite node placement",
+ func = function(name, param)
+ infplace = not infplace
+ if infplace then
+ minetest.chat_send_all("Infinite node placement enabled!")
+ minetest.log("action", "Infinite node placement enabled")
+ else
+ minetest.chat_send_all("Infinite node placement disabled!")
+ minetest.log("action", "Infinite node placement disabled")
+ end
+ return true
+ end,
+})
+
+minetest.register_chatcommand("detach", {
+ params = "[<radius>]",
+ description = "Detach all objects nearby",
+ func = function(name, param)
+ local radius = tonumber(param)
+ if type(radius) ~= "number" then
+ radius = 8
+ end
+ if radius < 1 then
+ radius = 1
+ end
+ local player = minetest.get_player_by_name(name)
+ if not player then
+ return false, "No player."
+ end
+ local objs = minetest.get_objects_inside_radius(player:get_pos(), radius)
+ local num = 0
+ for o=1, #objs do
+ if objs[o]:get_attach() then
+ objs[o]:set_detach()
+ num = num + 1
+ end
+ end
+ return true, string.format("%d object(s) detached.", num)
+ end,
+})
+
+
+-- Unlimited node placement
+minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
+ if placer and placer:is_player() then
+ return infplace
+ end
+end)
+
+-- Don't pick up if the item is already in the inventory
+local old_handle_node_drops = minetest.handle_node_drops
+function minetest.handle_node_drops(pos, drops, digger)
+ if not digger or not digger:is_player() or not infplace then
+ return old_handle_node_drops(pos, drops, digger)
+ end
+ local inv = digger:get_inventory()
+ if inv then
+ for _, item in ipairs(drops) do
+ if not inv:contains_item("main", item, true) then
+ inv:add_item("main", item)
+ end
+ end
+ end
+end
diff --git a/games/devtest/mods/util_commands/mod.conf b/games/devtest/mods/util_commands/mod.conf
new file mode 100644
index 000000000..fea6dd3e9
--- /dev/null
+++ b/games/devtest/mods/util_commands/mod.conf
@@ -0,0 +1,2 @@
+name = util_commands
+description = Random server commands to make testing easier and more convenient
diff --git a/games/devtest/screenshot.png b/games/devtest/screenshot.png
new file mode 100644
index 000000000..7324883f6
--- /dev/null
+++ b/games/devtest/screenshot.png
Binary files differ
diff --git a/games/devtest/settingtypes.txt b/games/devtest/settingtypes.txt
new file mode 100644
index 000000000..40ee5845b
--- /dev/null
+++ b/games/devtest/settingtypes.txt
@@ -0,0 +1,37 @@
+# If enabled, nodes won't be used up when placed.
+# Note: This behavior can also be toggled in-game with the /infplace command.
+#
+# - true: enabled
+# - false: disabled
+# - auto: only enabled when Creative Mode is enabled (default)
+devtest_infplace (Infinite node placement) enum auto true,false,auto
+
+# If enabled, new players receive some initial items when joining for the first time.
+give_initial_stuff (Give initial stuff) bool true
+
+# If enabled, automated tests of the Lua API such as player health, crafting and PseudoRandom will be performed on startup.
+devtest_unittests_autostart (Perform unit tests) bool false
+
+# If enabled, the game will use all mapgen aliases for the v6 mapgen.
+# If disabled, it will only use a minimal set of mapgen aliases.
+# If enabled, there should be biome-specific tree, leaves and ground nodes. If disabled, stuff should use fallback nodes (like stone instead of desert stone).
+#
+# Many mapgen aliases have fallback values when no value is provided. Having this setting disabled can be useful to test whether those fallback values are functional.
+devtest_v6_mapgen_aliases (Use all v6 mapgen aliases) bool false
+
+# If enabled, the game will use dungeon stairs by enabling the corresponding mapgen aliases.
+#
+# Disabling this setting can be useful to test whether dungeons still work when stairs are not defined.
+devtest_dungeon_stairs (Generate dungeon stairs) bool false
+
+# If enabled, the mapgen alias 'mapgen_mossycobble' will be used. This should enable random mossy cobblestone in dungeons.
+# If disabled, it won't be used. The engine should fall back to cobble instead.
+devtest_dungeon_mossycobble (Generate mossy cobblestone) bool false
+
+# If enabled, some very basic biomes will be registered.
+devtest_register_biomes (Register biomes) bool true
+
+# If set to true, will show an inventory image for nodes that have no inventory image as of Minetest 5.1.0.
+# This is due to <https://github.com/minetest/minetest/issues/9209>.
+# This is only added to make the items more visible to avoid confusion, but you will no longer see the default inventory images for these items. When you want to test the default inventory image of drawtypes, this should be turned off.
+testnodes_show_fallback_image (Use fallback inventory images) bool false
diff --git a/games/minimal/game.conf b/games/minimal/game.conf
deleted file mode 100644
index 99bfaf0a4..000000000
--- a/games/minimal/game.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-name = Minimal development test
-
diff --git a/games/minimal/menu/background.png b/games/minimal/menu/background.png
deleted file mode 100644
index ea5fbdce5..000000000
--- a/games/minimal/menu/background.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/menu/icon.png b/games/minimal/menu/icon.png
deleted file mode 100644
index 8ef675023..000000000
--- a/games/minimal/menu/icon.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/bucket/init.lua b/games/minimal/mods/bucket/init.lua
deleted file mode 100644
index dcd59ed38..000000000
--- a/games/minimal/mods/bucket/init.lua
+++ /dev/null
@@ -1,95 +0,0 @@
--- bucket (Minetest 0.4 mod)
--- A bucket, which can pick up water and lava
-
-minetest.register_alias("bucket", "bucket:bucket_empty")
-minetest.register_alias("bucket_water", "bucket:bucket_water")
-minetest.register_alias("bucket_lava", "bucket:bucket_lava")
-
-minetest.register_craft({
- output = 'bucket:bucket_empty 1',
- recipe = {
- {'default:steel_ingot', '', 'default:steel_ingot'},
- {'', 'default:steel_ingot', ''},
- }
-})
-
-bucket = {}
-bucket.liquids = {}
-
--- Register a new liquid
--- source = name of the source node
--- flowing = name of the flowing node
--- itemname = name of the new bucket item (or nil if liquid is not takeable)
--- inventory_image = texture of the new bucket item (ignored if itemname == nil)
--- This function can be called from any mod (that depends on bucket).
-function bucket.register_liquid(source, flowing, itemname, inventory_image)
- bucket.liquids[source] = {
- source = source,
- flowing = flowing,
- itemname = itemname,
- }
- bucket.liquids[flowing] = bucket.liquids[source]
-
- if itemname ~= nil then
- minetest.register_craftitem(itemname, {
- inventory_image = inventory_image,
- stack_max = 1,
- liquids_pointable = true,
- on_use = function(itemstack, user, pointed_thing)
- -- Must be pointing to node
- if pointed_thing.type ~= "node" then
- return
- end
- -- Check if pointing to a liquid
- n = minetest.get_node(pointed_thing.under)
- if bucket.liquids[n.name] == nil then
- -- Not a liquid
- minetest.add_node(pointed_thing.above, {name=source})
- elseif n.name ~= source then
- -- It's a liquid
- minetest.add_node(pointed_thing.under, {name=source})
- end
- return {name="bucket:bucket_empty"}
- end
- })
- end
-end
-
-minetest.register_craftitem("bucket:bucket_empty", {
- inventory_image = "bucket.png",
- stack_max = 1,
- liquids_pointable = true,
- on_use = function(itemstack, user, pointed_thing)
- -- Must be pointing to node
- if pointed_thing.type ~= "node" then
- return
- end
- -- Check if pointing to a liquid source
- n = minetest.get_node(pointed_thing.under)
- liquiddef = bucket.liquids[n.name]
- if liquiddef ~= nil and liquiddef.source == n.name and liquiddef.itemname ~= nil then
- minetest.add_node(pointed_thing.under, {name="air"})
- return {name=liquiddef.itemname}
- end
- end,
-})
-
-bucket.register_liquid(
- "default:water_source",
- "default:water_flowing",
- "bucket:bucket_water",
- "bucket_water.png"
-)
-
-bucket.register_liquid(
- "default:lava_source",
- "default:lava_flowing",
- "bucket:bucket_lava",
- "bucket_lava.png"
-)
-
-minetest.register_craft({
- type = "fuel",
- recipe = "bucket:bucket_lava",
- burntime = 60,
-})
diff --git a/games/minimal/mods/bucket/mod.conf b/games/minimal/mods/bucket/mod.conf
deleted file mode 100644
index 2a6086775..000000000
--- a/games/minimal/mods/bucket/mod.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-name = bucket
-description = Minimal bucket to place and pick up liquids
-depends = default
diff --git a/games/minimal/mods/bucket/textures/bucket.png b/games/minimal/mods/bucket/textures/bucket.png
deleted file mode 100644
index b775a9fd3..000000000
--- a/games/minimal/mods/bucket/textures/bucket.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/bucket/textures/bucket_lava.png b/games/minimal/mods/bucket/textures/bucket_lava.png
deleted file mode 100644
index 889ed61d4..000000000
--- a/games/minimal/mods/bucket/textures/bucket_lava.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/bucket/textures/bucket_water.png b/games/minimal/mods/bucket/textures/bucket_water.png
deleted file mode 100644
index a3c9d72f7..000000000
--- a/games/minimal/mods/bucket/textures/bucket_water.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/init.lua b/games/minimal/mods/default/init.lua
deleted file mode 100644
index 7f43b97e1..000000000
--- a/games/minimal/mods/default/init.lua
+++ /dev/null
@@ -1,1840 +0,0 @@
--- default (Minetest 0.4 mod)
--- Most default stuff
-
--- The API documentation in here was moved into doc/lua_api.txt
-
-WATER_ALPHA = 160
-WATER_VISC = 1
-LAVA_VISC = 7
-LIGHT_MAX = 14
-
--- Definitions made by this mod that other mods can use too
-default = {}
-
--- Load other files
-dofile(minetest.get_modpath("default").."/mapgen.lua")
-
--- Set a noticeable inventory formspec for players
-minetest.register_on_joinplayer(function(player)
- local cb = function(player)
- minetest.chat_send_player(player:get_player_name(), "This is the [minimal] \"Minimal Development Test\" game. Use [minetest_game] for the real thing.")
- player:set_attribute("test_attribute", "test_me")
- player:set_attribute("remove_this", nil)
- end
- minetest.after(2.0, cb, player)
-end)
-
---
--- Tool definition
---
-
--- The hand
-minetest.register_item(":", {
- type = "none",
- wield_image = "wieldhand.png",
- wield_scale = {x=1,y=1,z=2.5},
- tool_capabilities = {
- full_punch_interval = 1.0,
- max_drop_level = 0,
- groupcaps = {
- fleshy = {times={[2]=2.00, [3]=1.00}, uses=0, maxlevel=1},
- crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
- snappy = {times={[3]=0.40}, uses=0, maxlevel=1},
- oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=1.40}, uses=0, maxlevel=3},
- },
- damage_groups = {fleshy=1},
- }
-})
-
---
--- Picks
---
-
-minetest.register_tool("default:pick_wood", {
- description = "Wooden Pickaxe",
- inventory_image = "default_tool_woodpick.png",
- tool_capabilities = {
- max_drop_level=0,
- groupcaps={
- cracky={times={[2]=2.00, [3]=1.20}, uses=10, maxlevel=1}
- },
- damage_groups = {fleshy=2},
- },
-})
-minetest.register_tool("default:pick_stone", {
- description = "Stone Pickaxe",
- inventory_image = "default_tool_stonepick.png",
- tool_capabilities = {
- max_drop_level=0,
- groupcaps={
- cracky={times={[1]=2.00, [2]=1.20, [3]=0.80}, uses=20, maxlevel=1}
- },
- damage_groups = {fleshy=3},
- },
-})
-minetest.register_tool("default:pick_steel", {
- description = "Steel Pickaxe",
- inventory_image = "default_tool_steelpick.png",
- tool_capabilities = {
- max_drop_level=1,
- groupcaps={
- cracky={times={[1]=4.00, [2]=1.60, [3]=1.00}, uses=10, maxlevel=2}
- },
- damage_groups = {fleshy=4},
- },
-})
-minetest.register_tool("default:pick_mese", {
- description = "Mese Pickaxe",
- inventory_image = "default_tool_mesepick.png",
- tool_capabilities = {
- full_punch_interval = 1.0,
- max_drop_level=3,
- groupcaps={
- cracky={times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3},
- crumbly={times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3},
- snappy={times={[1]=2.0, [2]=1.0, [3]=0.5}, uses=20, maxlevel=3}
- },
- damage_groups = {fleshy=4},
- },
-})
-
---
--- Shovels
---
-
-minetest.register_tool("default:shovel_wood", {
- description = "Wooden Shovel",
- inventory_image = "default_tool_woodshovel.png",
- tool_capabilities = {
- max_drop_level=0,
- groupcaps={
- crumbly={times={[1]=2.00, [2]=0.80, [3]=0.50}, uses=10, maxlevel=1}
- },
- damage_groups = {fleshy=2},
- },
-})
-minetest.register_tool("default:shovel_stone", {
- description = "Stone Shovel",
- inventory_image = "default_tool_stoneshovel.png",
- tool_capabilities = {
- max_drop_level=0,
- groupcaps={
- crumbly={times={[1]=1.20, [2]=0.50, [3]=0.30}, uses=20, maxlevel=1}
- },
- damage_groups = {fleshy=3},
- },
-})
-minetest.register_tool("default:shovel_steel", {
- description = "Steel Shovel",
- inventory_image = "default_tool_steelshovel.png",
- tool_capabilities = {
- max_drop_level=1,
- groupcaps={
- crumbly={times={[1]=1.00, [2]=0.70, [3]=0.60}, uses=10, maxlevel=2}
- },
- damage_groups = {fleshy=4},
- },
-})
-
---
--- Axes
---
-
-minetest.register_tool("default:axe_wood", {
- description = "Wooden Axe",
- inventory_image = "default_tool_woodaxe.png",
- tool_capabilities = {
- max_drop_level=0,
- groupcaps={
- choppy={times={[2]=1.40, [3]=0.80}, uses=10, maxlevel=1},
- fleshy={times={[2]=1.50, [3]=0.80}, uses=10, maxlevel=1}
- },
- damage_groups = {fleshy=2},
- },
-})
-minetest.register_tool("default:axe_stone", {
- description = "Stone Axe",
- inventory_image = "default_tool_stoneaxe.png",
- tool_capabilities = {
- max_drop_level=0,
- groupcaps={
- choppy={times={[1]=1.50, [2]=1.00, [3]=0.60}, uses=20, maxlevel=1},
- fleshy={times={[2]=1.30, [3]=0.70}, uses=20, maxlevel=1}
- },
- damage_groups = {fleshy=3},
- },
-})
-minetest.register_tool("default:axe_steel", {
- description = "Steel Axe",
- inventory_image = "default_tool_steelaxe.png",
- tool_capabilities = {
- max_drop_level=1,
- groupcaps={
- choppy={times={[1]=2.00, [2]=1.60, [3]=1.00}, uses=10, maxlevel=2},
- fleshy={times={[2]=1.10, [3]=0.60}, uses=40, maxlevel=1}
- },
- damage_groups = {fleshy=3},
- },
-})
-
---
--- Swords
---
-
-minetest.register_tool("default:sword_wood", {
- description = "Wooden Sword",
- inventory_image = "default_tool_woodsword.png",
- tool_capabilities = {
- full_punch_interval = 1.0,
- max_drop_level=0,
- groupcaps={
- fleshy={times={[2]=1.10, [3]=0.60}, uses=10, maxlevel=1},
- snappy={times={[2]=1.00, [3]=0.50}, uses=10, maxlevel=1},
- choppy={times={[3]=1.00}, uses=20, maxlevel=0}
- },
- damage_groups = {fleshy=2},
- }
-})
-minetest.register_tool("default:sword_stone", {
- description = "Stone Sword",
- inventory_image = "default_tool_stonesword.png",
- tool_capabilities = {
- full_punch_interval = 1.0,
- max_drop_level=0,
- groupcaps={
- fleshy={times={[2]=0.80, [3]=0.40}, uses=20, maxlevel=1},
- snappy={times={[2]=0.80, [3]=0.40}, uses=20, maxlevel=1},
- choppy={times={[3]=0.90}, uses=20, maxlevel=0}
- },
- damage_groups = {fleshy=4},
- }
-})
-minetest.register_tool("default:sword_steel", {
- description = "Steel Sword",
- inventory_image = "default_tool_steelsword.png",
- tool_capabilities = {
- full_punch_interval = 1.0,
- max_drop_level=1,
- groupcaps={
- fleshy={times={[1]=2.00, [2]=0.80, [3]=0.40}, uses=10, maxlevel=2},
- snappy={times={[2]=0.70, [3]=0.30}, uses=40, maxlevel=1},
- choppy={times={[3]=0.70}, uses=40, maxlevel=0}
- },
- damage_groups = {fleshy=6},
- }
-})
-
---
--- Crafting definition
---
-
-minetest.register_craft({
- output = 'default:wood 4',
- recipe = {
- {'default:tree'},
- }
-})
-
-minetest.register_craft({
- output = 'default:stick 4',
- recipe = {
- {'default:wood'},
- }
-})
-
-minetest.register_craft({
- output = 'default:fence_wood 2',
- recipe = {
- {'default:stick', 'default:stick', 'default:stick'},
- {'default:stick', 'default:stick', 'default:stick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:sign_wall',
- recipe = {
- {'default:wood', 'default:wood', 'default:wood'},
- {'default:wood', 'default:wood', 'default:wood'},
- {'', 'default:stick', ''},
- }
-})
-
-minetest.register_craft({
- output = 'default:torch 4',
- recipe = {
- {'default:coal_lump'},
- {'default:stick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:pick_wood',
- recipe = {
- {'default:wood', 'default:wood', 'default:wood'},
- {'', 'default:stick', ''},
- {'', 'default:stick', ''},
- }
-})
-
-minetest.register_craft({
- output = 'default:pick_stone',
- recipe = {
- {'default:cobble', 'default:cobble', 'default:cobble'},
- {'', 'default:stick', ''},
- {'', 'default:stick', ''},
- }
-})
-
-minetest.register_craft({
- output = 'default:pick_steel',
- recipe = {
- {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
- {'', 'default:stick', ''},
- {'', 'default:stick', ''},
- }
-})
-
-minetest.register_craft({
- output = 'default:pick_mese',
- recipe = {
- {'default:mese', 'default:mese', 'default:mese'},
- {'', 'default:stick', ''},
- {'', 'default:stick', ''},
- }
-})
-
-minetest.register_craft({
- output = 'default:shovel_wood',
- recipe = {
- {'default:wood'},
- {'default:stick'},
- {'default:stick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:shovel_stone',
- recipe = {
- {'default:cobble'},
- {'default:stick'},
- {'default:stick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:shovel_steel',
- recipe = {
- {'default:steel_ingot'},
- {'default:stick'},
- {'default:stick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:axe_wood',
- recipe = {
- {'default:wood', 'default:wood'},
- {'default:wood', 'default:stick'},
- {'', 'default:stick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:axe_stone',
- recipe = {
- {'default:cobble', 'default:cobble'},
- {'default:cobble', 'default:stick'},
- {'', 'default:stick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:axe_steel',
- recipe = {
- {'default:steel_ingot', 'default:steel_ingot'},
- {'default:steel_ingot', 'default:stick'},
- {'', 'default:stick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:sword_wood',
- recipe = {
- {'default:wood'},
- {'default:wood'},
- {'default:stick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:sword_stone',
- recipe = {
- {'default:cobble'},
- {'default:cobble'},
- {'default:stick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:sword_steel',
- recipe = {
- {'default:steel_ingot'},
- {'default:steel_ingot'},
- {'default:stick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:rail 15',
- recipe = {
- {'default:steel_ingot', '', 'default:steel_ingot'},
- {'default:steel_ingot', 'default:stick', 'default:steel_ingot'},
- {'default:steel_ingot', '', 'default:steel_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'default:chest',
- recipe = {
- {'default:wood', 'default:wood', 'default:wood'},
- {'default:wood', '', 'default:wood'},
- {'default:wood', 'default:wood', 'default:wood'},
- }
-})
-
-minetest.register_craft({
- output = 'default:chest_locked',
- recipe = {
- {'default:wood', 'default:wood', 'default:wood'},
- {'default:wood', 'default:steel_ingot', 'default:wood'},
- {'default:wood', 'default:wood', 'default:wood'},
- }
-})
-
-minetest.register_craft({
- output = 'default:furnace',
- recipe = {
- {'default:cobble', 'default:cobble', 'default:cobble'},
- {'default:cobble', '', 'default:cobble'},
- {'default:cobble', 'default:cobble', 'default:cobble'},
- }
-})
-
-minetest.register_craft({
- output = 'default:steelblock',
- recipe = {
- {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
- {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
- {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'default:sandstone',
- recipe = {
- {'default:sand', 'default:sand'},
- {'default:sand', 'default:sand'},
- }
-})
-
-minetest.register_craft({
- output = 'default:clay',
- recipe = {
- {'default:clay_lump', 'default:clay_lump'},
- {'default:clay_lump', 'default:clay_lump'},
- }
-})
-
-minetest.register_craft({
- output = 'default:brick',
- recipe = {
- {'default:clay_brick', 'default:clay_brick'},
- {'default:clay_brick', 'default:clay_brick'},
- }
-})
-
-minetest.register_craft({
- output = 'default:paper',
- recipe = {
- {'default:papyrus', 'default:papyrus', 'default:papyrus'},
- }
-})
-
-minetest.register_craft({
- output = 'default:book',
- recipe = {
- {'default:paper'},
- {'default:paper'},
- {'default:paper'},
- }
-})
-
-minetest.register_craft({
- output = 'default:bookshelf',
- recipe = {
- {'default:wood', 'default:wood', 'default:wood'},
- {'default:book', 'default:book', 'default:book'},
- {'default:wood', 'default:wood', 'default:wood'},
- }
-})
-
-minetest.register_craft({
- output = 'default:ladder',
- recipe = {
- {'default:stick', '', 'default:stick'},
- {'default:stick', 'default:stick', 'default:stick'},
- {'default:stick', '', 'default:stick'},
- }
-})
-
--- Tool repair
-minetest.register_craft({
- type = "toolrepair",
- additional_wear = -0.02,
-})
-
---
--- Cooking recipes
---
-
-minetest.register_craft({
- type = "cooking",
- output = "default:glass",
- recipe = "default:sand",
-})
-
-minetest.register_craft({
- type = "cooking",
- output = "default:coal_lump",
- recipe = "default:tree",
-})
-
-minetest.register_craft({
- type = "cooking",
- output = "default:stone",
- recipe = "default:cobble",
-})
-
-minetest.register_craft({
- type = "cooking",
- output = "default:steel_ingot",
- recipe = "default:iron_lump",
-})
-
-minetest.register_craft({
- type = "cooking",
- output = "default:clay_brick",
- recipe = "default:clay_lump",
-})
-
---
--- Fuels
---
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:tree",
- burntime = 30,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:junglegrass",
- burntime = 2,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:leaves",
- burntime = 1,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:cactus",
- burntime = 15,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:papyrus",
- burntime = 1,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:bookshelf",
- burntime = 30,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:fence_wood",
- burntime = 15,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:ladder",
- burntime = 5,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:wood",
- burntime = 7,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:mese",
- burntime = 30,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:lava_source",
- burntime = 60,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:torch",
- burntime = 4,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:sign_wall",
- burntime = 10,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:chest",
- burntime = 30,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:chest_locked",
- burntime = 30,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:nyancat",
- burntime = 1,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:nyancat_rainbow",
- burntime = 1,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:sapling",
- burntime = 10,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:apple",
- burntime = 3,
-})
-
-minetest.register_craft({
- type = "fuel",
- recipe = "default:coal_lump",
- burntime = 40,
-})
-
---
--- Node definitions
---
-
--- Default node sounds
-
-function default.node_sound_defaults(table)
- table = table or {}
- table.footstep = table.footstep or
- {name="", gain=1.0}
- table.dug = table.dug or
- {name="default_dug_node", gain=1.0}
- return table
-end
-
-function default.node_sound_stone_defaults(table)
- table = table or {}
- table.footstep = table.footstep or
- {name="default_hard_footstep", gain=0.2}
- default.node_sound_defaults(table)
- return table
-end
-
-function default.node_sound_dirt_defaults(table)
- table = table or {}
- table.footstep = table.footstep or
- {name="", gain=0.5}
- --table.dug = table.dug or
- -- {name="default_dirt_break", gain=0.5}
- table.place = table.place or
- {name="default_grass_footstep", gain=0.5}
- default.node_sound_defaults(table)
- return table
-end
-
-function default.node_sound_sand_defaults(table)
- table = table or {}
- table.footstep = table.footstep or
- {name="default_grass_footstep", gain=0.25}
- --table.dug = table.dug or
- -- {name="default_dirt_break", gain=0.25}
- table.dug = table.dug or
- {name="", gain=0.25}
- default.node_sound_defaults(table)
- return table
-end
-
-function default.node_sound_wood_defaults(table)
- table = table or {}
- table.footstep = table.footstep or
- {name="default_hard_footstep", gain=0.3}
- default.node_sound_defaults(table)
- return table
-end
-
-function default.node_sound_leaves_defaults(table)
- table = table or {}
- table.footstep = table.footstep or
- {name="default_grass_footstep", gain=0.25}
- table.dig = table.dig or
- {name="default_dig_crumbly", gain=0.4}
- table.dug = table.dug or
- {name="", gain=1.0}
- default.node_sound_defaults(table)
- return table
-end
-
-function default.node_sound_glass_defaults(table)
- table = table or {}
- table.footstep = table.footstep or
- {name="default_stone_footstep", gain=0.25}
- table.dug = table.dug or
- {name="default_break_glass", gain=1.0}
- default.node_sound_defaults(table)
- return table
-end
-
--- Register nodes
-
-minetest.register_node("default:stone", {
- description = "Stone",
- tiles = {"default_stone.png"},
- groups = {cracky=3},
- drop = 'default:cobble',
- legacy_mineral = true,
- sounds = default.node_sound_stone_defaults(),
-})
-
-minetest.register_node("default:stone_with_coal", {
- description = "Stone with coal",
- tiles ={"default_stone.png^default_mineral_coal.png"},
- groups = {cracky=3},
- drop = 'default:coal_lump',
- sounds = default.node_sound_stone_defaults(),
-})
-
-minetest.register_node("default:stone_with_iron", {
- description = "Stone with iron",
- tiles ={"default_stone.png^default_mineral_iron.png"},
- groups = {cracky=3},
- drop = 'default:iron_lump',
- sounds = default.node_sound_stone_defaults(),
-})
-
-minetest.register_node("default:dirt_with_grass", {
- description = "Dirt with grass",
- tiles ={"default_grass.png", "default_dirt.png",
- {name = "default_dirt.png^default_grass_side.png",
- tileable_vertical = false}},
- groups = {crumbly=3, soil=1},
- drop = 'default:dirt',
- sounds = default.node_sound_dirt_defaults({
- footstep = {name="default_grass_footstep", gain=0.4},
- }),
- paramtype = "light",
- sunlight_propagates = true,
- drawtype = "glasslike",
-})
-
-minetest.register_node("default:dirt_with_grass_footsteps", {
- description = "Dirt with grass and footsteps",
- tiles ={"default_grass_footsteps.png", "default_dirt.png",
- {name = "default_dirt.png^default_grass_side.png",
- tileable_vertical = false}},
- groups = {crumbly=3, soil=1},
- drop = 'default:dirt',
- sounds = default.node_sound_dirt_defaults({
- footstep = {name="default_grass_footstep", gain=0.4},
- }),
-})
-
-minetest.register_node("default:dirt", {
- description = "Dirt",
- tiles ={"default_dirt.png"},
- groups = {crumbly=3, soil=1},
- sounds = default.node_sound_dirt_defaults(),
-})
-
-minetest.register_node("default:sand", {
- description = "Sand",
- tiles ={"default_sand.png"},
- groups = {crumbly=3, falling_node=1},
- sounds = default.node_sound_sand_defaults(),
-})
-
-minetest.register_node("default:gravel", {
- description = "Gravel",
- tiles ={"default_gravel.png"},
- groups = {crumbly=2, falling_node=1},
- sounds = default.node_sound_dirt_defaults({
- footstep = {name="default_gravel_footstep", gain=0.45},
- }),
-})
-
-minetest.register_node("default:sandstone", {
- description = "Sandstone",
- tiles ={"default_sandstone.png"},
- groups = {crumbly=2,cracky=2},
- drop = 'default:sand',
- sounds = default.node_sound_stone_defaults(),
-})
-
-minetest.register_node("default:clay", {
- description = "Clay",
- tiles ={"default_clay.png"},
- groups = {crumbly=3},
- drop = 'default:clay_lump 4',
- sounds = default.node_sound_dirt_defaults({
- footstep = "",
- }),
-})
-
-minetest.register_node("default:brick", {
- description = "Brick",
- tiles ={"default_brick.png"},
- is_ground_content = false,
- groups = {cracky=3},
- drop = 'default:clay_brick 4',
- sounds = default.node_sound_stone_defaults(),
-})
-
-minetest.register_node("default:tree", {
- description = "Tree",
- tiles ={"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
- is_ground_content = false,
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=1},
- sounds = default.node_sound_wood_defaults(),
-})
-
-minetest.register_node("default:junglegrass", {
- description = "Jungle Grass",
- drawtype = "plantlike",
- visual_scale = 1.3,
- tiles ={"default_junglegrass.png"},
- inventory_image = "default_junglegrass.png",
- wield_image = "default_junglegrass.png",
- paramtype = "light",
- walkable = false,
- groups = {snappy=3,attached_node=1},
- sounds = default.node_sound_leaves_defaults(),
-})
-
-minetest.register_node("default:leaves", {
- description = "Leaves",
- drawtype = "allfaces_optional",
- visual_scale = 1.3,
- tiles ={"default_leaves.png"},
- paramtype = "light",
- is_ground_content = false,
- groups = {snappy=3},
- drop = {
- max_items = 1,
- items = {
- {
- -- player will get sapling with 1/20 chance
- items = {'default:sapling'},
- rarity = 20,
- },
- {
- -- player will get leaves only if he get no saplings,
- -- this is because max_items is 1
- items = {'default:leaves'},
- }
- }
- },
- sounds = default.node_sound_leaves_defaults(),
-})
-
-minetest.register_node("default:cactus", {
- description = "Cactus",
- tiles ={"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
- groups = {snappy=2,choppy=3},
- sounds = default.node_sound_wood_defaults(),
-})
-
-minetest.register_node("default:papyrus", {
- description = "Papyrus",
- drawtype = "plantlike",
- tiles ={"default_papyrus.png"},
- inventory_image = "default_papyrus.png",
- wield_image = "default_papyrus.png",
- paramtype = "light",
- walkable = false,
- groups = {snappy=3},
- sounds = default.node_sound_leaves_defaults(),
-})
-
-minetest.register_node("default:bookshelf", {
- description = "Bookshelf",
- tiles ={"default_wood.png", "default_wood.png", "default_bookshelf.png"},
- is_ground_content = false,
- groups = {snappy=2,choppy=3,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
-})
-
-minetest.register_node("default:glass", {
- description = "Glass",
- drawtype = "glasslike",
- tiles ={"default_glass.png"},
- paramtype = "light",
- is_ground_content = false,
- sunlight_propagates = true,
- groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
- sounds = default.node_sound_glass_defaults(),
-})
-
-minetest.register_node("default:fence_wood", {
- description = "Wooden Fence",
- drawtype = "fencelike",
- tiles ={"default_wood.png"},
- inventory_image = "default_fence.png",
- wield_image = "default_fence.png",
- paramtype = "light",
- is_ground_content = false,
- selection_box = {
- type = "fixed",
- fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
- },
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
-})
-
-minetest.register_node("default:rail", {
- description = "Rail",
- drawtype = "raillike",
- tiles ={"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
- inventory_image = "default_rail.png",
- wield_image = "default_rail.png",
- paramtype = "light",
- is_ground_content = false,
- walkable = false,
- selection_box = {
- type = "fixed",
- fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
- },
- groups = {bendy=2,snappy=1,dig_immediate=2},
-})
-
-minetest.register_node("default:ladder", {
- description = "Ladder",
- drawtype = "signlike",
- tiles ={"default_ladder.png"},
- inventory_image = "default_ladder.png",
- wield_image = "default_ladder.png",
- paramtype = "light",
- paramtype2 = "wallmounted",
- is_ground_content = false,
- walkable = false,
- climbable = true,
- selection_box = {
- type = "wallmounted",
- --wall_top = = <default>
- --wall_bottom = = <default>
- --wall_side = = <default>
- },
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3},
- legacy_wallmounted = true,
- sounds = default.node_sound_wood_defaults(),
-})
-
-minetest.register_node("default:wood", {
- description = "Wood",
- tiles ={"default_wood.png"},
- is_ground_content = false,
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
-})
-
-minetest.register_node("default:mese", {
- description = "Mese",
- tiles ={"default_mese.png"},
- groups = {cracky=1,level=2},
- sounds = default.node_sound_defaults(),
-})
-
-minetest.register_node("default:cloud", {
- description = "Cloud",
- tiles ={"default_cloud.png"},
- is_ground_content = false,
- sounds = default.node_sound_defaults(),
-})
-
-minetest.register_node("default:water_flowing", {
- description = "Water (flowing)",
- drawtype = "flowingliquid",
- tiles = {"default_water.png"},
- special_tiles = {
- {name = "default_water.png", backface_culling = false},
- {name = "default_water.png", backface_culling = true},
- },
- alpha = WATER_ALPHA,
- paramtype = "light",
- paramtype2 = "flowingliquid",
- walkable = false,
- pointable = false,
- diggable = false,
- buildable_to = true,
- is_ground_content = false,
- drop = "",
- drowning = 1,
- liquidtype = "flowing",
- liquid_alternative_flowing = "default:water_flowing",
- liquid_alternative_source = "default:water_source",
- liquid_viscosity = WATER_VISC,
- post_effect_color = {a = 64, r = 100, g = 100, b = 200},
- groups = {water = 3, liquid = 3},
-})
-
-minetest.register_node("default:water_source", {
- description = "Water",
- drawtype = "liquid",
- tiles = {"default_water.png"},
- special_tiles = {
- -- New-style water source material (mostly unused)
- {name = "default_water.png", backface_culling = false},
- },
- alpha = WATER_ALPHA,
- paramtype = "light",
- walkable = false,
- pointable = false,
- diggable = false,
- buildable_to = true,
- is_ground_content = false,
- drop = "",
- drowning = 1,
- liquidtype = "source",
- liquid_alternative_flowing = "default:water_flowing",
- liquid_alternative_source = "default:water_source",
- liquid_viscosity = WATER_VISC,
- post_effect_color = {a = 64, r = 100, g = 100, b = 200},
- groups = {water = 3, liquid = 3},
-})
-
-minetest.register_node("default:river_water_source", {
- description = "River Water Source",
- drawtype = "liquid",
- tiles = {"default_river_water.png"},
- special_tiles = {
- -- New-style water source material (mostly unused)
- {name = "default_river_water.png", backface_culling = false},
- },
- alpha = 160,
- paramtype = "light",
- walkable = false,
- pointable = false,
- diggable = false,
- buildable_to = true,
- is_ground_content = false,
- drop = "",
- drowning = 1,
- liquidtype = "source",
- liquid_alternative_flowing = "default:river_water_flowing",
- liquid_alternative_source = "default:river_water_source",
- liquid_viscosity = 1,
- liquid_renewable = false,
- liquid_range = 2,
- post_effect_color = {a = 103, r = 30, g = 76, b = 90},
- groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1},
-})
-
-minetest.register_node("default:river_water_flowing", {
- description = "Flowing River Water",
- drawtype = "flowingliquid",
- tiles = {"default_river_water.png"},
- special_tiles = {
- {name = "default_river_water.png", backface_culling = false},
- {name = "default_river_water.png", backface_culling = true},
- },
- alpha = 160,
- paramtype = "light",
- paramtype2 = "flowingliquid",
- walkable = false,
- pointable = false,
- diggable = false,
- buildable_to = true,
- is_ground_content = false,
- drop = "",
- drowning = 1,
- liquidtype = "flowing",
- liquid_alternative_flowing = "default:river_water_flowing",
- liquid_alternative_source = "default:river_water_source",
- liquid_viscosity = 1,
- liquid_renewable = false,
- liquid_range = 2,
- post_effect_color = {a = 103, r = 30, g = 76, b = 90},
- groups = {water = 3, liquid = 3, puts_out_fire = 1,
- not_in_creative_inventory = 1, cools_lava = 1},
-})
-
-minetest.register_node("default:lava_flowing", {
- description = "Lava (flowing)",
- inventory_image = minetest.inventorycube("default_lava.png"),
- drawtype = "flowingliquid",
- tiles ={"default_lava.png"},
- special_tiles = {
- {
- image="default_lava_flowing_animated.png",
- backface_culling=false,
- animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3}
- },
- {
- image="default_lava_flowing_animated.png",
- backface_culling=true,
- animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3}
- },
- },
- paramtype = "light",
- light_source = LIGHT_MAX - 1,
- walkable = false,
- pointable = false,
- diggable = false,
- buildable_to = true,
- is_ground_content = false,
- drowning = 1,
- liquidtype = "flowing",
- liquid_alternative_flowing = "default:lava_flowing",
- liquid_alternative_source = "default:lava_source",
- liquid_viscosity = LAVA_VISC,
- damage_per_second = 4*2,
- post_effect_color = {a=192, r=255, g=64, b=0},
- groups = {lava=3, liquid=2, hot=3},
-})
-
-minetest.register_node("default:lava_source", {
- description = "Lava",
- inventory_image = minetest.inventorycube("default_lava.png"),
- drawtype = "liquid",
- --tiles ={"default_lava.png"},
- tiles = {
- {
- name = "default_lava_source_animated.png",
- animation = {type="sheet_2d", frames_w=3, frames_h=2, frame_length=0.5}
- }
- },
- special_tiles = {
- -- New-style lava source material (mostly unused)
- {name="default_lava.png", backface_culling=false},
- },
- paramtype = "light",
- light_source = LIGHT_MAX - 1,
- walkable = false,
- pointable = false,
- diggable = false,
- buildable_to = true,
- is_ground_content = false,
- drowning = 1,
- liquidtype = "source",
- liquid_alternative_flowing = "default:lava_flowing",
- liquid_alternative_source = "default:lava_source",
- liquid_viscosity = LAVA_VISC,
- damage_per_second = 4*2,
- post_effect_color = {a=192, r=255, g=64, b=0},
- groups = {lava=3, liquid=2, hot=3},
-})
-
-minetest.register_node("default:torch", {
- description = "Torch",
- drawtype = "torchlike",
- tiles ={"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"},
- inventory_image = "default_torch_on_floor.png",
- wield_image = "default_torch_on_floor.png",
- paramtype = "light",
- paramtype2 = "wallmounted",
- sunlight_propagates = true,
- is_ground_content = false,
- walkable = false,
- light_source = LIGHT_MAX-1,
- selection_box = {
- type = "wallmounted",
- wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
- wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
- wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
- },
- groups = {choppy=2,dig_immediate=3,attached_node=1},
- legacy_wallmounted = true,
- sounds = default.node_sound_defaults(),
-})
-
-minetest.register_node("default:sign_wall", {
- description = "Sign",
- drawtype = "signlike",
- tiles ={"default_sign_wall.png"},
- inventory_image = "default_sign_wall.png",
- wield_image = "default_sign_wall.png",
- paramtype = "light",
- paramtype2 = "wallmounted",
- sunlight_propagates = true,
- is_ground_content = false,
- walkable = false,
- selection_box = {
- type = "wallmounted",
- --wall_top = <default>
- --wall_bottom = <default>
- --wall_side = <default>
- },
- groups = {choppy=2,dig_immediate=2,attached_node=1},
- legacy_wallmounted = true,
- sounds = default.node_sound_defaults(),
- on_construct = function(pos)
- --local n = minetest.get_node(pos)
- local meta = minetest.get_meta(pos)
- meta:set_string("formspec", "field[text;;${text}]")
- meta:set_string("infotext", "\"\"")
- end,
- on_receive_fields = function(pos, formname, fields, sender)
- --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
- local meta = minetest.get_meta(pos)
- fields.text = fields.text or ""
- print((sender:get_player_name() or "").." wrote \""..fields.text..
- "\" to sign at "..minetest.pos_to_string(pos))
- meta:set_string("text", fields.text)
- meta:set_string("infotext", '"'..fields.text..'"')
- end,
-})
-
-minetest.register_node("default:chest", {
- description = "Chest",
- tiles ={"default_chest.png^[sheet:2x2:0,0", "default_chest.png^[sheet:2x2:0,0",
- "default_chest.png^[sheet:2x2:1,0", "default_chest.png^[sheet:2x2:1,0",
- "default_chest.png^[sheet:2x2:1,0", "default_chest.png^[sheet:2x2:0,1"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- is_ground_content = false,
- sounds = default.node_sound_wood_defaults(),
- on_construct = function(pos)
- local meta = minetest.get_meta(pos)
- meta:set_string("formspec",
- "size[8,9]"..
- "list[current_name;main;0,0;8,4;]"..
- "list[current_player;main;0,5;8,4;]" ..
- "listring[]")
- meta:set_string("infotext", "Chest")
- local inv = meta:get_inventory()
- inv:set_size("main", 8*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
-})
-
-local function has_locked_chest_privilege(meta, player)
- if player:get_player_name() ~= meta:get_string("owner") then
- return false
- end
- return true
-end
-
-minetest.register_node("default:chest_locked", {
- description = "Locked Chest",
- tiles ={"default_chest.png^[sheet:2x2:0,0", "default_chest.png^[sheet:2x2:0,0",
- "default_chest.png^[sheet:2x2:1,0", "default_chest.png^[sheet:2x2:1,0",
- "default_chest.png^[sheet:2x2:1,0", "default_chest.png^[sheet:2x2:1,1"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- is_ground_content = false,
- sounds = default.node_sound_wood_defaults(),
- after_place_node = function(pos, placer)
- local meta = minetest.get_meta(pos)
- local pname =
- placer and placer:get_player_name() or ""
- meta:set_string("owner", pname)
- meta:set_string("infotext", "Locked Chest (owned by "..
- meta:get_string("owner")..")")
- end,
- on_construct = function(pos)
- local meta = minetest.get_meta(pos)
- meta:set_string("formspec",
- "size[8,9]"..
- "list[current_name;main;0,0;8,4;]"..
- "list[current_player;main;0,5;8,4;]" ..
- "listring[]")
- meta:set_string("infotext", "Locked Chest")
- meta:set_string("owner", "")
- local inv = meta:get_inventory()
- inv:set_size("main", 8*4)
- -- this is not really the intended usage but works for testing purposes:
- meta:mark_as_private("owner")
- end,
- can_dig = function(pos,player)
- local meta = minetest.get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- local meta = minetest.get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return count
- end,
- allow_metadata_inventory_put = function(pos, listname, index, stack, player)
- local meta = minetest.get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- allow_metadata_inventory_take = function(pos, listname, index, stack, player)
- local meta = minetest.get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_put = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from locked chest at "..minetest.pos_to_string(pos))
- end,
-})
-
-default.furnace_inactive_formspec =
- "size[8,9]"..
- "image[2,2;1,1;default_furnace_fire_bg.png]"..
- "list[current_name;fuel;2,3;1,1;]"..
- "list[current_name;src;2,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]" ..
- "listring[current_name;dst]" ..
- "listring[current_player;main]" ..
- "listring[current_name;src]" ..
- "listring[current_player;main]"
-
-minetest.register_node("default:furnace", {
- description = "Furnace",
- tiles ={"default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png",
- "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front.png"},
- paramtype2 = "facedir",
- groups = {cracky=2},
- legacy_facedir_simple = true,
- is_ground_content = false,
- sounds = default.node_sound_stone_defaults(),
- on_construct = function(pos)
- local meta = minetest.get_meta(pos)
- meta:set_string("formspec", default.furnace_inactive_formspec)
- meta:set_string("infotext", "Furnace")
- local inv = meta:get_inventory()
- inv:set_size("fuel", 1)
- inv:set_size("src", 1)
- inv:set_size("dst", 4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("fuel") then
- return false
- elseif not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-minetest.register_node("default:furnace_active", {
- description = "Furnace",
- tiles ={"default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png",
- "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front_active.png"},
- paramtype2 = "facedir",
- light_source = 8,
- drop = "default:furnace",
- groups = {cracky=2},
- legacy_facedir_simple = true,
- is_ground_content = false,
- sounds = default.node_sound_stone_defaults(),
- on_construct = function(pos)
- local meta = minetest.get_meta(pos)
- meta:set_string("formspec", default.furnace_inactive_formspec)
- meta:set_string("infotext", "Furnace");
- local inv = meta:get_inventory()
- inv:set_size("fuel", 1)
- inv:set_size("src", 1)
- inv:set_size("dst", 4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("fuel") then
- return false
- elseif not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-function swap_node(pos,name)
- local node = minetest.get_node(pos)
- if node.name == name then
- return
- end
- node.name = name
- minetest.swap_node(pos, node)
-end
-
-minetest.register_abm({
- nodenames = {"default:furnace","default:furnace_active"},
- interval = 1.0,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
- local meta = minetest.get_meta(pos)
- for i, name in ipairs({
- "fuel_totaltime",
- "fuel_time",
- "src_totaltime",
- "src_time"
- }) do
- if meta:get_string(name) == "" then
- meta:set_float(name, 0.0)
- end
- end
-
- local inv = meta:get_inventory()
-
- local srclist = inv:get_list("src")
- local cooked = nil
-
- if srclist then
- cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
- end
-
- local was_active = false
-
- if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
- was_active = true
- meta:set_float("fuel_time", meta:get_float("fuel_time") + 1)
- meta:set_float("src_time", meta:get_float("src_time") + 1)
- if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
- -- check if there's room for output in "dst" list
- if inv:room_for_item("dst",cooked.item) then
- -- Put result in "dst" list
- inv:add_item("dst", cooked.item)
- -- take stuff from "src" list
- srcstack = inv:get_stack("src", 1)
- srcstack:take_item()
- inv:set_stack("src", 1, srcstack)
- else
- print("Could not insert '"..cooked.item:to_string().."'")
- end
- meta:set_string("src_time", 0)
- end
- end
-
- if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
- local percent = math.floor(meta:get_float("fuel_time") /
- meta:get_float("fuel_totaltime") * 100)
- meta:set_string("infotext","Furnace active: "..percent.."%")
- swap_node(pos,"default:furnace_active")
- meta:set_string("formspec",
- "size[8,9]"..
- "image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
- (100-percent)..":default_furnace_fire_fg.png]"..
- "list[current_name;fuel;2,3;1,1;]"..
- "list[current_name;src;2,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]" ..
- "listring[current_name;dst]" ..
- "listring[current_player;main]" ..
- "listring[current_name;src]" ..
- "listring[current_player;main]")
- return
- end
-
- local fuel = nil
- local cooked = nil
- local fuellist = inv:get_list("fuel")
- local srclist = inv:get_list("src")
-
- if srclist then
- cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
- end
- if fuellist then
- fuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
- end
-
- if fuel.time <= 0 then
- meta:set_string("infotext","Furnace out of fuel")
- swap_node(pos,"default:furnace")
- meta:set_string("formspec", default.furnace_inactive_formspec)
- return
- end
-
- if cooked.item:is_empty() then
- if was_active then
- meta:set_string("infotext","Furnace is empty")
- swap_node(pos,"default:furnace")
- meta:set_string("formspec", default.furnace_inactive_formspec)
- end
- return
- end
-
- meta:set_string("fuel_totaltime", fuel.time)
- meta:set_string("fuel_time", 0)
-
- local stack = inv:get_stack("fuel", 1)
- stack:take_item()
- inv:set_stack("fuel", 1, stack)
- end,
-})
-
-minetest.register_node("default:cobble", {
- description = "Cobble",
- tiles ={"default_cobble.png"},
- is_ground_content = false,
- groups = {cracky=3},
- sounds = default.node_sound_stone_defaults(),
-})
-
-minetest.register_node("default:mossycobble", {
- description = "Mossy Cobble",
- tiles ={"default_mossycobble.png"},
- is_ground_content = false,
- groups = {cracky=3},
- sounds = default.node_sound_stone_defaults(),
-})
-
-minetest.register_node("default:steelblock", {
- description = "Steel Block",
- tiles ={"default_steel_block.png"},
- is_ground_content = false,
- groups = {snappy=1,bendy=2},
- sounds = default.node_sound_stone_defaults(),
-})
-
-minetest.register_node("default:nyancat", {
- description = "Nyancat",
- tiles ={"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
- "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
- inventory_image = "default_nc_front.png",
- paramtype2 = "facedir",
- groups = {cracky=2},
- legacy_facedir_simple = true,
- is_ground_content = false,
- sounds = default.node_sound_defaults(),
-})
-
-minetest.register_node("default:nyancat_rainbow", {
- description = "Nyancat Rainbow",
- tiles ={"default_nc_rb.png"},
- inventory_image = "default_nc_rb.png",
- is_ground_content = false,
- groups = {cracky=2},
- sounds = default.node_sound_defaults(),
-})
-
-minetest.register_node("default:sapling", {
- description = "Sapling",
- drawtype = "plantlike",
- visual_scale = 1.0,
- tiles ={"default_sapling.png"},
- inventory_image = "default_sapling.png",
- wield_image = "default_sapling.png",
- paramtype = "light",
- walkable = false,
- groups = {snappy=2,dig_immediate=3,attached_node=1},
- sounds = default.node_sound_defaults(),
-})
-
-minetest.register_node("default:apple", {
- description = "Apple",
- drawtype = "plantlike",
- visual_scale = 1.0,
- tiles ={"default_apple.png"},
- inventory_image = "default_apple.png",
- paramtype = "light",
- is_ground_content = false,
- sunlight_propagates = true,
- walkable = false,
- groups = {fleshy=3,dig_immediate=3},
- on_use = minetest.item_eat(4),
- sounds = default.node_sound_defaults(),
-})
-
---
--- Grow tree function
---
-
-local c_air = minetest.get_content_id("air")
-local c_ignore = minetest.get_content_id("ignore")
-local c_tree = minetest.get_content_id("default:tree")
-local c_leaves = minetest.get_content_id("default:leaves")
-local c_apple = minetest.get_content_id("default:apple")
-function default.grow_tree(data, a, pos, is_apple_tree, seed)
- --[[
- NOTE: Tree-placing code is currently duplicated in the engine
- and in games that have saplings; both are deprecated but not
- replaced yet
- ]]--
- local pr = PseudoRandom(seed)
- local th = pr:next(4, 5)
- local x, y, z = pos.x, pos.y, pos.z
- for yy = y, y+th-1 do
- local vi = a:index(x, yy, z)
- if a:contains(x, yy, z) and (data[vi] == c_air or yy == y) then
- data[vi] = c_tree
- end
- end
- y = y+th-1 -- (x, y, z) is now last piece of trunk
- local leaves_a = VoxelArea:new{MinEdge={x=-2, y=-1, z=-2}, MaxEdge={x=2, y=2, z=2}}
- local leaves_buffer = {}
-
- -- Force leaves near the trunk
- local d = 1
- for xi = -d, d do
- for yi = -d, d do
- for zi = -d, d do
- leaves_buffer[leaves_a:index(xi, yi, zi)] = true
- end
- end
- end
-
- -- Add leaves randomly
- for iii = 1, 8 do
- local d = 1
- local xx = pr:next(leaves_a.MinEdge.x, leaves_a.MaxEdge.x - d)
- local yy = pr:next(leaves_a.MinEdge.y, leaves_a.MaxEdge.y - d)
- local zz = pr:next(leaves_a.MinEdge.z, leaves_a.MaxEdge.z - d)
-
- for xi = 0, d do
- for yi = 0, d do
- for zi = 0, d do
- leaves_buffer[leaves_a:index(xx+xi, yy+yi, zz+zi)] = true
- end
- end
- end
- end
-
- -- Add the leaves
- for xi = leaves_a.MinEdge.x, leaves_a.MaxEdge.x do
- for yi = leaves_a.MinEdge.y, leaves_a.MaxEdge.y do
- for zi = leaves_a.MinEdge.z, leaves_a.MaxEdge.z do
- if a:contains(x+xi, y+yi, z+zi) then
- local vi = a:index(x+xi, y+yi, z+zi)
- if data[vi] == c_air or data[vi] == c_ignore then
- if leaves_buffer[leaves_a:index(xi, yi, zi)] then
- if is_apple_tree and pr:next(1, 100) <= 10 then
- data[vi] = c_apple
- else
- data[vi] = c_leaves
- end
- end
- end
- end
- end
- end
- end
-end
-
---
--- ABMs
---
-
-minetest.register_abm({
- nodenames = {"default:sapling"},
- interval = 10,
- chance = 50,
- action = function(pos, node)
- if minetest.get_item_group(minetest.get_node(
- {x = pos.x, y = pos.y - 1, z = pos.z}).name, "soil") == 0 then
- return
- end
- print("A sapling grows into a tree at "..minetest.pos_to_string(pos))
- local vm = minetest.get_voxel_manip()
- local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16})
- local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
- local data = vm:get_data()
- default.grow_tree(data, a, pos, math.random(1, 4) == 1, math.random(1,100000))
- vm:set_data(data)
- vm:write_to_map(data)
- vm:update_map()
- end
-})
-
-minetest.register_abm({
- nodenames = {"default:dirt"},
- interval = 2,
- chance = 200,
- action = function(pos, node)
- local above = {x=pos.x, y=pos.y+1, z=pos.z}
- local name = minetest.get_node(above).name
- local nodedef = minetest.registered_nodes[name]
- if nodedef and (nodedef.sunlight_propagates or nodedef.paramtype == "light")
- and nodedef.liquidtype == "none"
- and (minetest.get_node_light(above) or 0) >= 13 then
- if name == "default:snow" or name == "default:snowblock" then
- minetest.set_node(pos, {name = "default:dirt_with_snow"})
- else
- minetest.set_node(pos, {name = "default:dirt_with_grass"})
- end
- end
- end
-})
-
-minetest.register_abm({
- nodenames = {"default:dirt_with_grass"},
- interval = 2,
- chance = 20,
- action = function(pos, node)
- local above = {x=pos.x, y=pos.y+1, z=pos.z}
- local name = minetest.get_node(above).name
- local nodedef = minetest.registered_nodes[name]
- if name ~= "ignore" and nodedef
- and not ((nodedef.sunlight_propagates or nodedef.paramtype == "light")
- and nodedef.liquidtype == "none") then
- minetest.set_node(pos, {name = "default:dirt"})
- end
- end
-})
-
---
--- Crafting items
---
-
-minetest.register_craftitem("default:stick", {
- description = "Stick",
- inventory_image = "default_stick.png",
-})
-
-minetest.register_craftitem("default:paper", {
- description = "Paper",
- inventory_image = "default_paper.png",
-})
-
-minetest.register_craftitem("default:book", {
- description = "Book",
- inventory_image = "default_book.png",
-})
-
-minetest.register_craftitem("default:coal_lump", {
- description = "Lump of coal",
- inventory_image = "default_coal_lump.png",
-})
-
-minetest.register_craftitem("default:iron_lump", {
- description = "Lump of iron",
- inventory_image = "default_iron_lump.png",
-})
-
-minetest.register_craftitem("default:clay_lump", {
- description = "Lump of clay",
- inventory_image = "default_clay_lump.png",
-})
-
-minetest.register_craftitem("default:steel_ingot", {
- description = "Steel ingot",
- inventory_image = "default_steel_ingot.png",
-})
-
-minetest.register_craftitem("default:clay_brick", {
- description = "Clay brick",
- inventory_image = "default_steel_ingot.png",
- inventory_image = "default_clay_brick.png",
-})
-
-minetest.register_craftitem("default:scorched_stuff", {
- description = "Scorched stuff",
- inventory_image = "default_scorched_stuff.png",
-})
-
---
--- Support old code
---
-
-function default.spawn_falling_node(p, nodename)
- spawn_falling_node(p, nodename)
-end
-
--- Horrible stuff to support old code
--- Don't use this and never do what this does, it's completely wrong!
--- (More specifically, the client and the C++ code doesn't get the group)
-function default.register_falling_node(nodename, texture)
- minetest.log("error", debug.traceback())
- minetest.log('error', "WARNING: default.register_falling_node is deprecated")
- if minetest.registered_nodes[nodename] then
- minetest.registered_nodes[nodename].groups.falling_node = 1
- end
-end
-
---
--- Global callbacks
---
-
--- Global environment step function
-function on_step(dtime)
- -- print("on_step")
-end
-minetest.register_globalstep(on_step)
-
-function on_placenode(p, node)
- --print("on_placenode")
-end
-minetest.register_on_placenode(on_placenode)
-
-function on_dignode(p, node)
- --print("on_dignode")
-end
-minetest.register_on_dignode(on_dignode)
-
-function on_punchnode(p, node)
-end
-minetest.register_on_punchnode(on_punchnode)
diff --git a/games/minimal/mods/default/mapgen.lua b/games/minimal/mods/default/mapgen.lua
deleted file mode 100644
index 30a865366..000000000
--- a/games/minimal/mods/default/mapgen.lua
+++ /dev/null
@@ -1,137 +0,0 @@
---
--- Aliases for map generator outputs
---
-
-
-minetest.register_alias("mapgen_stone", "default:stone")
-minetest.register_alias("mapgen_dirt", "default:dirt")
-minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass")
-minetest.register_alias("mapgen_sand", "default:sand")
-minetest.register_alias("mapgen_water_source", "default:water_source")
-minetest.register_alias("mapgen_river_water_source", "default:river_water_source")
-minetest.register_alias("mapgen_lava_source", "default:lava_source")
-minetest.register_alias("mapgen_gravel", "default:gravel")
-
-minetest.register_alias("mapgen_tree", "default:tree")
-minetest.register_alias("mapgen_leaves", "default:leaves")
-minetest.register_alias("mapgen_apple", "default:apple")
-minetest.register_alias("mapgen_junglegrass", "default:junglegrass")
-
-minetest.register_alias("mapgen_cobble", "default:cobble")
-minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble")
-minetest.register_alias("mapgen_mossycobble", "default:mossycobble")
-
-
---
--- Ore generation
---
-
-
--- Blob ore first to avoid other ores inside blobs
-
-minetest.register_ore({
- ore_type = "blob",
- ore = "default:clay",
- wherein = {"default:sand"},
- clust_scarcity = 24*24*24,
- clust_size = 7,
- y_min = -15,
- y_max = 0,
- noise_threshold = 0,
- noise_params = {
- offset=0.35,
- scale=0.2,
- spread={x=5, y=5, z=5},
- seed=-316,
- octaves=1,
- persist=0.5
- },
-})
-
-minetest.register_ore({
- ore_type = "scatter",
- ore = "default:stone_with_coal",
- wherein = "default:stone",
- clust_scarcity = 8*8*8,
- clust_num_ores = 8,
- clust_size = 3,
- y_min = -31000,
- y_max = 64,
-})
-
-minetest.register_ore({
- ore_type = "scatter",
- ore = "default:stone_with_iron",
- wherein = "default:stone",
- clust_scarcity = 12*12*12,
- clust_num_ores = 3,
- clust_size = 2,
- y_min = -15,
- y_max = 2,
-})
-
-minetest.register_ore({
- ore_type = "scatter",
- ore = "default:stone_with_iron",
- wherein = "default:stone",
- clust_scarcity = 9*9*9,
- clust_num_ores = 5,
- clust_size = 3,
- y_min = -63,
- y_max = -16,
-})
-
-minetest.register_ore({
- ore_type = "scatter",
- ore = "default:stone_with_iron",
- wherein = "default:stone",
- clust_scarcity = 7*7*7,
- clust_num_ores = 5,
- clust_size = 3,
- y_min = -31000,
- y_max = -64,
-})
-
-
---
--- Register biomes for biome API
---
-
-
-minetest.clear_registered_biomes()
-minetest.clear_registered_decorations()
-
-minetest.register_biome({
- name = "default:grassland",
- --node_dust = "",
- node_top = "default:dirt_with_grass",
- depth_top = 1,
- node_filler = "default:dirt",
- depth_filler = 1,
- --node_stone = "",
- --node_water_top = "",
- --depth_water_top = ,
- --node_water = "",
- y_min = 5,
- y_max = 31000,
- heat_point = 50,
- humidity_point = 50,
-})
-
-minetest.register_biome({
- name = "default:grassland_ocean",
- --node_dust = "",
- node_top = "default:sand",
- depth_top = 1,
- node_filler = "default:sand",
- depth_filler = 2,
- --node_stone = "",
- --node_water_top = "",
- --depth_water_top = ,
- --node_water = "",
- y_min = -31000,
- y_max = 4,
- heat_point = 50,
- humidity_point = 50,
-})
-
diff --git a/games/minimal/mods/default/mod.conf b/games/minimal/mods/default/mod.conf
deleted file mode 100644
index f6f7ea798..000000000
--- a/games/minimal/mods/default/mod.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-name = default
-description = Minimal default, adds basic nodes
diff --git a/games/minimal/mods/default/sounds/default_grass_footstep.1.ogg b/games/minimal/mods/default/sounds/default_grass_footstep.1.ogg
deleted file mode 100644
index a04cdb47c..000000000
--- a/games/minimal/mods/default/sounds/default_grass_footstep.1.ogg
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_apple.png b/games/minimal/mods/default/textures/default_apple.png
deleted file mode 100644
index 4473dca28..000000000
--- a/games/minimal/mods/default/textures/default_apple.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_book.png b/games/minimal/mods/default/textures/default_book.png
deleted file mode 100644
index ea14a372a..000000000
--- a/games/minimal/mods/default/textures/default_book.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_bookshelf.png b/games/minimal/mods/default/textures/default_bookshelf.png
deleted file mode 100644
index f225e3449..000000000
--- a/games/minimal/mods/default/textures/default_bookshelf.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_brick.png b/games/minimal/mods/default/textures/default_brick.png
deleted file mode 100644
index def1cf0b1..000000000
--- a/games/minimal/mods/default/textures/default_brick.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_cactus_side.png b/games/minimal/mods/default/textures/default_cactus_side.png
deleted file mode 100644
index 128a4d28a..000000000
--- a/games/minimal/mods/default/textures/default_cactus_side.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_cactus_top.png b/games/minimal/mods/default/textures/default_cactus_top.png
deleted file mode 100644
index eda1a0bb6..000000000
--- a/games/minimal/mods/default/textures/default_cactus_top.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_chest.png b/games/minimal/mods/default/textures/default_chest.png
deleted file mode 100644
index 9746a3fd9..000000000
--- a/games/minimal/mods/default/textures/default_chest.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_clay.png b/games/minimal/mods/default/textures/default_clay.png
deleted file mode 100644
index 070b69e48..000000000
--- a/games/minimal/mods/default/textures/default_clay.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_clay_brick.png b/games/minimal/mods/default/textures/default_clay_brick.png
deleted file mode 100644
index e25633b70..000000000
--- a/games/minimal/mods/default/textures/default_clay_brick.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_clay_lump.png b/games/minimal/mods/default/textures/default_clay_lump.png
deleted file mode 100644
index ceed6fa75..000000000
--- a/games/minimal/mods/default/textures/default_clay_lump.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_cloud.png b/games/minimal/mods/default/textures/default_cloud.png
deleted file mode 100644
index faf0ec13d..000000000
--- a/games/minimal/mods/default/textures/default_cloud.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_coal_lump.png b/games/minimal/mods/default/textures/default_coal_lump.png
deleted file mode 100644
index dae47e342..000000000
--- a/games/minimal/mods/default/textures/default_coal_lump.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_cobble.png b/games/minimal/mods/default/textures/default_cobble.png
deleted file mode 100644
index 2a28d25a5..000000000
--- a/games/minimal/mods/default/textures/default_cobble.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_dirt.png b/games/minimal/mods/default/textures/default_dirt.png
deleted file mode 100644
index 7cb9c89a6..000000000
--- a/games/minimal/mods/default/textures/default_dirt.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_fence.png b/games/minimal/mods/default/textures/default_fence.png
deleted file mode 100644
index e3510c52a..000000000
--- a/games/minimal/mods/default/textures/default_fence.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_furnace_fire_bg.png b/games/minimal/mods/default/textures/default_furnace_fire_bg.png
deleted file mode 100644
index e3370f438..000000000
--- a/games/minimal/mods/default/textures/default_furnace_fire_bg.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_furnace_fire_fg.png b/games/minimal/mods/default/textures/default_furnace_fire_fg.png
deleted file mode 100644
index 7a126e325..000000000
--- a/games/minimal/mods/default/textures/default_furnace_fire_fg.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_furnace_front.png b/games/minimal/mods/default/textures/default_furnace_front.png
deleted file mode 100644
index 4da398c0a..000000000
--- a/games/minimal/mods/default/textures/default_furnace_front.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_furnace_front_active.png b/games/minimal/mods/default/textures/default_furnace_front_active.png
deleted file mode 100644
index 06c4ab3ef..000000000
--- a/games/minimal/mods/default/textures/default_furnace_front_active.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_furnace_side.png b/games/minimal/mods/default/textures/default_furnace_side.png
deleted file mode 100644
index c729de9bf..000000000
--- a/games/minimal/mods/default/textures/default_furnace_side.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_glass.png b/games/minimal/mods/default/textures/default_glass.png
deleted file mode 100644
index fd665a40c..000000000
--- a/games/minimal/mods/default/textures/default_glass.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_grass.png b/games/minimal/mods/default/textures/default_grass.png
deleted file mode 100644
index 1d76708a0..000000000
--- a/games/minimal/mods/default/textures/default_grass.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_grass_footsteps.png b/games/minimal/mods/default/textures/default_grass_footsteps.png
deleted file mode 100644
index 8349033d6..000000000
--- a/games/minimal/mods/default/textures/default_grass_footsteps.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_grass_side.png b/games/minimal/mods/default/textures/default_grass_side.png
deleted file mode 100644
index 4f4f680be..000000000
--- a/games/minimal/mods/default/textures/default_grass_side.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_gravel.png b/games/minimal/mods/default/textures/default_gravel.png
deleted file mode 100644
index 4b47e2346..000000000
--- a/games/minimal/mods/default/textures/default_gravel.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_iron_lump.png b/games/minimal/mods/default/textures/default_iron_lump.png
deleted file mode 100644
index 6b515f66d..000000000
--- a/games/minimal/mods/default/textures/default_iron_lump.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_junglegrass.png b/games/minimal/mods/default/textures/default_junglegrass.png
deleted file mode 100644
index 7066f7dd9..000000000
--- a/games/minimal/mods/default/textures/default_junglegrass.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_ladder.png b/games/minimal/mods/default/textures/default_ladder.png
deleted file mode 100644
index 46757b884..000000000
--- a/games/minimal/mods/default/textures/default_ladder.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_lava_flowing_animated.png b/games/minimal/mods/default/textures/default_lava_flowing_animated.png
deleted file mode 100644
index 0bbd13606..000000000
--- a/games/minimal/mods/default/textures/default_lava_flowing_animated.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_lava_source_animated.png b/games/minimal/mods/default/textures/default_lava_source_animated.png
deleted file mode 100644
index 54f4c0ddd..000000000
--- a/games/minimal/mods/default/textures/default_lava_source_animated.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_leaves.png b/games/minimal/mods/default/textures/default_leaves.png
deleted file mode 100644
index 00ce4471c..000000000
--- a/games/minimal/mods/default/textures/default_leaves.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_mese.png b/games/minimal/mods/default/textures/default_mese.png
deleted file mode 100644
index 123f0f4b9..000000000
--- a/games/minimal/mods/default/textures/default_mese.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_mineral_coal.png b/games/minimal/mods/default/textures/default_mineral_coal.png
deleted file mode 100644
index 0f52062af..000000000
--- a/games/minimal/mods/default/textures/default_mineral_coal.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_mineral_iron.png b/games/minimal/mods/default/textures/default_mineral_iron.png
deleted file mode 100644
index 6c894ce1c..000000000
--- a/games/minimal/mods/default/textures/default_mineral_iron.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_mossycobble.png b/games/minimal/mods/default/textures/default_mossycobble.png
deleted file mode 100644
index 5082953a6..000000000
--- a/games/minimal/mods/default/textures/default_mossycobble.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_nc_back.png b/games/minimal/mods/default/textures/default_nc_back.png
deleted file mode 100644
index e479ace83..000000000
--- a/games/minimal/mods/default/textures/default_nc_back.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_nc_front.png b/games/minimal/mods/default/textures/default_nc_front.png
deleted file mode 100644
index c9dd6a330..000000000
--- a/games/minimal/mods/default/textures/default_nc_front.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_nc_rb.png b/games/minimal/mods/default/textures/default_nc_rb.png
deleted file mode 100644
index 685a22ccf..000000000
--- a/games/minimal/mods/default/textures/default_nc_rb.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_nc_side.png b/games/minimal/mods/default/textures/default_nc_side.png
deleted file mode 100644
index bc85427ae..000000000
--- a/games/minimal/mods/default/textures/default_nc_side.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_paper.png b/games/minimal/mods/default/textures/default_paper.png
deleted file mode 100644
index 3c31f77c2..000000000
--- a/games/minimal/mods/default/textures/default_paper.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_papyrus.png b/games/minimal/mods/default/textures/default_papyrus.png
deleted file mode 100644
index 3707e4081..000000000
--- a/games/minimal/mods/default/textures/default_papyrus.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_rail.png b/games/minimal/mods/default/textures/default_rail.png
deleted file mode 100644
index 777e10c00..000000000
--- a/games/minimal/mods/default/textures/default_rail.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_rail_crossing.png b/games/minimal/mods/default/textures/default_rail_crossing.png
deleted file mode 100644
index a988c4740..000000000
--- a/games/minimal/mods/default/textures/default_rail_crossing.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_rail_curved.png b/games/minimal/mods/default/textures/default_rail_curved.png
deleted file mode 100644
index f87e826c9..000000000
--- a/games/minimal/mods/default/textures/default_rail_curved.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_rail_t_junction.png b/games/minimal/mods/default/textures/default_rail_t_junction.png
deleted file mode 100644
index fd25b5ba6..000000000
--- a/games/minimal/mods/default/textures/default_rail_t_junction.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_river_water.png b/games/minimal/mods/default/textures/default_river_water.png
deleted file mode 100644
index 3b55c5f66..000000000
--- a/games/minimal/mods/default/textures/default_river_water.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_sand.png b/games/minimal/mods/default/textures/default_sand.png
deleted file mode 100644
index 1a56cc737..000000000
--- a/games/minimal/mods/default/textures/default_sand.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_sandstone.png b/games/minimal/mods/default/textures/default_sandstone.png
deleted file mode 100644
index bd9cb8692..000000000
--- a/games/minimal/mods/default/textures/default_sandstone.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_sapling.png b/games/minimal/mods/default/textures/default_sapling.png
deleted file mode 100644
index 93602322c..000000000
--- a/games/minimal/mods/default/textures/default_sapling.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_scorched_stuff.png b/games/minimal/mods/default/textures/default_scorched_stuff.png
deleted file mode 100644
index c7efc7e58..000000000
--- a/games/minimal/mods/default/textures/default_scorched_stuff.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_sign_wall.png b/games/minimal/mods/default/textures/default_sign_wall.png
deleted file mode 100644
index 93c075a2d..000000000
--- a/games/minimal/mods/default/textures/default_sign_wall.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_steel_block.png b/games/minimal/mods/default/textures/default_steel_block.png
deleted file mode 100644
index 9c0a0e248..000000000
--- a/games/minimal/mods/default/textures/default_steel_block.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_steel_ingot.png b/games/minimal/mods/default/textures/default_steel_ingot.png
deleted file mode 100644
index ad133bc12..000000000
--- a/games/minimal/mods/default/textures/default_steel_ingot.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_stick.png b/games/minimal/mods/default/textures/default_stick.png
deleted file mode 100644
index 055a6ac04..000000000
--- a/games/minimal/mods/default/textures/default_stick.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_stone.png b/games/minimal/mods/default/textures/default_stone.png
deleted file mode 100644
index a835fe002..000000000
--- a/games/minimal/mods/default/textures/default_stone.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tnt_bottom.png b/games/minimal/mods/default/textures/default_tnt_bottom.png
deleted file mode 100644
index 4eda0603f..000000000
--- a/games/minimal/mods/default/textures/default_tnt_bottom.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tnt_side.png b/games/minimal/mods/default/textures/default_tnt_side.png
deleted file mode 100644
index c259726d6..000000000
--- a/games/minimal/mods/default/textures/default_tnt_side.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tnt_top.png b/games/minimal/mods/default/textures/default_tnt_top.png
deleted file mode 100644
index a031a34ad..000000000
--- a/games/minimal/mods/default/textures/default_tnt_top.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_steelaxe.png b/games/minimal/mods/default/textures/default_tool_steelaxe.png
deleted file mode 100644
index fae19dd0d..000000000
--- a/games/minimal/mods/default/textures/default_tool_steelaxe.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_steelpick.png b/games/minimal/mods/default/textures/default_tool_steelpick.png
deleted file mode 100644
index 3a8f58643..000000000
--- a/games/minimal/mods/default/textures/default_tool_steelpick.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_steelshovel.png b/games/minimal/mods/default/textures/default_tool_steelshovel.png
deleted file mode 100644
index d5b1bc6bc..000000000
--- a/games/minimal/mods/default/textures/default_tool_steelshovel.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_steelsword.png b/games/minimal/mods/default/textures/default_tool_steelsword.png
deleted file mode 100644
index efc61a0d1..000000000
--- a/games/minimal/mods/default/textures/default_tool_steelsword.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_stoneaxe.png b/games/minimal/mods/default/textures/default_tool_stoneaxe.png
deleted file mode 100644
index 532e16fbc..000000000
--- a/games/minimal/mods/default/textures/default_tool_stoneaxe.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_stoneshovel.png b/games/minimal/mods/default/textures/default_tool_stoneshovel.png
deleted file mode 100644
index 7bbd2d407..000000000
--- a/games/minimal/mods/default/textures/default_tool_stoneshovel.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_stonesword.png b/games/minimal/mods/default/textures/default_tool_stonesword.png
deleted file mode 100644
index 533b8734f..000000000
--- a/games/minimal/mods/default/textures/default_tool_stonesword.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_woodaxe.png b/games/minimal/mods/default/textures/default_tool_woodaxe.png
deleted file mode 100644
index 6e70f4a21..000000000
--- a/games/minimal/mods/default/textures/default_tool_woodaxe.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_woodshovel.png b/games/minimal/mods/default/textures/default_tool_woodshovel.png
deleted file mode 100644
index e0b3608db..000000000
--- a/games/minimal/mods/default/textures/default_tool_woodshovel.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tool_woodsword.png b/games/minimal/mods/default/textures/default_tool_woodsword.png
deleted file mode 100644
index 8099af139..000000000
--- a/games/minimal/mods/default/textures/default_tool_woodsword.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_torch.png b/games/minimal/mods/default/textures/default_torch.png
deleted file mode 100644
index 21d98bdbb..000000000
--- a/games/minimal/mods/default/textures/default_torch.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_torch_on_ceiling.png b/games/minimal/mods/default/textures/default_torch_on_ceiling.png
deleted file mode 100644
index dccd380b2..000000000
--- a/games/minimal/mods/default/textures/default_torch_on_ceiling.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_torch_on_floor.png b/games/minimal/mods/default/textures/default_torch_on_floor.png
deleted file mode 100644
index c22010750..000000000
--- a/games/minimal/mods/default/textures/default_torch_on_floor.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tree.png b/games/minimal/mods/default/textures/default_tree.png
deleted file mode 100644
index 65abfc243..000000000
--- a/games/minimal/mods/default/textures/default_tree.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_tree_top.png b/games/minimal/mods/default/textures/default_tree_top.png
deleted file mode 100644
index 3e6bd5262..000000000
--- a/games/minimal/mods/default/textures/default_tree_top.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/default_wood.png b/games/minimal/mods/default/textures/default_wood.png
deleted file mode 100644
index 57c1d7c12..000000000
--- a/games/minimal/mods/default/textures/default_wood.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/default/textures/treeprop.png b/games/minimal/mods/default/textures/treeprop.png
deleted file mode 100644
index eb8a8e6c4..000000000
--- a/games/minimal/mods/default/textures/treeprop.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/experimental/init.lua b/games/minimal/mods/experimental/init.lua
deleted file mode 100644
index e8aeff2b3..000000000
--- a/games/minimal/mods/experimental/init.lua
+++ /dev/null
@@ -1,822 +0,0 @@
---
--- Experimental things
---
-
-dofile(minetest.get_modpath("experimental").."/modchannels.lua")
-
--- For testing random stuff
-
-experimental = {}
-
-function experimental.print_to_everything(msg)
- minetest.log("action", msg)
- minetest.chat_send_all(msg)
-end
-
---[[
-experimental.player_visual_index = 0
-function switch_player_visual()
- for _, obj in pairs(minetest.get_connected_players()) do
- if experimental.player_visual_index == 0 then
- obj:set_properties({visual="upright_sprite"})
- else
- obj:set_properties({visual="cube"})
- end
- end
- experimental.player_visual_index = (experimental.player_visual_index + 1) % 2
- minetest.after(1.0, switch_player_visual)
-end
-minetest.after(1.0, switch_player_visual)
-]]
-
-minetest.register_node("experimental:soundblock", {
- tiles = {"unknown_node.png", "default_tnt_bottom.png",
- "default_tnt_side.png", "default_tnt_side.png",
- "default_tnt_side.png", "default_tnt_side.png"},
- inventory_image = minetest.inventorycube("unknown_node.png",
- "default_tnt_side.png", "default_tnt_side.png"),
- groups = {dig_immediate=3},
-})
-
-minetest.register_alias("sb", "experimental:soundblock")
-
-minetest.register_abm({
- nodenames = {"experimental:soundblock"},
- interval = 1,
- chance = 1,
- action = function(p0, node, _, _)
- minetest.sound_play("default_grass_footstep", {pos=p0, gain=0.5})
- end,
-})
-
---[[
-stepsound = -1
-function test_sound()
- print("test_sound")
- stepsound = minetest.sound_play("default_grass_footstep", {gain=1.0})
- minetest.after(2.0, test_sound)
- --minetest.after(0.1, test_sound_stop)
-end
-function test_sound_stop()
- print("test_sound_stop")
- minetest.sound_stop(stepsound)
- minetest.after(2.0, test_sound)
-end
-test_sound()
---]]
-
-function on_step(dtime)
- -- print("experimental on_step")
- --[[
- objs = minetest.get_objects_inside_radius({x=0,y=0,z=0}, 10)
- for k, obj in pairs(objs) do
- name = obj:get_player_name()
- if name then
- print(name.." at "..dump(obj:getpos()))
- print(name.." dir: "..dump(obj:get_look_dir()))
- print(name.." pitch: "..dump(obj:get_look_pitch()))
- print(name.." yaw: "..dump(obj:get_look_yaw()))
- else
- print("Some object at "..dump(obj:getpos()))
- end
- end
- --]]
- --[[
- if experimental.t1 == nil then
- experimental.t1 = 0
- end
- experimental.t1 = experimental.t1 + dtime
- if experimental.t1 >= 2 then
- experimental.t1 = experimental.t1 - 2
- minetest.log("verbose", "time of day is "..minetest.get_timeofday())
- if experimental.day then
- minetest.log("verbose", "forcing day->night")
- experimental.day = false
- minetest.set_timeofday(0.0)
- else
- minetest.log("verbose", "forcing night->day")
- experimental.day = true
- minetest.set_timeofday(0.5)
- end
- minetest.log("verbose", "time of day is "..minetest.get_timeofday())
- end
- --]]
-end
-minetest.register_globalstep(on_step)
-
---
--- Random stuff
---
-
---
--- TNT (not functional)
---
-
-minetest.register_craft({
- output = 'experimental:tnt',
- recipe = {
- {'default:wood'},
- {'default:coal_lump'},
- {'default:wood'}
- }
-})
-
-minetest.register_node("experimental:tnt", {
- tiles = {"default_tnt_top.png", "default_tnt_bottom.png",
- "default_tnt_side.png", "default_tnt_side.png",
- "default_tnt_side.png", "default_tnt_side.png"},
- inventory_image = minetest.inventorycube("default_tnt_top.png",
- "default_tnt_side.png", "default_tnt_side.png"),
- drop = '', -- Get nothing
- material = {
- diggability = "not",
- },
-})
-
-minetest.register_on_punchnode(function(p, node)
- if node.name == "experimental:tnt" then
- minetest.remove_node(p)
- minetest.add_entity(p, "experimental:tnt")
- minetest.check_for_falling(p)
- end
-end)
-
-local TNT = {
- -- Static definition
- physical = true, -- Collides with things
- -- weight = 5,
- collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
- visual = "cube",
- textures = {"default_tnt_top.png", "default_tnt_bottom.png",
- "default_tnt_side.png", "default_tnt_side.png",
- "default_tnt_side.png", "default_tnt_side.png"},
- -- Initial value for our timer
- timer = 0,
- -- Number of punches required to defuse
- health = 1,
- blinktimer = 0,
- blinkstatus = true,
-}
-
--- Called when a TNT object is created
-function TNT:on_activate(staticdata)
- print("TNT:on_activate()")
- self.object:setvelocity({x=0, y=4, z=0})
- self.object:setacceleration({x=0, y=-10, z=0})
- self.object:settexturemod("^[brighten")
- self.object:set_armor_groups({immortal=1})
-end
-
--- Called periodically
-function TNT:on_step(dtime)
- --print("TNT:on_step()")
- self.timer = self.timer + dtime
- self.blinktimer = self.blinktimer + dtime
- if self.blinktimer > 0.5 then
- self.blinktimer = self.blinktimer - 0.5
- if self.blinkstatus then
- self.object:settexturemod("")
- else
- self.object:settexturemod("^[brighten")
- end
- self.blinkstatus = not self.blinkstatus
- end
-end
-
--- Called when object is punched
-function TNT:on_punch(hitter)
- print("TNT:on_punch()")
- self.health = self.health - 1
- if self.health <= 0 then
- self.object:remove()
- hitter:get_inventory():add_item("main", "experimental:tnt")
- --hitter:set_hp(hitter:get_hp() - 1)
- end
-end
-
--- Called when object is right-clicked
-function TNT:on_rightclick(clicker)
- --pos = self.object:getpos()
- --pos = {x=pos.x, y=pos.y+0.1, z=pos.z}
- --self.object:moveto(pos, false)
-end
-
---print("TNT dump: "..dump(TNT))
---print("Registering TNT");
-minetest.register_entity("experimental:tnt", TNT)
-
--- Add TNT's old name also
-minetest.register_alias("TNT", "experimental:tnt")
-
---
--- The dummyball!
---
-
-minetest.register_entity("experimental:dummyball", {
- initial_properties = {
- hp_max = 20,
- physical = false,
- collisionbox = {-0.4,-0.4,-0.4, 0.4,0.4,0.4},
- visual = "sprite",
- visual_size = {x=1, y=1},
- textures = {"experimental_dummyball.png"},
- spritediv = {x=1, y=3},
- initial_sprite_basepos = {x=0, y=0},
- },
-
- phase = 0,
- phasetimer = 0,
-
- on_activate = function(self, staticdata)
- minetest.log("action", "Dummyball activated!")
- end,
-
- on_step = function(self, dtime)
- self.phasetimer = self.phasetimer + dtime
- if self.phasetimer > 2.0 then
- self.phasetimer = self.phasetimer - 2.0
- self.phase = self.phase + 1
- if self.phase >= 3 then
- self.phase = 0
- end
- self.object:setsprite({x=0, y=self.phase})
- phasearmor = {
- [0]={cracky=3},
- [1]={crumbly=3},
- [2]={fleshy=3}
- }
- self.object:set_armor_groups(phasearmor[self.phase])
- end
- end,
-
- on_punch = function(self, hitter)
- end,
-})
-
-minetest.register_on_chat_message(function(name, message)
- local cmd = "/dummyball"
- if message:sub(0, #cmd) == cmd then
- count = tonumber(message:sub(#cmd+1)) or 1
- if not minetest.get_player_privs(name)["give"] then
- minetest.chat_send_player(name, "you don't have permission to spawn (give)")
- return true -- Handled chat message
- end
- if not minetest.get_player_privs(name)["interact"] then
- minetest.chat_send_player(name, "you don't have permission to interact")
- return true -- Handled chat message
- end
- if count >= 2 and not minetest.get_player_privs(name)["server"] then
- minetest.chat_send_player(name, "you don't have " ..
- "permission to spawn multiple " ..
- "dummyballs (server)")
- return true -- Handled chat message
- end
- local player = minetest.get_player_by_name(name)
- if player == nil then
- print("Unable to spawn entity, player is nil")
- return true -- Handled chat message
- end
- local entityname = "experimental:dummyball"
- local p = player:getpos()
- p.y = p.y + 1
- for i = 1,count do
- minetest.add_entity(p, entityname)
- end
- minetest.chat_send_player(name, '"'..entityname
- ..'" spawned '..tostring(count)..' time(s).');
- return true -- Handled chat message
- end
-end)
-
---
--- A test entity for testing animated and yaw-modulated sprites
---
-
-minetest.register_entity("experimental:testentity", {
- -- Static definition
- physical = true, -- Collides with things
- -- weight = 5,
- collisionbox = {-0.7,-1.35,-0.7, 0.7,1.0,0.7},
- --collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
- visual = "sprite",
- visual_size = {x=2, y=3},
- textures = {"dungeon_master.png^[makealpha:128,0,0^[makealpha:128,128,0"},
- spritediv = {x=6, y=5},
- initial_sprite_basepos = {x=0, y=0},
-
- on_activate = function(self, staticdata)
- print("testentity.on_activate")
- self.object:setsprite({x=0,y=0}, 1, 0, true)
- --self.object:setsprite({x=0,y=0}, 4, 0.3, true)
-
- -- Set gravity
- self.object:setacceleration({x=0, y=-10, z=0})
- -- Jump a bit upwards
- self.object:setvelocity({x=0, y=10, z=0})
- end,
-
- on_punch = function(self, hitter)
- self.object:remove()
- hitter:add_to_inventory('craft testobject1 1')
- end,
- on_death = function(self, killer)
- print("testentity.on_death")
- end
-})
-
---
--- More random stuff
---
-
-minetest.register_on_respawnplayer(function(player)
- print("on_respawnplayer")
- -- player:setpos({x=0, y=30, z=0})
- -- return true
-end)
-
-minetest.register_on_generated(function(minp, maxp)
- --print("on_generated: minp="..dump(minp).." maxp="..dump(maxp))
- --cp = {x=(minp.x+maxp.x)/2, y=(minp.y+maxp.y)/2, z=(minp.z+maxp.z)/2}
- --minetest.add_node(cp, {name="sand"})
-end)
-
--- Example setting get
---print("setting max_users = " .. dump(minetest.setting_get("max_users")))
---print("setting asdf = " .. dump(minetest.setting_get("asdf")))
-
-minetest.register_on_chat_message(function(name, message)
- --[[print("on_chat_message: name="..dump(name).." message="..dump(message))
- local cmd = "/testcommand"
- if message:sub(0, #cmd) == cmd then
- print(cmd.." invoked")
- return true
- end
- local cmd = "/help"
- if message:sub(0, #cmd) == cmd then
- print("script-overridden help command")
- minetest.chat_send_all("script-overridden help command")
- return true
- end]]
-end)
-
--- Grow papyrus on TNT every 10 seconds
---[[minetest.register_abm({
- nodenames = {"TNT"},
- interval = 10.0,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
- print("TNT ABM action")
- pos.y = pos.y + 1
- minetest.add_node(pos, {name="papyrus"})
- end,
-})]]
-
--- Replace texts of alls signs with "foo" every 10 seconds
---[[minetest.register_abm({
- nodenames = {"sign_wall"},
- interval = 10.0,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
- print("ABM: Sign text changed")
- local meta = minetest.get_meta(pos)
- meta:set_text("foo")
- end,
-})]]
-
---[[local ncpos = nil
-local ncq = 1
-local ncstuff = {
- {2, 1, 0, 3}, {3, 0, 1, 2}, {4, -1, 0, 1}, {5, -1, 0, 1}, {6, 0, -1, 0},
- {7, 0, -1, 0}, {8, 1, 0, 3}, {9, 1, 0, 3}, {10, 1, 0, 3}, {11, 0, 1, 2},
- {12, 0, 1, 2}, {13, 0, 1, 2}, {14, -1, 0, 1}, {15, -1, 0, 1}, {16, -1, 0, 1},
- {17, -1, 0, 1}, {18, 0, -1, 0}, {19, 0, -1, 0}, {20, 0, -1, 0}, {21, 0, -1, 0},
- {22, 1, 0, 3}, {23, 1, 0, 3}, {24, 1, 0, 3}, {25, 1, 0, 3}, {10, 0, 1, 2}
-}
-local ncold = {}
-local nctime = nil
-
-minetest.register_abm({
- nodenames = {"dirt_with_grass"},
- interval = 100000.0,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
- if ncpos ~= nil then
- return
- end
-
- if pos.x % 16 ~= 8 or pos.z % 16 ~= 8 then
- return
- end
-
- pos.y = pos.y + 1
- n = minetest.get_node(pos)
- print(dump(n))
- if n.name ~= "air" then
- return
- end
-
- pos.y = pos.y + 2
- ncpos = pos
- nctime = os.clock()
- minetest.add_node(ncpos, {name="nyancat"})
- end
-})
-
-minetest.register_abm({
- nodenames = {"nyancat"},
- interval = 1.0,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
- if ncpos == nil then
- return
- end
- if pos.x == ncpos.x and pos.y == ncpos.y and pos.z == ncpos.z then
- clock = os.clock()
- if clock - nctime < 0.1 then
- return
- end
- nctime = clock
-
- s0 = ncstuff[ncq]
- ncq = s0[1]
- s1 = ncstuff[ncq]
- p0 = pos
- p1 = {x = p0.x + s0[2], y = p0.y, z = p0.z + s0[3]}
- p2 = {x = p1.x + s1[2], y = p1.y, z = p1.z + s1[3]}
- table.insert(ncold, 1, p0)
- while #ncold >= 10 do
- minetest.add_node(ncold[#ncold], {name="air"})
- table.remove(ncold, #ncold)
- end
- minetest.add_node(p0, {name="nyancat_rainbow"})
- minetest.add_node(p1, {name="nyancat", param1=s0[4]})
- minetest.add_node(p2, {name="air"})
- ncpos = p1
- end
- end,
-})--]]
-
-minetest.register_node("experimental:tester_node_1", {
- description = "Tester Node 1 (construct/destruct/timer)",
- tiles = {"wieldhand.png"},
- groups = {oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
- -- This was known to cause a bug in minetest.item_place_node() when used
- -- via minetest.place_node(), causing a placer with no position
- paramtype2 = "facedir",
-
- on_construct = function(pos)
- experimental.print_to_everything("experimental:tester_node_1:on_construct("..minetest.pos_to_string(pos)..")")
- local meta = minetest.get_meta(pos)
- meta:set_string("mine", "test")
- local timer = minetest.get_node_timer(pos)
- timer:start(4, 3)
- end,
-
- after_place_node = function(pos, placer)
- experimental.print_to_everything("experimental:tester_node_1:after_place_node("..minetest.pos_to_string(pos)..")")
- local meta = minetest.get_meta(pos)
- if meta:get_string("mine") == "test" then
- experimental.print_to_everything("correct metadata found")
- else
- experimental.print_to_everything("incorrect metadata found")
- end
- end,
-
- on_destruct = function(pos)
- experimental.print_to_everything("experimental:tester_node_1:on_destruct("..minetest.pos_to_string(pos)..")")
- end,
-
- after_destruct = function(pos)
- experimental.print_to_everything("experimental:tester_node_1:after_destruct("..minetest.pos_to_string(pos)..")")
- end,
-
- after_dig_node = function(pos, oldnode, oldmetadata, digger)
- experimental.print_to_everything("experimental:tester_node_1:after_dig_node("..minetest.pos_to_string(pos)..")")
- end,
-
- on_timer = function(pos, elapsed)
- experimental.print_to_everything("on_timer(): elapsed="..dump(elapsed))
- return true
- end,
-})
-
-minetest.register_node("experimental:tiled", {
- description = "Tiled stone",
- tiles = {{
- name = "experimental_tiled.png",
- align_style = "world",
- scale = 8,
- }},
- groups = {cracky=2},
-})
-
-stairs.register_stair_and_slab("tiled_n", "experimental:tiled",
- {cracky=2},
- {{name="experimental_tiled.png", align_style="node", scale=8}},
- "Tiled stair (node-aligned)",
- "Tiled slab (node-aligned)")
-
-stairs.register_stair_and_slab("tiled", "experimantal:tiled",
- {cracky=2},
- {{name="experimental_tiled.png", align_style="world", scale=8}},
- "Tiled stair",
- "Tiled slab")
-
-minetest.register_craft({
- output = 'experimental:tiled 4',
- recipe = {
- {'default:cobble', '', 'default:cobble'},
- {'', '', ''},
- {'default:cobble', '', 'default:cobble'},
- }
-})
-
-minetest.register_craft({
- output = 'stairs:stair_tiled',
- recipe = {{'stairs:stair_tiled_n'}}
-})
-
-minetest.register_craft({
- output = 'stairs:stair_tiled_n',
- recipe = {{'stairs:stair_tiled'}}
-})
-
-minetest.register_craft({
- output = 'stairs:slab_tiled',
- recipe = {{'stairs:slab_tiled_n'}}
-})
-
-minetest.register_craft({
- output = 'stairs:slab_tiled_n',
- recipe = {{'stairs:slab_tiled'}}
-})
-
-minetest.register_craftitem("experimental:tester_tool_1", {
- description = "Tester Tool 1",
- inventory_image = "experimental_tester_tool_1.png",
- on_use = function(itemstack, user, pointed_thing)
- --print(dump(pointed_thing))
- if pointed_thing.type == "node" then
- local node = minetest.get_node(pointed_thing.under)
- if node.name == "experimental:tester_node_1" or node.name == "default:chest" then
- local p = pointed_thing.under
- minetest.log("action", "Tester tool used at "..minetest.pos_to_string(p))
- if node.name == "experimental:tester_node_1" then
- minetest.dig_node(p)
- else
- minetest.get_meta(p):mark_as_private({"infotext", "formspec"})
- minetest.chat_send_player(user:get_player_name(), "Verify that chest is unusable now.")
- end
- else
- local p = pointed_thing.above
- minetest.log("action", "Tester tool used at "..minetest.pos_to_string(p))
- minetest.place_node(p, {name="experimental:tester_node_1"})
- end
- end
- end,
-})
-
-minetest.register_craft({
- output = 'experimental:tester_tool_1',
- recipe = {
- {'group:crumbly'},
- {'group:crumbly'},
- }
-})
-
-minetest.register_craftitem("experimental:tester_tool_2", {
- description = "Tester Tool 2",
- inventory_image = "experimental_tester_tool_1.png^[invert:g",
- on_use = function(itemstack, user, pointed_thing)
- local pos = minetest.get_pointed_thing_position(pointed_thing, true)
- if pos == nil then return end
- pos = vector.add(pos, {x=0, y=0.5, z=0})
- local tex, anim
- if math.random(0, 1) == 0 then
- tex = "default_lava_source_animated.png"
- anim = {type="sheet_2d", frames_w=3, frames_h=2, frame_length=0.5}
- else
- tex = "default_lava_flowing_animated.png"
- anim = {type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3}
- end
-
- minetest.add_particle({
- pos = pos,
- velocity = {x=0, y=0, z=0},
- acceleration = {x=0, y=0.04, z=0},
- expirationtime = 6,
- collisiondetection = true,
- texture = tex,
- animation = anim,
- size = 4,
- glow = math.random(0, 5),
- })
- end,
-})
-
--- Test the disable_repair=1 group
-minetest.register_tool("experimental:unrepairable_tool", {
- description = "Unrepairable Tool",
- wield_image = "default_stone.png",
- inventory_image = "default_stone.png",
- tool_capabilities = {
- groupcaps = {
- cracky = {
- times = {3, 2, 1},
- }
- }
- },
- groups = { disable_repair = 1 }
-})
-
-minetest.register_tool("experimental:repairable_tool", {
- description = "Repairable Tool",
- wield_image = "default_dirt.png",
- inventory_image = "default_dirt.png",
- tool_capabilities = {
- groupcaps = {
- cracky = {
- times = {3, 2, 1},
- }
- }
- },
-})
-
-minetest.register_craft({
- output = 'experimental:tester_tool_2',
- recipe = {
- {'group:crumbly','group:crumbly'},
- }
-})
-
---[[minetest.register_on_joinplayer(function(player)
- minetest.after(3, function()
- player:set_inventory_formspec("size[8,7.5]"..
- "image[1,0.6;1,2;player.png]"..
- "list[current_player;main;0,3.5;8,4;]"..
- "list[current_player;craft;3,0;3,3;]"..
- "list[current_player;craftpreview;7,1;1,1;]")
- end)
-end)]]
-
--- Create a detached inventory
-local inv = minetest.create_detached_inventory("test_inventory", {
- allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
- experimental.print_to_everything("allow move asked")
- return count -- Allow all
- end,
- allow_put = function(inv, listname, index, stack, player)
- experimental.print_to_everything("allow put asked")
- return 1 -- Allow only 1
- end,
- allow_take = function(inv, listname, index, stack, player)
- experimental.print_to_everything("allow take asked")
- return 4 -- Allow 4 at max
- end,
- on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
- experimental.print_to_everything(player:get_player_name().." moved items")
- end,
- on_put = function(inv, listname, index, stack, player)
- experimental.print_to_everything(player:get_player_name().." put items")
- end,
- on_take = function(inv, listname, index, stack, player)
- experimental.print_to_everything(player:get_player_name().." took items")
- end,
-})
-inv:set_size("main", 4*6)
-inv:add_item("main", "experimental:tester_tool_1")
-inv:add_item("main", "experimental:tnt 5")
-
-minetest.register_chatcommand("test1", {
- params = "",
- description = "Test 1: Modify player's inventory view",
- func = function(name, param)
- local player = minetest.get_player_by_name(name)
- if not player then
- return
- end
- player:set_inventory_formspec(
- "size[13,7.5]"..
- "image[6,0.6;1,2;player.png]"..
- "list[current_player;main;5,3.5;8,4;]"..
- "list[current_player;craft;8,0;3,3;]"..
- "list[current_player;craftpreview;12,1;1,1;]"..
- "list[detached:test_inventory;main;0,0;4,6;0]"..
- "button[0.5,7;2,1;button1;Button 1]"..
- "button_exit[2.5,7;2,1;button2;Exit Button]"
- )
- minetest.chat_send_player(name, "Done.");
- end,
-})
-
-minetest.register_chatcommand("test_bulk_set_node", {
- params = "",
- description = "Test 2: bulk set a node",
- func = function(name, param)
- local player = minetest.get_player_by_name(name)
- if not player then
- return
- end
- local pos_list = {}
- local ppos = player:get_pos()
- local i = 1
- for x=2,10 do
- for y=2,10 do
- for z=2,10 do
- pos_list[i] = {x=ppos.x + x,y = ppos.y + y,z = ppos.z + z}
- i = i + 1
- end
- end
- end
- minetest.bulk_set_node(pos_list, {name = "default:stone"})
- minetest.chat_send_player(name, "Done.");
- end,
-})
-
-minetest.register_chatcommand("bench_bulk_set_node", {
- params = "",
- description = "Test 3: bulk set a node (bench)",
- func = function(name, param)
- local player = minetest.get_player_by_name(name)
- if not player then
- return
- end
- local pos_list = {}
- local ppos = player:get_pos()
- local i = 1
- for x=2,100 do
- for y=2,100 do
- for z=2,100 do
- pos_list[i] = {x=ppos.x + x,y = ppos.y + y,z = ppos.z + z}
- i = i + 1
- end
- end
- end
-
- minetest.chat_send_player(name, "Benching bulk set node. Warming up...");
-
- -- warm up with default:stone to prevent having different callbacks
- -- due to different node topology
- minetest.bulk_set_node(pos_list, {name = "default:stone"})
-
- minetest.chat_send_player(name, "Warming up finished, now benching...");
-
- local start_time = os.clock()
- for i=1,#pos_list do
- minetest.set_node(pos_list[i], {name = "default:stone"})
- end
- local middle_time = os.clock()
- minetest.bulk_set_node(pos_list, {name = "default:stone"})
- local end_time = os.clock()
- minetest.chat_send_player(name,
- string.format("Bench results: set_node loop[%.2fms], bulk_set_node[%.2fms]",
- (middle_time - start_time) * 1000,
- (end_time - middle_time) * 1000
- )
- );
- end,
-})
-
-local formspec_test_active = false
-
-minetest.register_on_player_receive_fields(function(player, formname, fields)
- if formspec_test_active then
- experimental.print_to_everything("Inventory fields 1: player="..player:get_player_name()..", fields="..dump(fields))
- end
-end)
-minetest.register_on_player_receive_fields(function(player, formname, fields)
- if formspec_test_active then
- experimental.print_to_everything("Inventory fields 2: player="..player:get_player_name()..", fields="..dump(fields))
- return true -- Disable the first callback
- end
-end)
-minetest.register_on_player_receive_fields(function(player, formname, fields)
- if formspec_test_active then
- experimental.print_to_everything("Inventory fields 3: player="..player:get_player_name()..", fields="..dump(fields))
- end
-end)
-
-minetest.register_chatcommand("test_formspec", {
- param = "",
- description = "Test 4: Toggle formspec test",
- func = function(name, param)
- formspec_test_active = not formspec_test_active
- if formspec_test_active then
- minetest.chat_send_player(name, "Formspec test enabled!")
- else
- minetest.chat_send_player(name, "Formspec test disabled!")
- end
- end
-})
-
-minetest.log("info", "experimental modname="..dump(minetest.get_current_modname()))
-minetest.log("info", "experimental modpath="..dump(minetest.get_modpath("experimental")))
-minetest.log("info", "experimental worldpath="..dump(minetest.get_worldpath()))
-
-
-core.register_on_mods_loaded(function()
- core.log("action", "Yeah experimental loaded mods.")
-end)
-
--- END
diff --git a/games/minimal/mods/experimental/mod.conf b/games/minimal/mods/experimental/mod.conf
deleted file mode 100644
index 018e761b3..000000000
--- a/games/minimal/mods/experimental/mod.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-name = experimental
-description = Minimal mod to test features
-depends = default, stairs
diff --git a/games/minimal/mods/experimental/modchannels.lua b/games/minimal/mods/experimental/modchannels.lua
deleted file mode 100644
index 8fce6cfc4..000000000
--- a/games/minimal/mods/experimental/modchannels.lua
+++ /dev/null
@@ -1,16 +0,0 @@
---
--- Mod channels experimental handlers
---
-local mod_channel = core.mod_channel_join("experimental_preview")
-
-core.register_on_modchannel_message(function(channel, sender, message)
- print("[minimal][modchannels] Server received message `" .. message
- .. "` on channel `" .. channel .. "` from sender `" .. sender .. "`")
-
- if mod_channel:is_writeable() then
- mod_channel:send_all("experimental answers to preview")
- mod_channel:leave()
- end
-end)
-
-print("[minimal][modchannels] Code loaded!")
diff --git a/games/minimal/mods/experimental/textures/experimental_dummyball.png b/games/minimal/mods/experimental/textures/experimental_dummyball.png
deleted file mode 100644
index 256414f46..000000000
--- a/games/minimal/mods/experimental/textures/experimental_dummyball.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/experimental/textures/experimental_tester_tool_1.png b/games/minimal/mods/experimental/textures/experimental_tester_tool_1.png
deleted file mode 100644
index 587923c86..000000000
--- a/games/minimal/mods/experimental/textures/experimental_tester_tool_1.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/experimental/textures/experimental_tiled.png b/games/minimal/mods/experimental/textures/experimental_tiled.png
deleted file mode 100644
index 67397b902..000000000
--- a/games/minimal/mods/experimental/textures/experimental_tiled.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/give_initial_stuff/init.lua b/games/minimal/mods/give_initial_stuff/init.lua
deleted file mode 100644
index 29b835c7d..000000000
--- a/games/minimal/mods/give_initial_stuff/init.lua
+++ /dev/null
@@ -1,16 +0,0 @@
-minetest.register_on_newplayer(function(player)
- print("[minimal] giving initial stuff to player")
- player:get_inventory():add_item('main', 'default:pick_stone')
- player:get_inventory():add_item('main', 'default:torch 99')
- player:get_inventory():add_item('main', 'default:cobble 99')
- player:get_inventory():add_item('main', 'default:wood 99')
- player:get_inventory():add_item('main', 'default:axe_steel')
- player:get_inventory():add_item('main', 'default:shovel_steel')
- player:get_inventory():add_item('main', 'default:pick_wood')
- player:get_inventory():add_item('main', 'default:pick_steel')
- player:get_inventory():add_item('main', 'default:pick_mese')
- player:get_inventory():add_item('main', 'default:mese 99')
- player:get_inventory():add_item('main', 'default:water_source 99')
- player:get_inventory():add_item('main', 'experimental:tester_tool_1')
-end)
-
diff --git a/games/minimal/mods/legacy/init.lua b/games/minimal/mods/legacy/init.lua
deleted file mode 100644
index 98ad69be0..000000000
--- a/games/minimal/mods/legacy/init.lua
+++ /dev/null
@@ -1,128 +0,0 @@
--- legacy (Minetest 0.4 mod)
--- Provides as much backwards-compatibility as feasible
-
---
--- Aliases to support loading 0.3 and old 0.4 worlds and inventories
---
-
-minetest.register_alias("stone", "default:stone")
-minetest.register_alias("stone_with_coal", "default:stone_with_coal")
-minetest.register_alias("stone_with_iron", "default:stone_with_iron")
-minetest.register_alias("dirt_with_grass", "default:dirt_with_grass")
-minetest.register_alias("dirt_with_grass_footsteps", "default:dirt_with_grass_footsteps")
-minetest.register_alias("dirt", "default:dirt")
-minetest.register_alias("sand", "default:sand")
-minetest.register_alias("gravel", "default:gravel")
-minetest.register_alias("sandstone", "default:sandstone")
-minetest.register_alias("clay", "default:clay")
-minetest.register_alias("brick", "default:brick")
-minetest.register_alias("tree", "default:tree")
-minetest.register_alias("jungletree", "default:jungletree")
-minetest.register_alias("junglegrass", "default:junglegrass")
-minetest.register_alias("leaves", "default:leaves")
-minetest.register_alias("cactus", "default:cactus")
-minetest.register_alias("papyrus", "default:papyrus")
-minetest.register_alias("bookshelf", "default:bookshelf")
-minetest.register_alias("glass", "default:glass")
-minetest.register_alias("wooden_fence", "default:fence_wood")
-minetest.register_alias("rail", "default:rail")
-minetest.register_alias("ladder", "default:ladder")
-minetest.register_alias("wood", "default:wood")
-minetest.register_alias("mese", "default:mese")
-minetest.register_alias("cloud", "default:cloud")
-minetest.register_alias("water_flowing", "default:water_flowing")
-minetest.register_alias("water_source", "default:water_source")
-minetest.register_alias("lava_flowing", "default:lava_flowing")
-minetest.register_alias("lava_source", "default:lava_source")
-minetest.register_alias("torch", "default:torch")
-minetest.register_alias("sign_wall", "default:sign_wall")
-minetest.register_alias("furnace", "default:furnace")
-minetest.register_alias("chest", "default:chest")
-minetest.register_alias("locked_chest", "default:chest_locked")
-minetest.register_alias("cobble", "default:cobble")
-minetest.register_alias("mossycobble", "default:mossycobble")
-minetest.register_alias("steelblock", "default:steelblock")
-minetest.register_alias("nyancat", "default:nyancat")
-minetest.register_alias("nyancat_rainbow", "default:nyancat_rainbow")
-minetest.register_alias("sapling", "default:sapling")
-minetest.register_alias("apple", "default:apple")
-
-minetest.register_alias("WPick", "default:pick_wood")
-minetest.register_alias("STPick", "default:pick_stone")
-minetest.register_alias("SteelPick", "default:pick_steel")
-minetest.register_alias("MesePick", "default:pick_mese")
-minetest.register_alias("WShovel", "default:shovel_wood")
-minetest.register_alias("STShovel", "default:shovel_stone")
-minetest.register_alias("SteelShovel", "default:shovel_steel")
-minetest.register_alias("WAxe", "default:axe_wood")
-minetest.register_alias("STAxe", "default:axe_stone")
-minetest.register_alias("SteelAxe", "default:axe_steel")
-minetest.register_alias("WSword", "default:sword_wood")
-minetest.register_alias("STSword", "default:sword_stone")
-minetest.register_alias("SteelSword", "default:sword_steel")
-
-minetest.register_alias("Stick", "default:stick")
-minetest.register_alias("paper", "default:paper")
-minetest.register_alias("book", "default:book")
-minetest.register_alias("lump_of_coal", "default:coal_lump")
-minetest.register_alias("lump_of_iron", "default:iron_lump")
-minetest.register_alias("lump_of_clay", "default:clay_lump")
-minetest.register_alias("steel_ingot", "default:steel_ingot")
-minetest.register_alias("clay_brick", "default:clay_brick")
-minetest.register_alias("scorched_stuff", "default:scorched_stuff")
-
---
--- Old items
---
-
-minetest.register_craftitem(":rat", {
- description = "Rat",
- inventory_image = "rat.png",
- on_drop = function(item, dropper, pos)
- item:take_item()
- return item
- end,
- on_place = function(item, dropped, pointed)
- pos = minetest.get_pointed_thing_position(pointed, true)
- if pos ~= nil then
- item:take_item()
- return item
- end
- end
-})
-
-minetest.register_craftitem(":cooked_rat", {
- description = "Cooked rat",
- inventory_image = "cooked_rat.png",
- on_use = minetest.item_eat(6),
-})
-
-minetest.register_craftitem(":firefly", {
- description = "Firefly",
- inventory_image = "firefly.png",
- on_drop = function(item, dropper, pos)
- item:take_item()
- return item
- end,
- on_place = function(item, dropped, pointed)
- pos = minetest.get_pointed_thing_position(pointed, true)
- if pos ~= nil then
- item:take_item()
- return item
- end
- end
-})
-
-minetest.register_craft({
- type = "cooking",
- output = "cooked_rat",
- recipe = "rat",
-})
-
-minetest.register_craft({
- type = "cooking",
- output = "scorched_stuff",
- recipe = "cooked_rat",
-})
-
--- END
diff --git a/games/minimal/mods/legacy/mod.conf b/games/minimal/mods/legacy/mod.conf
deleted file mode 100644
index 12102e1ee..000000000
--- a/games/minimal/mods/legacy/mod.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-name = legacy
-description = Aliases allowing support for 0.3.x worlds
-depends = default
diff --git a/games/minimal/mods/legacy/textures/apple_iron.png b/games/minimal/mods/legacy/textures/apple_iron.png
deleted file mode 100644
index db5945856..000000000
--- a/games/minimal/mods/legacy/textures/apple_iron.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/legacy/textures/cooked_rat.png b/games/minimal/mods/legacy/textures/cooked_rat.png
deleted file mode 100644
index 776dc4ee0..000000000
--- a/games/minimal/mods/legacy/textures/cooked_rat.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/legacy/textures/dungeon_master.png b/games/minimal/mods/legacy/textures/dungeon_master.png
deleted file mode 100644
index d52d8ccd7..000000000
--- a/games/minimal/mods/legacy/textures/dungeon_master.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/legacy/textures/fireball.png b/games/minimal/mods/legacy/textures/fireball.png
deleted file mode 100644
index 124469ce4..000000000
--- a/games/minimal/mods/legacy/textures/fireball.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/legacy/textures/firefly.png b/games/minimal/mods/legacy/textures/firefly.png
deleted file mode 100644
index ea95a6a84..000000000
--- a/games/minimal/mods/legacy/textures/firefly.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/legacy/textures/oerkki1.png b/games/minimal/mods/legacy/textures/oerkki1.png
deleted file mode 100644
index 061709c80..000000000
--- a/games/minimal/mods/legacy/textures/oerkki1.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/legacy/textures/oerkki1_damaged.png b/games/minimal/mods/legacy/textures/oerkki1_damaged.png
deleted file mode 100644
index b2a30337e..000000000
--- a/games/minimal/mods/legacy/textures/oerkki1_damaged.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/legacy/textures/rat.png b/games/minimal/mods/legacy/textures/rat.png
deleted file mode 100644
index 04cf9b865..000000000
--- a/games/minimal/mods/legacy/textures/rat.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/test/crafting.lua b/games/minimal/mods/test/crafting.lua
deleted file mode 100644
index 8964bd25a..000000000
--- a/games/minimal/mods/test/crafting.lua
+++ /dev/null
@@ -1,71 +0,0 @@
-local function test_clear_craft()
- minetest.log("info", "Testing clear_craft")
- -- Clearing by output
- minetest.register_craft({
- output = "foo",
- recipe = {{"bar"}}
- })
- minetest.register_craft({
- output = "foo 4",
- recipe = {{"foo", "bar"}}
- })
- assert(#minetest.get_all_craft_recipes("foo") == 2)
- minetest.clear_craft({output="foo"})
- assert(minetest.get_all_craft_recipes("foo") == nil)
- -- Clearing by input
- minetest.register_craft({
- output = "foo 4",
- recipe = {{"foo", "bar"}}
- })
- assert(#minetest.get_all_craft_recipes("foo") == 1)
- minetest.clear_craft({recipe={{"foo", "bar"}}})
- assert(minetest.get_all_craft_recipes("foo") == nil)
-end
-test_clear_craft()
-
-local function test_get_craft_result()
- minetest.log("info", "test_get_craft_result()")
- -- normal
- local input = {
- method = "normal",
- width = 2,
- items = {"", "default:coal_lump", "", "default:stick"}
- }
- minetest.log("info", "torch crafting input: "..dump(input))
- local output, decremented_input = minetest.get_craft_result(input)
- minetest.log("info", "torch crafting output: "..dump(output))
- minetest.log("info", "torch crafting decremented input: "..dump(decremented_input))
- assert(output.item)
- minetest.log("info", "torch crafting output.item:to_table(): "..dump(output.item:to_table()))
- assert(output.item:get_name() == "default:torch")
- assert(output.item:get_count() == 4)
- -- fuel
- local input = {
- method = "fuel",
- width = 1,
- items = {"default:coal_lump"}
- }
- minetest.log("info", "coal fuel input: "..dump(input))
- local output, decremented_input = minetest.get_craft_result(input)
- minetest.log("info", "coal fuel output: "..dump(output))
- minetest.log("info", "coal fuel decremented input: "..dump(decremented_input))
- assert(output.time)
- assert(output.time > 0)
- -- cook
- local input = {
- method = "cooking",
- width = 1,
- items = {"default:cobble"}
- }
- minetest.log("info", "cobble cooking input: "..dump(output))
- local output, decremented_input = minetest.get_craft_result(input)
- minetest.log("info", "cobble cooking output: "..dump(output))
- minetest.log("info", "cobble cooking decremented input: "..dump(decremented_input))
- assert(output.time)
- assert(output.time > 0)
- assert(output.item)
- minetest.log("info", "cobble cooking output.item:to_table(): "..dump(output.item:to_table()))
- assert(output.item:get_name() == "default:stone")
- assert(output.item:get_count() == 1)
-end
-test_get_craft_result()
diff --git a/games/minimal/mods/test/formspec.lua b/games/minimal/mods/test/formspec.lua
deleted file mode 100644
index d2123b4af..000000000
--- a/games/minimal/mods/test/formspec.lua
+++ /dev/null
@@ -1,229 +0,0 @@
-local color = minetest.colorize
-
-local clip_fs = [[
- style_type[label,button,image_button,item_image_button,
- tabheader,scrollbar,table,animated_image
- ,field,textarea,checkbox,dropdown;noclip=%c]
-
- label[0,0;A clipping test]
- button[0,1;3,0.8;x;A clipping test]
- image_button[0,2;3,0.8;bubble.png;x2;A clipping test]
- item_image_button[0,3;3,0.8;default:sword_steel;x3;A clipping test]
- tabheader[0,4.7;3,0.63;x4;Clip,Test,Text,Tabs;1;false;false]
- field[0,5;3,0.8;x5;Title;]
- textarea[0,6;3,1;x6;Title;]
- checkbox[0,7.5;x7;This is a test;true]
- dropdown[0,8;3,0.8;x8;Select An Item,One,Two,Three,Four,Five;1]
- scrollbar[0,9;3,0.8;horizontal;x9;3]
- tablecolumns[text;text]
- table[0,10;3,1;x10;one,two,three,four;1]
- animated_image[-0.5,11;4.5,1;;test_animation.png;4;100]
-]]
-
-
-local style_fs = [[
- style[one_btn1;bgcolor=red;textcolor=yellow;bgcolor_hovered=orange;
- bgcolor_pressed=purple]
- button[0,0;2.5,0.8;one_btn1;Button]
-
- style[one_btn2;border=false;textcolor=cyan] ]]..
- "button[0,1.05;2.5,0.8;one_btn2;Text " .. color("#FF0", "Yellow") .. [[]
-
- style[one_btn3;bgimg=bubble.png;bgimg_hovered=default_apple.png;
- bgimg_pressed=heart.png]
- button[0,2.1;1,1;one_btn3;Bor]
-
- style[one_btn4;bgimg=bubble.png;bgimg_hovered=default_apple.png;
- bgimg_pressed=heart.png;border=false]
- button[1.25,2.1;1,1;one_btn4;Bub]
-
- style[one_btn5;bgimg=bubble.png;bgimg_hovered=default_apple.png;
- bgimg_pressed=heart.png;border=false;alpha=false]
- button[0,3.35;1,1;one_btn5;Alph]
-
- style[one_btn6;border=true]
- image_button[0,4.6;1,1;bubble.png;one_btn6;Border]
-
- style[one_btn7;border=false]
- image_button[1.25,4.6;1,1;bubble.png;one_btn7;NoBor]
-
- style[one_btn8;border=false]
- image_button[0,5.85;1,1;bubble.png;one_btn8;Border;false;true;heart.png]
-
- style[one_btn9;border=true]
- image_button[1.25,5.85;1,1;bubble.png;one_btn9;NoBor;false;false;heart.png]
-
- style[one_btn10;alpha=false]
- image_button[0,7.1;1,1;bubble.png;one_btn10;NoAlpha]
-
- style[one_btn11;alpha=true]
- image_button[1.25,7.1;1,1;bubble.png;one_btn11;Alpha]
-
- style[one_btn12;border=true]
- item_image_button[0,8.35;1,1;default:sword_steel;one_btn12;Border]
-
- style[one_btn13;border=false]
- item_image_button[1.25,8.35;1,1;default:sword_steel;one_btn13;NoBor]
-
- style[one_btn14;border=false;bgimg=test_bg.png;bgimg_hovered=test_bg_hovered.png;bgimg_pressed=test_bg_pressed.png;fgimg=bubble.png;fgimg_hovered=default_apple.png;fgimg_pressed=heart.png]
- image_button[0,9.6;1,1;bubble.png;one_btn14;Bg]
-
- style[one_btn15;border=false;bgimg=test_bg.png;bgimg_hovered=test_bg_hovered.png;bgimg_pressed=test_bg_pressed.png]
- item_image_button[1.25,9.6;1,1;default:sword_steel;one_btn15;Bg]
-
- style[one_btn16;border=false;bgimg=test_bg_9slice.png;bgimg_hovered=test_bg_9slice_hovered.png;bgimg_pressed=test_bg_9slice_pressed.png;bgimg_middle=4,6]
- button[2.5,9.6;2,1;one_btn16;9-Slice Bg]
-
-
-
- container[2.75,0]
-
- style[one_tb1;textcolor=Yellow]
- tabheader[0,3;2.5,0.63;one_tb1;Yellow,Text,Tabs;1;false;false]
-
- style[one_f1;textcolor=yellow]
- field[0,4.25;2.5,0.8;one_f1;Field One;Yellow Text]
-
- style[one_f2;border=false;textcolor=cyan]
- field[0,5.75;2.5,0.8;one_f2;Field Two;Borderless Cyan Text]
-
- style[one_f3;textcolor=yellow]
- textarea[0,7.025;2.5,0.8;one_f3;Label;]] ..
- minetest.formspec_escape("Yellow Text\nLine two") .. [[ ]
-
- style[one_f4;border=false;textcolor=cyan]
- textarea[0,8.324999999999999;2.5,0.8;one_f4;Label;]] ..
- minetest.formspec_escape("Borderless Cyan Text\nLine two") .. [[ ]
-
- container_end[]
-]]
-
---style_type[label;textcolor=green]
---label[0,0;Green]
---style_type[label;textcolor=blue]
---label[0,1;Blue]
---style_type[label;textcolor=;border=true]
---label[1.2,0;Border]
---style_type[label;border=true;bgcolor=red]
---label[1.2,1;Background]
---style_type[label;border=;bgcolor=]
---label[0.75,2;Reset]
-
-
-local pages = {
- [[
- formspec_version[3]
- size[12,12]
- image_button[0,0;1,1;logo.png;;1x1]
- image_button[1,0;2,2;logo.png;;2x2]
- button[0,2;1,1;;1x1]
- button[1,2;2,2;;2x2]
- item_image[0,4;1,1;air]
- item_image[1,4;2,2;air]
- item_image_button[0,6;1,1;test:node;;1x1]
- item_image_button[1,6;2,2;test:node;;2x2]
- field[3,.5;3,.5;name;Field;text]
- pwdfield[6,.5;3,1;name;Password Field]
- field[3,1;3,1;;Read-Only Field;text]
- textarea[3,2;3,.5;name;Textarea;text]
- textarea[6,2;3,2;name;Textarea;text\nmore text]
- textarea[3,3;3,1;;Read-Only Textarea;text\nmore text]
- textlist[3,4;3,2;name;Textlist,Perfect Coordinates;1;false]
- tableoptions[highlight=#ABCDEF75;background=#00000055;border=false]
- table[6,4;3,2;name;Table,Cool Stuff,Foo,Bar;2]
- dropdown[3,6;3,1;name;This,is,a,dropdown;1]
- dropdown[6,6;3,2;name;I,am,a,bigger,dropdown;5]
- image[0,8;3,2;ignore.png]
- box[3,7;3,1;#00A3FF]
- checkbox[3,8;name;Check me!;false]
- checkbox[3,9;name;Uncheck me now!;true]
- scrollbar[0,11.5;11.5,.5;horizontal;name;500]
- scrollbar[11.5,0;.5,11.5;vertical;name;0]
- list[current_player;main;6,8;3,2;1]
- button[9,0;2.5,1;name;]
- button[9,1;2.5,1;name;]
- button[9,2;2.5,1;name;] ]]..
- "label[9,0.5;This is a label.\nLine\nLine\nLine\nEnd]"..
- [[button[9,3;1,1;name;]
- vertlabel[9,4;VERT]
- label[10,3;HORIZ]
- tabheader[6.5,0;6,0.65;name;Tab 1,Tab 2,Tab 3,Secrets;1;false;false]
- ]],
-
- "formspec_version[3]size[12,12]" ..
- ("label[0.375,0.375;Styled - %s %s]"):format(
- color("#F00", "red text"),
- color("#77FF00CC", "green text")) ..
- "label[6.375,0.375;Unstyled]" ..
- "box[0,0.75;12,0.1;#999]" ..
- "box[6,0.85;0.1,11.15;#999]" ..
- "container[0.375,1.225]" ..
- style_fs ..
- "container_end[]container[6.375,1.225]" ..
- style_fs:gsub("one_", "two_"):gsub("style%[[^%]]+%]", ""):gsub("style_type%[[^%]]+%]", "") ..
- "container_end[]",
-
- "formspec_version[3]size[12,13]" ..
- "label[0.1,0.5;Clip]" ..
- "container[-2.5,1]" .. clip_fs:gsub("%%c", "false") .. "container_end[]" ..
- "label[11,0.5;Noclip]" ..
- "container[11.5,1]" .. clip_fs:gsub("%%c", "true") .. "container_end[]",
-
- [[
- formspec_version[3]
- size[12,12]
- animated_image[0.5,0.5;1,1;;test_animation.png;4;100]
- animated_image[0.5,1.75;1,1;;test_animation.jpg;4;100]
- animated_image[1.75,0.5;1,1;;test_animation.png;100;100]
- animated_image[3,0.5;1,1;ani_img_1;test_animation.png;4;1000]
- button[4.25,0.5;1,1;ani_btn_1;Current
-Number]
- animated_image[3,1.75;1,1;ani_img_2;test_animation.png;4;1000;2]
- button[4.25,1.75;1,1;ani_btn_2;Current
-Number]
- animated_image[3,3;1,1;;test_animation.png;4;0]
- animated_image[3,4.25;1,1;;test_animation.png;4;0;3]
- animated_image[5.5,0.5;5,2;;test_animation.png;4;100]
- animated_image[5.5,2.75;5,2;;test_animation.jpg;4;100]
- ]]
-}
-
-local function show_test_formspec(pname, page_id)
- page_id = page_id or 2
-
- local fs = pages[page_id] .. "tabheader[0,0;6,0.65;maintabs;Real Coord,Styles,Noclip,MiscEle;" .. page_id .. ";false;false]"
-
- minetest.show_formspec(pname, "test:formspec", fs)
-end
-
-minetest.register_on_player_receive_fields(function(player, formname, fields)
- if formname ~= "test:formspec" then
- return false
- end
-
- if fields.maintabs then
- show_test_formspec(player:get_player_name(), tonumber(fields.maintabs))
- return true
- end
-
- if fields.ani_img_1 and fields.ani_btn_1 then
- minetest.chat_send_all(fields.ani_img_1)
- elseif fields.ani_img_2 and fields.ani_btn_2 then
- minetest.chat_send_all(fields.ani_img_2)
- end
-end)
-
-minetest.register_node("test:node", {
- tiles = { "air.png" }
-})
-
-minetest.register_chatcommand("formspec", {
- func = function(name)
- if not minetest.get_player_by_name(name) then
- return false, "You need to be online!"
- end
-
- show_test_formspec(name)
- return true, "Opened formspec"
- end,
-})
diff --git a/games/minimal/mods/test/init.lua b/games/minimal/mods/test/init.lua
deleted file mode 100644
index 4e2a51086..000000000
--- a/games/minimal/mods/test/init.lua
+++ /dev/null
@@ -1,15 +0,0 @@
---
--- Minimal Development Test
--- Mod: test
---
-
-
--- Try out PseudoRandom
-pseudo = PseudoRandom(13)
-assert(pseudo:next() == 22290)
-assert(pseudo:next() == 13854)
-
-local modpath = minetest.get_modpath("test")
-dofile(modpath .. "/player.lua")
-dofile(modpath .. "/formspec.lua")
-dofile(modpath .. "/crafting.lua")
diff --git a/games/minimal/mods/test/mod.conf b/games/minimal/mods/test/mod.conf
deleted file mode 100644
index ae6387e09..000000000
--- a/games/minimal/mods/test/mod.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-name = test
-description = Adds unit tests for the engine
-optional_depends = default
diff --git a/games/minimal/mods/test/textures/test_animation.png b/games/minimal/mods/test/textures/test_animation.png
deleted file mode 100644
index 1752362ff..000000000
--- a/games/minimal/mods/test/textures/test_animation.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/test/textures/test_bg.png b/games/minimal/mods/test/textures/test_bg.png
deleted file mode 100644
index f0f392926..000000000
--- a/games/minimal/mods/test/textures/test_bg.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/test/textures/test_bg_9slice.png b/games/minimal/mods/test/textures/test_bg_9slice.png
deleted file mode 100644
index f9fe6870b..000000000
--- a/games/minimal/mods/test/textures/test_bg_9slice.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/test/textures/test_bg_9slice_hovered.png b/games/minimal/mods/test/textures/test_bg_9slice_hovered.png
deleted file mode 100644
index e614a5eee..000000000
--- a/games/minimal/mods/test/textures/test_bg_9slice_hovered.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/test/textures/test_bg_9slice_pressed.png b/games/minimal/mods/test/textures/test_bg_9slice_pressed.png
deleted file mode 100644
index 125c774fb..000000000
--- a/games/minimal/mods/test/textures/test_bg_9slice_pressed.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/test/textures/test_bg_hovered.png b/games/minimal/mods/test/textures/test_bg_hovered.png
deleted file mode 100644
index b9ce8fd31..000000000
--- a/games/minimal/mods/test/textures/test_bg_hovered.png
+++ /dev/null
Binary files differ
diff --git a/games/minimal/mods/test/textures/test_bg_pressed.png b/games/minimal/mods/test/textures/test_bg_pressed.png
deleted file mode 100644
index 76aafb8c1..000000000
--- a/games/minimal/mods/test/textures/test_bg_pressed.png
+++ /dev/null
Binary files differ
diff --git a/minetest.conf.example b/minetest.conf.example
index 5bc41a9a4..520125713 100644
--- a/minetest.conf.example
+++ b/minetest.conf.example
@@ -254,7 +254,7 @@
# Key for toggling display of minimap.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
# type: key
-# keymap_minimap = KEY_F9
+# keymap_minimap = KEY_KEY_V
# Key for taking screenshots.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
@@ -469,7 +469,7 @@
# Key for switching between first- and third-person camera.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
# type: key
-# keymap_camera_mode = KEY_F7
+# keymap_camera_mode = KEY_KEY_C
# Key for increasing the viewing range.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
@@ -636,10 +636,6 @@
# type: int min: 0 max: 1
# parallax_occlusion_mode = 1
-# Strength of parallax.
-# type: float
-# 3d_paralax_strength = 0.025
-
# Number of parallax occlusion iterations.
# type: int
# parallax_occlusion_iterations = 4
@@ -823,6 +819,10 @@
# type: enum values: none, anaglyph, interlaced, topbottom, sidebyside, crossview, pageflip
# 3d_mode = none
+# Strength of 3D mode parallax.
+# type: float
+# 3d_paralax_strength = 0.025
+
# In-game chat console height, between 0.1 (10%) and 1.0 (100%).
# type: float min: 0.1 max: 1
# console_height = 0.6
@@ -955,8 +955,9 @@
# autoscale_mode = disable
# Show entity selection boxes
+# A restart is required after changing this.
# type: bool
-# show_entity_selectionbox = true
+# show_entity_selectionbox = false
## Menus
@@ -1071,9 +1072,15 @@
# type: filepath
# fallback_font_path = fonts/DroidSansFallbackFull.ttf
-# Path to save screenshots at.
+# Font size of the recent chat text and chat prompt in point (pt).
+# Value 0 will use the default font size.
+# type: int
+# chat_font_size = 0
+
+# Path to save screenshots at. Can be an absolute or relative path.
+# The folder will be created if it doesn't already exist.
# type: path
-# screenshot_path =
+# screenshot_path = screenshots
# Format of screenshots.
# type: enum values: png, jpg, bmp, pcx, ppm, tga
@@ -1136,6 +1143,13 @@
# type: int min: 1 max: 65535
# remote_port = 30000
+# Prometheus listener address.
+# If minetest is compiled with ENABLE_PROMETHEUS option enabled,
+# enable metrics listener for Prometheus on that address.
+# Metrics can be fetch on http://127.0.0.1:30000/metrics
+# type: string
+# prometheus_listener_address = 127.0.0.1:30000
+
# Save the map received by the client on disk.
# type: bool
# enable_local_map_saving = false
@@ -1292,6 +1306,11 @@
# type: int
# item_entity_ttl = 900
+# Specifies the default stack size of nodes, items and tools.
+# Note that mods or games may explicitly set a stack for certain (or all) items.
+# type: int
+# default_stack_max = 99
+
# Enable players getting damage and dying.
# type: bool
# enable_damage = false
@@ -1371,7 +1390,7 @@
# ask_reconnect_on_crash = false
# From how far clients know about objects, stated in mapblocks (16 nodes).
-#
+#
# Setting this larger than active_block_range will also cause the server
# to maintain active objects up to this distance in the direction the
# player is looking. (This can avoid mobs suddenly disappearing from view)
@@ -1382,7 +1401,7 @@
# active block stuff, stated in mapblocks (16 nodes).
# In active blocks objects are loaded and ABMs run.
# This is also the minimum range in which active objects (mobs) are maintained.
-# This should be configured together with active_object_range.
+# This should be configured together with active_object_send_range_blocks.
# type: int
# active_block_range = 3
@@ -1662,7 +1681,7 @@
# Set the language. Leave empty to use the system language.
# A restart is required after changing this.
-# type: enum values: , ar, ca, cs, da, de, dv, el, eo, es, et, eu, fil, fr, hu, id, it, ja, ja_KS, jbo, kk, kn, lo, lt, ms, my, nb, nl, nn, pl, pt, pt_BR, ro, ru, sl, sr_Cyrl, sv, sw, th, tr, uk, vi
+# type: enum values: , ar, ca, cs, da, de, dv, el, en, eo, es, et, eu, fil, fr, hu, id, it, ja, ja_KS, jbo, kk, kn, lo, lt, ms, my, nb, nl, nn, pl, pt, pt_BR, ro, ru, sl, sr_Cyrl, sv, sw, th, tr, uk, vi
# language =
# Level of logging to be written to debug.txt:
@@ -1683,6 +1702,10 @@
# type: int
# debug_log_size_max = 50
+# Minimal level of logging to be written to chat.
+# type: enum values: , none, error, warning, action, info, verbose
+# chat_log_level = error
+
# Enable IPv6 support (for both client and server).
# Required for IPv6 connections to work at all.
# type: bool
@@ -1920,7 +1943,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -1933,7 +1956,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise defining giant caverns.
@@ -1946,7 +1969,7 @@
# octaves = 5,
# persistence = 0.63,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise defining terrain.
@@ -1972,7 +1995,7 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
## Mapgen V6
@@ -2149,7 +2172,9 @@
## Mapgen V7
# Map generation attributes specific to Mapgen v7.
-# 'ridges' enables the rivers.
+# 'ridges': Rivers.
+# 'floatlands': Floating land masses in the atmosphere.
+# 'caverns': Giant caves deep underground.
# type: flags possible values: mountains, ridges, floatlands, caverns, nomountains, noridges, nofloatlands, nocaverns
# mgv7_spflags = mountains,ridges,nofloatlands,caverns
@@ -2157,6 +2182,51 @@
# type: int
# mgv7_mount_zero_level = 0
+# Lower Y limit of floatlands.
+# type: int
+# mgv7_floatland_ymin = 1024
+
+# Upper Y limit of floatlands.
+# type: int
+# mgv7_floatland_ymax = 4096
+
+# Y-distance over which floatlands taper from full density to nothing.
+# Tapering starts at this distance from the Y limit.
+# For a solid floatland layer, this controls the height of hills/mountains.
+# Must be less than or equal to half the distance between the Y limits.
+# type: int
+# mgv7_floatland_taper = 256
+
+# Exponent of the floatland tapering. Alters the tapering behaviour.
+# Value = 1.0 creates a uniform, linear tapering.
+# Values > 1.0 create a smooth tapering suitable for the default separated
+# floatlands.
+# Values < 1.0 (for example 0.25) create a more defined surface level with
+# flatter lowlands, suitable for a solid floatland layer.
+# type: float
+# mgv7_float_taper_exp = 2.0
+
+# Adjusts the density of the floatland layer.
+# Increase value to increase density. Can be positive or negative.
+# Value = 0.0: 50% of volume is floatland.
+# Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test
+# to be sure) creates a solid floatland layer.
+# type: float
+# mgv7_floatland_density = -0.6
+
+# Surface level of optional water placed on a solid floatland layer.
+# Water is disabled by default and will only be placed if this value is set
+# to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the
+# upper tapering).
+# ***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:
+# When enabling water placement the floatlands must be configured and tested
+# to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other
+# required value depending on 'mgv7_np_floatland'), to avoid
+# server-intensive extreme water flow and to avoid vast flooding of the
+# world surface below.
+# type: int
+# mgv7_floatland_ywater = -31000
+
# Controls width of tunnels, a smaller value creates wider tunnels.
# Value >= 10.0 completely disables generation of tunnels and avoids the
# intensive noise calculations.
@@ -2312,7 +2382,7 @@
# octaves = 5,
# persistence = 0.63,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise defining structure of river canyon walls.
@@ -2325,7 +2395,23 @@
# octaves = 4,
# persistence = 0.75,
# lacunarity = 2.0,
-# flags =
+# flags =
+# }
+
+# 3D noise defining structure of floatlands.
+# If altered from the default, the noise 'scale' (0.7 by default) may need
+# to be adjusted, as floatland tapering functions best when this noise has
+# a value range of approximately -2.0 to 2.0.
+# type: noise_params_3d
+# mgv7_np_floatland = {
+# offset = 0,
+# scale = 0.7,
+# spread = (384, 96, 384),
+# seed = 1009,
+# octaves = 4,
+# persistence = 0.75,
+# lacunarity = 1.618,
+# flags =
# }
# 3D noise defining giant caverns.
@@ -2338,7 +2424,7 @@
# octaves = 5,
# persistence = 0.63,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# First of two 3D noises that together define tunnels.
@@ -2351,7 +2437,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -2364,7 +2450,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise that determines number of dungeons per mapchunk.
@@ -2377,7 +2463,7 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
## Mapgen Carpathian
@@ -2620,7 +2706,7 @@
# octaves = 5,
# persistence = 0.55,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# First of two 3D noises that together define tunnels.
@@ -2633,7 +2719,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -2646,7 +2732,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise defining giant caverns.
@@ -2659,7 +2745,7 @@
# octaves = 5,
# persistence = 0.63,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise that determines number of dungeons per mapchunk.
@@ -2672,7 +2758,7 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
## Mapgen Flat
@@ -2782,7 +2868,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -2795,7 +2881,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise that determines number of dungeons per mapchunk.
@@ -2808,7 +2894,7 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
## Mapgen Fractal
@@ -2982,7 +3068,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -2995,7 +3081,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# 3D noise that determines number of dungeons per mapchunk.
@@ -3008,7 +3094,7 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
## Mapgen Valleys
@@ -3098,7 +3184,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Second of two 3D noises that together define tunnels.
@@ -3111,7 +3197,7 @@
# octaves = 3,
# persistence = 0.5,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# The depth of dirt or other biome filler node.
@@ -3137,7 +3223,7 @@
# octaves = 6,
# persistence = 0.63,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Defines large-scale river channel structure.
@@ -3189,7 +3275,7 @@
# octaves = 6,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
# Amplifies the valleys.
@@ -3228,7 +3314,7 @@
# octaves = 2,
# persistence = 0.8,
# lacunarity = 2.0,
-# flags =
+# flags =
# }
## Advanced
@@ -3251,19 +3337,16 @@
# emergequeue_limit_total = 512
# Maximum number of blocks to be queued that are to be loaded from file.
-# Set to blank for an appropriate amount to be chosen automatically.
+# This limit is enforced per player.
# type: int
# emergequeue_limit_diskonly = 64
# Maximum number of blocks to be queued that are to be generated.
-# Set to blank for an appropriate amount to be chosen automatically.
+# This limit is enforced per player.
# type: int
# emergequeue_limit_generate = 64
# Number of emerge threads to use.
-# WARNING: Currently there are multiple bugs that may cause crashes when
-# 'num_emerge_threads' is larger than 1. Until this warning is removed it is
-# strongly recommended this value is set to the default '1'.
# Value 0:
# - Automatic selection. The number of emerge threads will be
# - 'number of processors - 2', with a lower limit of 1.
diff --git a/misc/net.minetest.minetest.appdata.xml b/misc/net.minetest.minetest.appdata.xml
index f41762564..c177c3713 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="2019-10-12" version="5.1.0"/>
+ <release date="2020-07-09" version="5.3.0"/>
</releases>
</component>
diff --git a/misc/net.minetest.minetest.desktop b/misc/net.minetest.minetest.desktop
index ca493c44e..a94dbab1b 100644
--- a/misc/net.minetest.minetest.desktop
+++ b/misc/net.minetest.minetest.desktop
@@ -11,6 +11,7 @@ Comment[tr]=Tek-Çok oyuncuyla küplerden sonsuz dünyalar inşa et
Exec=minetest
Icon=minetest
Terminal=false
+PrefersNonDefaultGPU=true
Type=Application
Categories=Game;Simulation;
StartupNotify=false
diff --git a/misc/winresource.rc b/misc/winresource.rc
index e1e82581b..ffb493873 100644
--- a/misc/winresource.rc
+++ b/misc/winresource.rc
@@ -1,6 +1,8 @@
#include <windows.h>
+#include <winuser.h>
#include <commctrl.h>
#include <richedit.h>
+
#ifndef USE_CMAKE_CONFIG_H
#define USE_CMAKE_CONFIG_H
#endif
@@ -13,6 +15,10 @@
#define BUILDMODE "RUN_IN_PLACE=0"
#endif
+#ifdef __MINGW32__
+CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "minetest.exe.manifest"
+#endif
+
LANGUAGE 0, SUBLANG_NEUTRAL
130 ICON "minetest-icon.ico"
diff --git a/po/ar/minetest.po b/po/ar/minetest.po
index 6f6b7051f..9bda5109d 100644
--- a/po/ar/minetest.po
+++ b/po/ar/minetest.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2020-01-11 18:26+0000\n"
-"Last-Translator: rubenwardy <rubenwardy@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-27 20:41+0000\n"
+"Last-Translator: abidin toumi <abidin24@disroot.org>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/minetest/minetest/"
"ar/>\n"
"Language: ar\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 3.10.1\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -28,9 +28,13 @@ msgstr "Ø£Ø¹ÙØ¯ الإحياء"
msgid "You died"
msgstr "Ù…ÙØª"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "مواÙÙ‚"
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
-msgstr ""
+msgstr "حدث خطأ ÙÙŠ برنامج Lua النصي:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -41,10 +45,6 @@ msgid "Main menu"
msgstr "القائمة الرئيسية"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "مواÙÙ‚"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "أعد الإتصال"
@@ -100,7 +100,7 @@ msgstr "عطÙÙ„ الكل"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr ""
+msgstr "عطل حزمة التعديلات"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -108,17 +108,23 @@ msgstr "ÙØ¹ÙÙ„ الكل"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr ""
+msgstr "مكن حزمة التعديلات"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
+"ÙØ´Ù„ تمكين التعديل \"$1\" لإحتوائه على محار٠غير مسموحة. المحار٠المسموحة هي "
+"[a-z0-9_] Ùقط."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "جد المزيد من التعديلات"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
-msgstr ""
+msgstr "التعديل:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
@@ -134,7 +140,7 @@ msgstr "بدون إعتماديات لازمة"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr ""
+msgstr "وص٠حزمة التعديلات غير Ù…ØªÙˆÙØ±."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
@@ -162,16 +168,16 @@ msgid "All packages"
msgstr "كل الحزم"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Ø¹ÙØ¯"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Ø¹ÙØ¯ للقائمة الرئيسة"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "تنزيل وتثبيت $1, يرجى الإنتظار..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "يحمل..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -189,7 +195,7 @@ msgstr "ثبت"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr ""
+msgstr "التعديلات"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
@@ -216,15 +222,51 @@ msgstr "أزل"
msgid "Update"
msgstr "Ø­Ø¯ÙØ«"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "إعرض"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "إسم العالم \"$1\" موجود مسبقاً"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "أنشئ"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "نزّÙÙ„ لعبة,مثل لعبة Minetest, من minetest.net"
@@ -232,28 +274,148 @@ msgstr "نزّÙÙ„ لعبة,مثل لعبة Minetest, من minetest.net"
msgid "Download one from minetest.net"
msgstr "نزÙّل لعبة من minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "أرض مسطحة"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floating landmasses in the sky"
+msgstr "أرض عائمة ÙÙŠ السماء"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "أراضيٌ عائمة (تجريبية)"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "اللعبة"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "التلال"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "بحيرات"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "قلة الرطوبة ÙˆØ§Ø±ØªÙØ§Ø¹Ù‡ الحرارة تسبب Ø¬ÙØ§Ù او ضحالة الانهار"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Ù…ÙˆÙ„ÙØ¯ الخريطة"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "جبال"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "شبكة Ø£Ù†ÙØ§Ù‚ وكهوÙ"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "لم تحدد لعبة"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "ÙŠØ®ÙØ¶ الحرارة مع ازدياد Ø§Ù„Ø¥Ø±ØªÙØ§Ø¹"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "ÙŠØ®ÙØ¶ الرطوبة مع ازدياد Ø§Ù„Ø¥Ø±ØªÙØ§Ø¹"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "أنهار"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "أنهار بمستوى البحر"
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "معتدل، صحراء"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "معتدل، صحراء، غابة"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "أعشاب الغابة والشجر"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "تمايز عمق النهر"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "كهو٠كبيرة ÙÙŠ أعماق الأرض"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr "تحذير: إختبار التطور موجه للمطورين."
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "إسم العالم"
@@ -289,21 +451,22 @@ msgstr "أقبل"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr ""
+msgstr "أعد تسمية حزمة التعديلات:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
+"اسم حزمة التعديلات هذه مصرح ÙÙŠ modpack.conf لذا أي تسمية سيتم استبدالها."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr ""
+msgstr "(الإعداد بدون وصÙ)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr ""
+msgstr "ضوضاء 2D"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -335,7 +498,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr ""
+msgstr "Ø§Ù„Ù…ÙØ¹Ø§Ø¯Ù„"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Persistance"
@@ -355,7 +518,7 @@ msgstr "Ø¥Ø³ØªØ¹ÙØ¯ Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
-msgstr ""
+msgstr "تكبير/تصغير"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
@@ -401,14 +564,25 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr "Ø¥ÙØªØ±Ø§Ø¶ÙŠ"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -419,19 +593,19 @@ msgstr "$1 (Ù…ÙØ¹Ù„)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr ""
+msgstr "$1 تعديلات"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr ""
+msgstr "ÙØ´Ù„ تثبيت $1 ÙÙŠ $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr ""
+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"
@@ -455,7 +629,7 @@ 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"
@@ -463,31 +637,31 @@ msgstr ""
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "ØªØµÙØ­ المحتوى عبر الانترنت"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr ""
+msgstr "المحتوى"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr ""
+msgstr "عطل حزمة الإكساء"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr ""
+msgstr "معلومات:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr ""
+msgstr "الحومة المثبتت:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr ""
+msgstr "بدون اعتماديات."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr ""
+msgstr "Ù„Ø§ÙŠØªÙˆÙØ± وص٠للحزمة"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
@@ -495,31 +669,31 @@ msgstr ""
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr ""
+msgstr "أزل الحزمة"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-msgstr ""
+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 ""
+msgstr "إشادات"
#: 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"
@@ -531,95 +705,103 @@ msgstr ""
#: builtin/mainmenu/tab_local.lua
msgid "Configure"
-msgstr ""
+msgstr "اضبط"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
msgid "Creative Mode"
-msgstr ""
+msgstr "النمط الإبداعي"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
msgid "Enable Damage"
-msgstr ""
+msgstr "مكن الضرر"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr ""
+msgstr "استض٠لعبة"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr ""
+msgstr "استض٠خدوم"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "ثبت العابا من ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
-msgstr ""
+msgstr "الاسم\\كلمة المرور"
#: builtin/mainmenu/tab_local.lua
msgid "New"
-msgstr ""
+msgstr "جديد"
#: builtin/mainmenu/tab_local.lua
msgid "No world created or selected!"
-msgstr ""
+msgstr "لم تنشئ او تحدد عالما!"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
-msgstr ""
+msgstr "إلعب"
#: builtin/mainmenu/tab_local.lua
msgid "Port"
-msgstr ""
+msgstr "Ø§Ù„Ù…Ù†ÙØ°"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
-msgstr ""
+msgstr "حدد العالم:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr ""
+msgstr "Ù…Ù†ÙØ° الخدوم"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
-msgstr ""
+msgstr "ابدأ اللعبة"
#: builtin/mainmenu/tab_online.lua
msgid "Address / Port"
-msgstr ""
+msgstr "العنوان \\ Ø§Ù„Ù…Ù†ÙØ°"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
-msgstr ""
+msgstr "اتصل"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
msgid "Creative mode"
-msgstr ""
+msgstr "النمط الإبداعي"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr ""
+msgstr "الضرر ممكن"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Del. Favorite"
-msgstr ""
+msgstr "Ø­Ø°Ù Ø§Ù„Ù…ÙØ¶Ù„Ø©"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Favorite"
-msgstr ""
+msgstr "Ø§Ù„Ù…ÙØ¶Ù„Ø©"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
-msgstr ""
+msgstr "انضم للعبة"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Name / Password"
-msgstr ""
+msgstr "الاسم \\ كلمة المرور"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
msgid "PvP enabled"
-msgstr ""
+msgstr "قتال اللاعبين ممكن"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -627,7 +809,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr ""
+msgstr "سحب 3D"
#: builtin/mainmenu/tab_settings.lua
msgid "4x"
@@ -663,11 +845,11 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
-msgstr ""
+msgstr "ØºÙŠÙØ± Ø§Ù„Ù…ÙØ§ØªÙŠØ­"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr ""
+msgstr "زجاج متصل"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -691,7 +873,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr ""
+msgstr "بدون مرشح"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
@@ -699,23 +881,24 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr ""
+msgstr "إبراز العقد"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
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 src/settings_translation_file.cpp
msgid "Parallax Occlusion"
@@ -727,7 +910,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Reset singleplayer world"
-msgstr ""
+msgstr "أعد تعيين عالم اللاعب Ø§Ù„Ù…Ù†ÙØ±Ø¯"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
@@ -739,27 +922,28 @@ msgstr "إعدادات"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr ""
+msgstr "Ù…ÙØ¸Ù„لات"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "مظللات (غير Ù…ØªÙˆÙØ±)"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
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"
@@ -775,31 +959,32 @@ 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 "نباتات متموجة"
#: builtin/mainmenu/tab_settings.lua
msgid "Yes"
-msgstr ""
+msgstr "نعم"
#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
-msgstr ""
+msgstr "اضبط التعديلات"
#: builtin/mainmenu/tab_simple_main.lua
+#, fuzzy
msgid "Main"
-msgstr ""
+msgstr "الرئيسية"
#: builtin/mainmenu/tab_simple_main.lua
msgid "Start Singleplayer"
-msgstr ""
+msgstr "إلعب ÙØ±Ø¯ÙŠØ§"
#: src/client/client.cpp
msgid "Connection timed out."
@@ -807,51 +992,52 @@ 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
+#, fuzzy
msgid "Main Menu"
-msgstr ""
+msgstr "القائمة الرئيسية"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr ""
+msgstr "بدون عالم محدد وعنوان معطى. لاشيء Ù„ÙØ¹Ù„Ù‡."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr "إسم اللاعب طويل."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr ""
+msgstr "يرجى اختيار اسم!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
@@ -861,9 +1047,17 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr ""
+msgstr "yes"
#: src/client/game.cpp
msgid ""
@@ -895,6 +1089,7 @@ msgstr ""
msgid "- Public: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1167,6 +1362,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1198,7 +1401,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1319,6 +1522,7 @@ msgstr ""
msgid "Left Windows"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1411,6 +1615,7 @@ msgstr ""
msgid "Play"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1447,6 +1652,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
@@ -1681,10 +1887,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "ar"
@@ -1768,6 +1979,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1778,6 +1993,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1826,7 +2049,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1871,6 +2094,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1884,10 +2117,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2058,8 +2287,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2137,10 +2366,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2406,6 +2643,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2714,6 +2955,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2823,6 +3074,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2876,6 +3155,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4171,14 +4456,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4242,6 +4519,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4308,7 +4589,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4396,10 +4679,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4467,13 +4746,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4558,6 +4837,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4664,7 +4947,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4716,9 +4999,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4795,10 +5075,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4808,7 +5084,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4842,6 +5120,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4910,6 +5196,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5348,6 +5646,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5370,6 +5675,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5381,15 +5690,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5506,7 +5825,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5659,6 +5978,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -5978,6 +6301,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6008,3 +6339,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL timeout"
msgstr ""
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "تنزيل وتثبيت $1, يرجى الإنتظار..."
+
+#~ msgid "Back"
+#~ msgstr "Ø¹ÙØ¯"
+
+#~ msgid "Ok"
+#~ msgstr "مواÙÙ‚"
diff --git a/po/be/minetest.po b/po/be/minetest.po
index 0cae005f0..ed091587d 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: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: 2019-11-19 23:04+0000\n"
"Last-Translator: Viktar Vauchkevich <victorenator@gmail.com>\n"
"Language-Team: Belarusian <https://hosted.weblate.org/projects/minetest/"
@@ -23,6 +23,10 @@ msgstr "Ðдрадзіцца"
msgid "You died"
msgstr "Вы загінулі"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "ÐдбылаÑÑ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° Ñž Lua-Ñкрыпце:"
@@ -36,10 +40,6 @@ msgid "Main menu"
msgstr "Галоўнае меню"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Добра"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Перазлучыцца"
@@ -116,6 +116,10 @@ msgstr ""
"Ñімвалы. ДапуÑкаюцца толькі [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "МадыфікацыÑ:"
@@ -161,16 +165,17 @@ msgid "All packages"
msgstr "УÑе пакункі"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Ðазад"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Ð’Ñрнуцца Ñž галоўнае меню"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Спампоўванне Ñ– ÑžÑталёўка $1. Калі лаÑка, пачакайце…"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "Загрузка…"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -215,15 +220,57 @@ msgstr "Выдаліць"
msgid "Update"
msgstr "Ðбнавіць"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Свет з назвай \"$1\" ужо Ñ–Ñнуе"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Ð’Ñ‹ÑˆÑ‹Ð½Ñ Ð½Ñ–Ð²Ð°Ð»ÑŒÐ½Ð°Ð³Ð° поÑÑу"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Ð’Ñ‹ÑˆÑ‹Ð½Ñ Ð½Ñ–Ð²Ð°Ð»ÑŒÐ½Ð°Ð³Ð° поÑÑу"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Шум біёму"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Шум біёму"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Шум пÑчор"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Ðктавы"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Стварыць"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "ІтÑрацыі"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Спампоўвайце гульні кшталту «Minetest Game», з minetest.net"
@@ -231,25 +278,153 @@ msgstr "Спампоўвайце гульні кшталту «Minetest Game»,
msgid "Download one from minetest.net"
msgstr "Спампаваць з minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Шум падзÑмеллÑ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floating landmasses in the sky"
+msgstr "ШчыльнаÑць гор лÑтучых аÑтравоў"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "Узровень лÑтучых аÑтравоў"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "ГульнÑ"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "ВідÑадрайвер"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Генератар мапы"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Генератар мапы: параметры"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "ÐдмыÑÐ»Ð¾Ð²Ñ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹ генератара мапы 5"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mountains"
+msgstr "Шум гор"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Ð“ÑƒÐ»ÑŒÐ½Ñ Ð½Ðµ абранаÑ"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Памер Ñ€Ñк"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Зерне"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "Базавы шум Ñ€Ñльефу"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Ð“Ð»Ñ‹Ð±Ñ–Ð½Ñ Ñ€Ñк"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
"Увага: \"The minimal development test\" прызначаны толькі раÑпрацоўшчыкам."
@@ -403,14 +578,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z раÑпаўÑюджваннÑ"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "абÑÐ°Ð»ÑŽÑ‚Ð½Ð°Ñ Ð²ÐµÐ»Ñ–Ñ‡Ñ‹Ð½Ñ"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr "прадвызначаны"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "паÑлаблены"
@@ -555,6 +741,10 @@ msgid "Host Server"
msgstr "Сервер"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "ІмÑ/Пароль"
@@ -622,6 +812,7 @@ msgstr "Ð†Ð¼Ñ / Пароль"
msgid "Ping"
msgstr "Пінг"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP уключаны"
@@ -866,6 +1057,14 @@ msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ пададзены файл пÐ
msgid "Provided world path doesn't exist: "
msgstr "Пададзены шлÑÑ… не Ñ–Ñнуе: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -902,6 +1101,7 @@ msgstr "- Порт: "
msgid "- Public: "
msgstr "- Публічны: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -1200,6 +1400,14 @@ msgid "Sound muted"
msgstr "Гук адключаны"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Гук уключаны"
@@ -1231,7 +1439,7 @@ msgstr "ÐšÐ°Ñ€ÐºÐ°Ñ Ð¿Ð°ÐºÐ°Ð·Ð²Ð°ÐµÑ†Ñ†Ð°"
msgid "Zoom currently disabled by game or mod"
msgstr "ПавелічÑнне зараз выключана гульнёй альбо мадыфікацыÑй"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "добра"
@@ -1352,6 +1560,7 @@ msgstr "Левы Shift"
msgid "Left Windows"
msgstr "Левы Super"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Меню"
@@ -1444,6 +1653,7 @@ msgstr "Паўза"
msgid "Play"
msgstr "ГулÑць"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Друкаваць"
@@ -1480,6 +1690,7 @@ msgstr "Правы Super"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Ðбраць"
@@ -1720,10 +1931,15 @@ msgstr "Сцішаны"
msgid "Sound Volume: "
msgstr "ГучнаÑць: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Увод "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "be"
@@ -1830,6 +2046,11 @@ msgid "3D mode"
msgstr "3D-Ñ€Ñжым"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Моц мапы нармалÑÑž"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "3D-шум, што вызначае Ð³Ñ–Ð³Ð°Ð½Ñ†ÐºÑ–Ñ Ð³Ñ€Ð¾Ñ‚Ñ‹."
@@ -1842,6 +2063,14 @@ msgstr ""
"ТакÑама вызначае Ñтруктуру горнага Ñ€Ñльефу лÑтучых аÑтравоў."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "3D-шум, што вызначае Ñтруктуру Ñхілаў рачных каньёнаў."
@@ -1903,7 +2132,8 @@ msgid "ABM interval"
msgstr "ІнтÑрвал Ð·Ð°Ñ…Ð°Ð²Ð°Ð½Ð½Ñ Ð¼Ð°Ð¿Ñ‹"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "ÐбÑалютны ліміт чаргі запытаў"
#: src/settings_translation_file.cpp
@@ -1953,6 +2183,16 @@ msgstr ""
"(не толькі X11/Android), напрыклад, Ð´Ð»Ñ 4k-Ñкранаў."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "ПашыраныÑ"
@@ -1966,10 +2206,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Ð’Ñ‹ÑˆÑ‹Ð½Ñ Ð½Ñ–Ð²Ð°Ð»ÑŒÐ½Ð°Ð³Ð° поÑÑу"
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr "ЗаўÑёды Ñž палёце Ñ– шпарка"
@@ -2155,9 +2391,10 @@ msgid "Bumpmapping"
msgstr "РÑльефнае Ñ‚ÑкÑтураванне"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2246,10 +2483,20 @@ msgstr ""
"Прадвызначана: simple Ð´Ð»Ñ Android, full Ð´Ð»Ñ ÑžÑÑ–Ñ… аÑтатніх."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Памер шрыфту"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Клавіша размовы"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Узровень журнала адладкі"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "МакÑÑ–Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñць паведамленнÑÑž у размове"
@@ -2534,6 +2781,11 @@ msgid "Default report format"
msgstr "Прадвызначаны фармат Ñправаздачы"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "ÐŸÑ€Ð°Ð´Ð²Ñ‹Ð·Ð½Ð°Ñ‡Ð°Ð½Ð°Ñ Ð³ÑƒÐ»ÑŒÐ½Ñ"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2884,6 +3136,16 @@ msgstr ""
"паміж блокамі пры значÑнні большым за 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS у меню паўзы"
@@ -3004,6 +3266,41 @@ msgid "Fixed virtual joystick"
msgstr "ФікÑÐ°Ñ†Ñ‹Ñ Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ð³Ð° джойÑціка"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "ШчыльнаÑць гор лÑтучых аÑтравоў"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "МакÑÑ–Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Y падзÑмеллÑ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "ÐœÑ–Ð½Ñ–Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Y падзÑмеллÑ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Базавы шум лÑтучых аÑтравоў"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "ШчыльнаÑць гор лÑтучых аÑтравоў"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Базавы шум лÑтучых аÑтравоў"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Узровень лÑтучых аÑтравоў"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Клавіша палёту"
@@ -3057,6 +3354,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4685,14 +4988,6 @@ msgid "Light curve low gradient"
msgstr "ЦÑнтр ÑÑÑ€ÑднÑга ўздыму крывой ÑвÑтла"
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Ðбмежаванне чÑргаў на дыÑку"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Ðбмежаванне чÑргаў на генерацыю"
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4768,6 +5063,11 @@ msgid "Lower Y limit of dungeons."
msgstr "Ðіжні ліміт Y Ð´Ð»Ñ Ð¿Ð°Ð´Ð·ÑмеллÑÑž."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "Ðіжні ліміт Y Ð´Ð»Ñ Ð¿Ð°Ð´Ð·ÑмеллÑÑž."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Скрыпт галоўнага меню"
@@ -4852,9 +5152,12 @@ msgstr ""
"а параметр «jungles» ігнаруецца."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
"Ðтрыбуты генерацыі Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ‚Ð°Ñ€Ð° 7.\n"
"«ridges» уключае Ñ€Ñкі."
@@ -4944,10 +5247,6 @@ msgid "Mapgen debug"
msgstr "Генератар мапы: адладка"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Генератар мапы: параметры"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Ðазва генератара мапы"
@@ -5019,17 +5318,19 @@ msgid "Maximum number of blocks that can be queued for loading."
msgstr "МакÑÑ–Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñць блокаў, што можна дадаць у чаргу загрузкі."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"МакÑÑ–Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñць блокаў, што можна дадаць у чаргу генерацыі.\n"
"Пакінце пуÑтым Ð´Ð»Ñ Ð°ÑžÑ‚Ð°Ð¼Ð°Ñ‚Ñ‹Ñ‡Ð½Ð°Ð³Ð° выбару неабходнага значÑннÑ."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"МакÑÑ–Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñць блокаў у чарзе на загрузку з файла.\n"
"Пакінце пуÑтым Ð´Ð»Ñ Ð°ÑžÑ‚Ð°Ð¼Ð°Ñ‚Ñ‹Ñ‡Ð½Ð°Ð³Ð° выбару неабходнага значÑннÑ."
@@ -5129,6 +5430,10 @@ msgid "Method used to highlight selected object."
msgstr "Метад падÑвÑÑ‚Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ñ€Ð°Ð½Ð°Ð³Ð° аб'екта."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Мінімапа"
@@ -5247,7 +5552,8 @@ msgid ""
msgstr "Ðазва Ñервера, што будзе паказвацца пры падлучÑнні Ñ– Ñž ÑпіÑе Ñервераў."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+#, fuzzy
+msgid "Near plane"
msgstr "Ð‘Ð»Ñ–Ð·ÐºÐ°Ñ Ð¿Ð»Ð¾ÑкаÑць адÑÑчÑннÑ"
#: src/settings_translation_file.cpp
@@ -5299,11 +5605,9 @@ msgid "Number of emerge threads"
msgstr "КолькаÑць узнікаючых патокаў"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5402,10 +5706,6 @@ msgid "Parallax occlusion scale"
msgstr "Маштаб паралакÑнай аклюзіі"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "ІнтÑнÑіўнаÑць паралакÑнай аклюзіі"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5415,8 +5715,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Каталог Ð´Ð»Ñ Ð·Ð°Ñ…Ð¾ÑžÐ²Ð°Ð½Ð½Ñ Ð·Ð´Ñ‹Ð¼ÐºÐ°Ñž Ñкрана."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5451,6 +5753,15 @@ msgid "Pause on lost window focus"
msgstr "Паўза пры Ñтраце фокуÑу"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Ðбмежаванне чÑргаў на генерацыю"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Фізіка"
@@ -5531,6 +5842,18 @@ msgid "Profiling"
msgstr "ПрафілÑванне"
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -6051,6 +6374,13 @@ msgstr ""
"ÐедаÑÑÐ¶Ð½Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ будуць Ñпампоўвацца звычайным чынам."
#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
@@ -6077,6 +6407,11 @@ msgid "Step mountain spread noise"
msgstr "Крок шуму раÑпаўÑÑŽÐ´Ð¶Ð²Ð°Ð½Ð½Ñ Ð³Ð¾Ñ€"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "Моц паралакÑа."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Моц згенераваных мапаў нармалÑÑž."
@@ -6088,10 +6423,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Моц паралакÑа."
-
-#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
msgstr "Ð¡Ñ‚Ñ€Ð¾Ð³Ð°Ñ Ð¿Ñ€Ð°Ð²ÐµÑ€ÐºÐ° пратакола"
@@ -6100,6 +6431,20 @@ msgid "Strip color codes"
msgstr "Прыбіраць коды колераў"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "Сінхронны SQLite"
@@ -6225,6 +6570,7 @@ msgstr ""
"ГлÑдзіце поўны ÑÐ¿Ñ–Ñ Ð¿Ñ€Ñ‹Ð²Ñ–Ð»ÐµÑÑž у /privs."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The radius of the volume of blocks around every player that is subject to "
"the\n"
@@ -6232,7 +6578,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
"Ð Ð°Ð´Ñ‹ÑƒÑ Ð°Ð±'ёму блокаў вакол кожнага гульца, у Ñкім дзейнічаюць\n"
"Ð°ÐºÑ‚Ñ‹ÑžÐ½Ñ‹Ñ Ð±Ð»Ð¾ÐºÑ–, вызначаны Ñž блоках мапы (16 блокаў).\n"
@@ -6429,6 +6775,11 @@ msgid "Upper Y limit of dungeons."
msgstr "Верхні ліміт Y Ð´Ð»Ñ Ð¿Ð°Ð´Ð·ÑмеллÑÑž."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Верхні ліміт Y Ð´Ð»Ñ Ð¿Ð°Ð´Ð·ÑмеллÑÑž."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Ðб'Ñ‘Ð¼Ð½Ñ‹Ñ Ð°Ð±Ð»Ð¾ÐºÑ– замеÑÑ‚ плоÑкіх."
@@ -6809,6 +7160,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr "Y-адлеглаÑць, на Ñкой пÑчора пашырыцца да поўнага памеру."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Y-узровень ÑÑÑ€ÑднÑй паверхні Ñ€Ñльефу."
@@ -6947,18 +7306,6 @@ msgstr "Таймаўт cURL"
#~ msgid "Floatland mountain height"
#~ msgstr "Ð’Ñ‹ÑˆÑ‹Ð½Ñ Ð³Ð¾Ñ€ на лÑтучых аÑтравоў"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "ШчыльнаÑць гор лÑтучых аÑтравоў"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "ШчыльнаÑць гор лÑтучых аÑтравоў"
-
-#~ msgid "Floatland level"
-#~ msgstr "Узровень лÑтучых аÑтравоў"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Базавы шум лÑтучых аÑтравоў"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Шум базавай вышыні лÑтучых аÑтравоў"
@@ -7012,3 +7359,21 @@ msgstr "Таймаўт cURL"
#~ "Ðаладка гама-ÐºÐ°Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñветлавых табліц. Ð’Ñ‹ÑÐ¾ÐºÑ–Ñ Ð·Ð½Ð°Ñ‡Ñнні — больш "
#~ "ÑрчÑйшыÑ.\n"
#~ "ГÑты параметр прызначаны толькі Ð´Ð»Ñ ÐºÐ»Ñ–ÐµÐ½Ñ‚Ð° Ñ– ігнаруецца Ñерверам."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Каталог Ð´Ð»Ñ Ð·Ð°Ñ…Ð¾ÑžÐ²Ð°Ð½Ð½Ñ Ð·Ð´Ñ‹Ð¼ÐºÐ°Ñž Ñкрана."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "ІнтÑнÑіўнаÑць паралакÑнай аклюзіі"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Ðбмежаванне чÑргаў на дыÑку"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Спампоўванне Ñ– ÑžÑталёўка $1. Калі лаÑка, пачакайце…"
+
+#~ msgid "Back"
+#~ msgstr "Ðазад"
+
+#~ msgid "Ok"
+#~ msgstr "Добра"
diff --git a/po/ca/minetest.po b/po/ca/minetest.po
index bab5bf4c5..5ce219f7f 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: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Catalan <https://hosted.weblate.org/projects/minetest/"
@@ -23,6 +23,10 @@ msgstr "Reaparèixer"
msgid "You died"
msgstr "Has mort."
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -38,10 +42,6 @@ msgid "Main menu"
msgstr "Menú principal"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "D'acord"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Torneu a connectar"
@@ -122,6 +122,10 @@ msgstr ""
"estan permesos els caràcters [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
@@ -172,18 +176,18 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Enrere"
-
-#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
msgid "Back to Main Menu"
msgstr "Menú principal"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
-msgid "Downloading and installing $1, please wait..."
-msgstr "Descarregant $1, si us plau esperi ..."
+msgid "Downloading..."
+msgstr "Carregant ..."
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
@@ -231,16 +235,57 @@ msgstr "Instal·lar"
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Ja existeix un món anomenat \"$1\""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Altitude chill"
+msgstr "Fred d'altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Fred d'altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Soroll de cova #1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Soroll de cova #1"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Crear"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
+msgid "Decorations"
+msgstr "Informació del mod:"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
"Descarrega un subjoc, com per exemple minetest_game, des de minetest.net"
@@ -249,26 +294,148 @@ msgstr ""
msgid "Download one from minetest.net"
msgstr "Descarrega'n alguns des de minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Soroll de cova #1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Joc"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Generador de mapes"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Generador de mapes"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "No game selected"
msgstr "Seleccionar distancia"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Soroll de cova #1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Llavor"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
"Advertència: El joc \"Minimal development test\" esta dissenyat per a "
"desenvolupadors."
@@ -427,15 +594,26 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
msgid "defaults"
msgstr "Joc per defecte"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -603,6 +781,10 @@ msgid "Host Server"
msgstr "Servidor"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Nom/Contrasenya"
@@ -672,6 +854,7 @@ msgstr "Nom / Contrasenya"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP activat"
@@ -922,6 +1105,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "La ruta del món especificat no existeix: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -963,6 +1154,7 @@ msgstr "Port"
msgid "- Public: "
msgstr "Públic"
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1274,6 +1466,14 @@ msgid "Sound muted"
msgstr "Volum del so"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Sound unmuted"
msgstr "Volum del so"
@@ -1306,7 +1506,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "Acceptar"
@@ -1435,6 +1635,7 @@ msgstr "Shift esq"
msgid "Left Windows"
msgstr "Windows esquerre"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menú"
@@ -1528,6 +1729,7 @@ msgstr "Pausa"
msgid "Play"
msgstr "Jugar"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Imprimir"
@@ -1564,6 +1766,7 @@ msgstr "Windows dret"
msgid "Scroll Lock"
msgstr "Bloq Despl"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Seleccionar"
@@ -1812,10 +2015,15 @@ msgstr "Utilitza la tecla"
msgid "Sound Volume: "
msgstr "Volum de so: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Introdueix "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "ca"
@@ -1908,6 +2116,10 @@ msgid "3D mode"
msgstr "Mode 3D"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1918,6 +2130,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1979,7 +2199,8 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "Límit absolut de cues emergents"
#: src/settings_translation_file.cpp
@@ -2032,6 +2253,16 @@ msgstr ""
"X11/Sols Android) Ex. per a pantalles amb 4K."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avançat"
@@ -2045,11 +2276,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Altitude chill"
-msgstr "Fred d'altitud"
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr "Sempre volar y ràpid"
@@ -2226,8 +2452,8 @@ msgstr "Mapat de relleu"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2311,10 +2537,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Mida del chunk"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Tecla del xat"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Nivell de registre de depuració"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2601,6 +2837,11 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Joc per defecte"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2914,6 +3155,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -3026,6 +3277,35 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Soroll de cova #1"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -3079,6 +3359,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4595,14 +4881,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4667,6 +4945,11 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "Límit absolut de cues emergents"
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4734,7 +5017,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4831,10 +5116,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4902,13 +5183,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4993,6 +5274,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -5100,7 +5385,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5152,9 +5437,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5232,10 +5514,6 @@ msgid "Parallax occlusion scale"
msgstr "Oclusió de paral·laxi"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5245,7 +5523,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5279,6 +5559,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -5348,6 +5636,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5817,6 +6117,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5839,6 +6146,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5850,15 +6161,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5976,7 +6297,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6136,6 +6457,11 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Límit absolut de cues emergents"
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6464,6 +6790,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6518,3 +6852,13 @@ msgstr ""
#~ "Ajusta la codificació gamma per les taules de llum. Els nombrés nés "
#~ "petits n'augmentaràn la brillantor.\n"
#~ "Aquesta configuració només afecta al client, el servidor l'ignora."
+
+#, fuzzy
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Descarregant $1, si us plau esperi ..."
+
+#~ msgid "Back"
+#~ msgstr "Enrere"
+
+#~ msgid "Ok"
+#~ msgstr "D'acord"
diff --git a/po/cs/minetest.po b/po/cs/minetest.po
index 4c10c7304..f710ac43f 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-12-11 13:36+0000\n"
-"Last-Translator: LuboÅ¡ NeÄas <lubosnecas506@seznam.cz>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-07-08 20:47+0000\n"
+"Last-Translator: sfan5 <sfan5@live.de>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/minetest/minetest/"
"cs/>\n"
"Language: cs\n"
@@ -12,21 +12,23 @@ 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 3.10-dev\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
-msgstr "Vzkřísit"
+msgstr "Oživit"
#: builtin/client/death_formspec.lua src/client/game.cpp
-#, fuzzy
msgid "You died"
-msgstr "Zemřel jsi."
+msgstr "Zemřel jsi"
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "Nastala chyba v Lua skriptu, což může být např. mod:"
+msgstr "Nastala chyba v Lua skriptu:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -37,10 +39,6 @@ msgid "Main menu"
msgstr "Hlavní nabídka"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "OK"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Znovu se připojit"
@@ -109,42 +107,40 @@ msgid "Enable modpack"
msgstr "Povolit balíÄek modifikací"
#: 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 ""
"Nepodařilo se povolit mod \"$1\" protože obsahuje nepovolené znaky. Povoleny "
-"jsou pouze znaky a-z, 0-9."
+"jsou pouze znaky [a-z0-9_]."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No (optional) dependencies"
-msgstr "Volitelné závislosti:"
+msgstr "Žádné (volitelné) závislosti"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No game description provided."
-msgstr "Mod nemá popis"
+msgstr "Není k dispozici žádný popis hry."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "Žádné závislosti."
+msgstr "Žádné pevné závislosti"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No modpack description provided."
-msgstr "Mod nemá popis"
+msgstr "Není k dispozici žádný popis balíÄku modifikací."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No optional dependencies"
-msgstr "Volitelné závislosti:"
+msgstr "Žádné volitelné závislosti"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
@@ -168,17 +164,17 @@ msgid "All packages"
msgstr "VÅ¡echny balíÄky"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Zpět"
+msgid "Back to Main Menu"
+msgstr "Zpět do hlavní nabídky"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
-msgid "Back to Main Menu"
-msgstr "Hlavní nabídka"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Stahuji a instaluji $1, prosím Äekejte..."
+#, fuzzy
+msgid "Downloading..."
+msgstr "Nahrávám..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -200,7 +196,7 @@ msgstr "Mody"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr ""
+msgstr "Nelze naÄíst žádný balíÄek"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
@@ -223,35 +219,157 @@ msgstr "Odinstalovat"
msgid "Update"
msgstr "Aktualizovat"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Svět s názvem \"$1\" už existuje"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Výškové ochlazení"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Výškové ochlazení"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Šum biomů"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Šum biomů"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Šum jeskynních dutin"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Oktávy"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Vytvořit"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
+msgid "Decorations"
+msgstr "Iterace"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Stáhněte si z minetest.net podhru, například minetest_game"
+msgstr "Stáhněte si z minetest.net hru, například Minetest Game"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr "Stáhněte si jednu z minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Šum hřbetů"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floating landmasses in the sky"
+msgstr "Koncentrace hor na létajících ostrovech"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "Výška létajících ostrovů"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Hra"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "OvladaÄ grafiky"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Generátor mapy"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Nastavení generátoru mapy"
+
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Mapgen údolí"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
-msgstr "Změna dohledu"
+msgstr "Není vybrána žádná hra"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Velikost řeky"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -259,7 +377,51 @@ msgid "Seed"
msgstr "Seedové Äíslo"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Hloubka řeky"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Varování: \"Minimal development test\" je zamýšlen pouze pro vývojáře."
#: builtin/mainmenu/dlg_create_world.lua
@@ -267,9 +429,8 @@ msgid "World name"
msgstr "Název světa"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "You have no games installed."
-msgstr "Nemáte nainstalované žádné podhry."
+msgstr "Nemáte nainstalované žádné hry."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
@@ -282,14 +443,12 @@ msgid "Delete"
msgstr "Smazat"
#: builtin/mainmenu/dlg_delete_content.lua
-#, fuzzy
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "Modmgr: Nepodařilo se odstranit \"$1\""
+msgstr "pkgmgr: nepodařilo se odstranit \"$1\""
#: builtin/mainmenu/dlg_delete_content.lua
-#, fuzzy
msgid "pkgmgr: invalid path \"$1\""
-msgstr "Modmgr: Neplatná cesta k modu \"$1\""
+msgstr "pkgmgr: neplatná cesta \"$1\""
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
@@ -308,15 +467,16 @@ msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
+"Tento balíÄek modů má uvedené jméno ve svém modpack.conf, které pÅ™epíše "
+"jakékoliv přejmenování zde."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
msgstr "(bez popisu)"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "2D Noise"
-msgstr "Šum jeskyní 2"
+msgstr "2D šum"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -339,21 +499,20 @@ msgid "Enabled"
msgstr "Zapnuto"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Lacunarity"
-msgstr "ZabezpeÄení"
+msgstr "Lakunarita"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
-msgstr ""
+msgstr "Oktávy"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr ""
+msgstr "Odstup"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Persistance"
-msgstr ""
+msgstr "Urputnost"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
@@ -369,17 +528,15 @@ msgstr "Obnovit výchozí"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
-msgstr ""
+msgstr "Přiblížení"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Select directory"
-msgstr "Vybrat soubor s modem:"
+msgstr "Vyberte adresář"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Select file"
-msgstr "Vybrat soubor s modem:"
+msgstr "Vybrat soubor"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Show technical names"
@@ -399,7 +556,7 @@ msgstr "X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X spread"
-msgstr ""
+msgstr "Rozptyl X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
@@ -407,7 +564,7 @@ msgstr "Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y spread"
-msgstr ""
+msgstr "Rozptyl Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
@@ -415,130 +572,121 @@ msgstr "Z"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z spread"
-msgstr ""
+msgstr "Rozptyl Z"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr ""
+msgstr "absolutnihodnota"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "defaults"
-msgstr "Výchozí hra"
+msgstr "Výchozí hodnoty"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+msgstr "vyhlazení"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "$1 (Enabled)"
-msgstr "Zapnuto"
+msgstr "$1 (Povoleno)"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "$1 mods"
-msgstr "Režim 3D zobrazení"
+msgstr "$1 rozšíření"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Selhala instalace $1 do $2"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "Instalace modu: nenaÅ¡el jsem skuteÄné jméno modu: $1"
+msgstr "Instalace rozšíření: nenaÅ¡el jsem skuteÄné jméno modu: $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
-"Instalace modu: nenalezen vhodný adresář s přísluÅ¡ným názvem pro balíÄek $1"
+"Instalace rozšíření: nenalezen vhodný adresář s příslušným názvem pro "
+"balíÄek $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install: Unsupported file type \"$1\" or broken archive"
msgstr ""
-"\n"
-"Instalace modu: špatný archiv nebo nepodporovaný typ souboru \"$1\""
+"Instalace rozšíření: poškozený archiv nebo nepodporovaný typ souboru \"$1\""
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install: file: \"$1\""
-msgstr "Instalace modu: ze souboru: \"$1\""
+msgstr "Instalace: soubor: \"$1\""
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to find a valid mod or modpack"
-msgstr ""
-"Instalace modu: nenalezen vhodný adresář s přísluÅ¡ným názvem pro balíÄek $1"
+msgstr "Platné rozšíření nebylo nalezeno"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a $1 as a texture pack"
-msgstr "Selhala instalace $1 do $2"
+msgstr "Selhala instalace $1 jako rozšíření textur"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a game as a $1"
-msgstr "Selhala instalace $1 do $2"
+msgstr "Selhala instalace hru jako $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a mod as a $1"
-msgstr "Selhala instalace $1 do $2"
+msgstr "Selhala instalace rozšíření $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a modpack as a $1"
-msgstr "Selhala instalace $1 do $2"
+msgstr "Selhala instalace rozšíření $1"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "Procházet online obsah"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Content"
-msgstr "PokraÄovat"
+msgstr "Obsah"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Disable Texture Pack"
-msgstr "Vyberte balík textur:"
+msgstr "Zakázat Rozšíření Textur"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Information:"
-msgstr "Informace o modu:"
+msgstr "Informace:"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Installed Packages:"
-msgstr "Nainstalované mody:"
+msgstr "Instalované balíÄky:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
msgstr "Žádné závislosti."
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "No package description available"
-msgstr "Mod nemá popis"
+msgstr "BalíÄek nemá žádný popis"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
msgstr "Přejmenovat"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Uninstall Package"
-msgstr "Odinstalovat vybraný mod"
+msgstr "Odinstalovat balíÄek"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Use Texture Pack"
-msgstr "Balíky textur"
+msgstr "Použít Rozšíření Textur"
#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
@@ -546,7 +694,7 @@ msgstr "Aktivní přispěvatelé"
#: builtin/mainmenu/tab_credits.lua
msgid "Core Developers"
-msgstr "KlíÄoví vývojáři"
+msgstr "Hlavní vývojáři"
#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
@@ -566,7 +714,7 @@ msgstr "Uveřejnit server"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr "Svázat adresu"
+msgstr "Poslouchat na Adrese"
#: builtin/mainmenu/tab_local.lua
msgid "Configure"
@@ -589,6 +737,10 @@ msgid "Host Server"
msgstr "Založit server"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Jméno/Heslo"
@@ -645,9 +797,8 @@ msgid "Favorite"
msgstr "Oblíbené"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Join Game"
-msgstr "Založit hru"
+msgstr "Připojit se ke hře"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Name / Password"
@@ -657,9 +808,10 @@ msgstr "Jméno / Heslo"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
-msgstr "PvP povoleno"
+msgstr "PvP (hrÃ¡Ä proti hráÄi) povoleno"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -678,9 +830,8 @@ msgid "8x"
msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "All Settings"
-msgstr "Nastavení"
+msgstr "Všechna Nastavení"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
@@ -691,9 +842,8 @@ msgid "Are you sure to reset your singleplayer world?"
msgstr "Jste si jisti, že chcete resetovat místní svět?"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Autosave Screen Size"
-msgstr "Ukládat velikost obr."
+msgstr "Pamatovat si velikost obrazovky"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
@@ -716,9 +866,8 @@ msgid "Fancy Leaves"
msgstr "Vícevrstevné listí"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Generate Normal Maps"
-msgstr "Generovat normálové mapy"
+msgstr "Generovat Normální Mapy"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
@@ -786,7 +935,7 @@ msgstr "Shadery"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "Shadery (není dostupné)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -809,9 +958,8 @@ msgid "Tone Mapping"
msgstr "Tone mapping"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Touchthreshold: (px)"
-msgstr "Dosah dotyku (px)"
+msgstr "Dosah dotyku: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
@@ -822,9 +970,8 @@ msgid "Waving Leaves"
msgstr "Vlnění listů"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Liquids"
-msgstr "Vlnění bloků"
+msgstr "Vlnění Kapalin"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
@@ -901,12 +1048,20 @@ msgstr "Zvolte prosím název!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr ""
+msgstr "Soubor s heslem nebylo možné otevřít: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr "Uvedená cesta ke světu neexistuje: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -943,6 +1098,7 @@ msgstr "- Port: "
msgid "- Public: "
msgstr "- Veřejný: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -952,42 +1108,36 @@ msgid "- Server Name: "
msgstr "- Název serveru: "
#: src/client/game.cpp
-#, fuzzy
msgid "Automatic forward disabled"
-msgstr "Vpřed"
+msgstr "Automatický posun vpřed zakázán"
#: src/client/game.cpp
-#, fuzzy
msgid "Automatic forward enabled"
-msgstr "Vpřed"
+msgstr "Automatický posun vpřed povolen"
#: src/client/game.cpp
-#, fuzzy
msgid "Camera update disabled"
-msgstr "Klávesa pro přepínání aktualizace pohledu"
+msgstr "Aktualizace kamery (pohledu) zakázána"
#: src/client/game.cpp
-#, fuzzy
msgid "Camera update enabled"
-msgstr "Klávesa pro přepínání aktualizace pohledu"
+msgstr "Aktualizace kamery (pohledu) povolena"
#: src/client/game.cpp
msgid "Change Password"
msgstr "Změnit heslo"
#: src/client/game.cpp
-#, fuzzy
msgid "Cinematic mode disabled"
-msgstr "Klávesa plynulého pohybu kamery"
+msgstr "Filmový režim zakázán"
#: src/client/game.cpp
-#, fuzzy
msgid "Cinematic mode enabled"
-msgstr "Klávesa plynulého pohybu kamery"
+msgstr "Filmový režim povolen"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
-msgstr ""
+msgstr "Uživatelské skripty nejsou povoleny"
#: src/client/game.cpp
msgid "Connecting to server..."
@@ -1040,16 +1190,15 @@ msgstr "Spouštím server…"
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr ""
+msgstr "Ladící informace a profilovací graf skryty"
#: src/client/game.cpp
-#, fuzzy
msgid "Debug info shown"
-msgstr "Klávesa pro zobrazení ladících informací"
+msgstr "Ladící informace zobrazeny"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr ""
+msgstr "Ladící informace, profilovací graf a obrysy skryty"
#: src/client/game.cpp
msgid ""
@@ -1081,11 +1230,11 @@ msgstr ""
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr ""
+msgstr "Neomezený pohled zakázán"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr ""
+msgstr "Neomezený pohled povolen"
#: src/client/game.cpp
msgid "Exit to Menu"
@@ -1096,42 +1245,36 @@ msgid "Exit to OS"
msgstr "UkonÄit hru"
#: src/client/game.cpp
-#, fuzzy
msgid "Fast mode disabled"
-msgstr "Rychlost v turbo režimu"
+msgstr "Rychlý režim zakázán"
#: src/client/game.cpp
-#, fuzzy
msgid "Fast mode enabled"
-msgstr "Rychlost v turbo režimu"
+msgstr "Rychlý režim povolen"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr ""
+msgstr "Rychlý režim povolen (pozn.: nemáte oprávnění 'fast')"
#: src/client/game.cpp
-#, fuzzy
msgid "Fly mode disabled"
-msgstr "Rychlost v turbo režimu"
+msgstr "Režim létání zakázán"
#: src/client/game.cpp
-#, fuzzy
msgid "Fly mode enabled"
-msgstr "Zranění povoleno"
+msgstr "Režim létání povolen"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr ""
+msgstr "Režim létání povolen (pozn.: nemáte oprávnění 'fly')"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog disabled"
-msgstr "Je-li zakázáno "
+msgstr "Mlha je zakázána"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog enabled"
-msgstr "zapnuto"
+msgstr "Mlha je povolena"
#: src/client/game.cpp
msgid "Game info:"
@@ -1163,49 +1306,47 @@ msgstr "MiB/s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "Minimapa je aktuálně zakázána"
#: src/client/game.cpp
-#, fuzzy
msgid "Minimap hidden"
-msgstr "Minimapa"
+msgstr "Minimapa je skryta"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x1"
-msgstr ""
+msgstr "Minimapa v režimu radar, Přiblížení x1"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x2"
-msgstr ""
+msgstr "Minimapa v režimu radar, Přiblížení x2"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x4"
-msgstr ""
+msgstr "Minimapa v režimu radar, Přiblížení x4"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x1"
-msgstr ""
+msgstr "Minimapa v režimu povrch, Přiblížení x1"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x2"
-msgstr ""
+msgstr "Minimapa v režimu povrch, Přiblížení x2"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x4"
-msgstr ""
+msgstr "Minimapa v režimu povrch, Přiblížení x4"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr ""
+msgstr "Režim bez ořezu zakázán"
#: src/client/game.cpp
-#, fuzzy
msgid "Noclip mode enabled"
-msgstr "Zranění povoleno"
+msgstr "Režim bez ořezu povolen"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr ""
+msgstr "Režim bez ořezu povolen (pozn.: nemáte oprávnění 'noclip')"
#: src/client/game.cpp
msgid "Node definitions..."
@@ -1221,15 +1362,15 @@ msgstr "Zapnuto"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr ""
+msgstr "Posun v režimu Pitch zakázán"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr ""
+msgstr "Posun v režimu Pitch povolen"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "Profilovací graf zobrazen"
#: src/client/game.cpp
msgid "Remote server"
@@ -1252,29 +1393,35 @@ msgid "Sound Volume"
msgstr "Hlasitost"
#: src/client/game.cpp
-#, fuzzy
msgid "Sound muted"
-msgstr "Hlasitost"
+msgstr "Zvuk vypnut"
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
#: src/client/game.cpp
-#, fuzzy
msgid "Sound unmuted"
-msgstr "Hlasitost"
+msgstr "Zvuk zapnut"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Viewing range changed to %d"
-msgstr "Hlasitost nastavena na %d%%"
+msgstr "Omezení dohlédnutí upraveno na %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr ""
+msgstr "Omezení dohlédnutí na maximu: %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr ""
+msgstr "Omezení dohlédnutí na minimu: %d"
#: src/client/game.cpp
#, c-format
@@ -1283,50 +1430,48 @@ msgstr "Hlasitost nastavena na %d%%"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr ""
+msgstr "Obrysy zobrazeny"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr ""
+msgstr "Přiblížení je aktuálně zakázáno"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "OK"
#: src/client/gameui.cpp
-#, fuzzy
msgid "Chat hidden"
-msgstr "Klávesa chatu"
+msgstr "Chat skryt"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "Chat zobrazen"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "Ovládací prvky skryty"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "Ovládací prvky zobrazeny"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr ""
+msgstr "Profilování skryto"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr ""
+msgstr "Profilování zobrazeno (strana %d z %d)"
#: src/client/keycode.cpp
msgid "Apps"
msgstr "Aplikace"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Backspace"
-msgstr "Zpět"
+msgstr "Backspace"
#: src/client/keycode.cpp
msgid "Caps Lock"
@@ -1366,7 +1511,7 @@ msgstr "Home"
#: src/client/keycode.cpp
msgid "IME Accept"
-msgstr "IME Accept"
+msgstr "Povolené IME"
#: src/client/keycode.cpp
msgid "IME Convert"
@@ -1412,6 +1557,7 @@ msgstr "Levý Shift"
msgid "Left Windows"
msgstr "Levá klávesa Windows"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Nabídka"
@@ -1490,11 +1636,11 @@ msgstr "OEM Clear"
#: src/client/keycode.cpp
msgid "Page down"
-msgstr ""
+msgstr "Klávesa Page Down"
#: src/client/keycode.cpp
msgid "Page up"
-msgstr ""
+msgstr "Klávesa Page Up"
#: src/client/keycode.cpp
msgid "Pause"
@@ -1504,6 +1650,7 @@ msgstr "Pauza"
msgid "Play"
msgstr "Hrát"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Print Screen"
@@ -1540,6 +1687,7 @@ msgstr "Pravá klávesa Windows"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Vybrat"
@@ -1586,7 +1734,7 @@ msgstr "Hesla se neshodují!"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
-msgstr ""
+msgstr "Registrovat a Připojit se"
#: src/gui/guiConfirmRegistration.cpp
#, c-format
@@ -1597,33 +1745,35 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
+"Budete poprvé připojeni k serveru \"%s\".\n"
+"Pokud budete pokraÄovat, nový uživatelský úÄet s vaÅ¡imi údaji bude vytvoÅ™en "
+"na tomto serveru.\n"
+"Prosím znovu napište svoje aktuální heslo a klikněte na 'Registrovat a "
+"Připojit se' pro potvrzení souhlasu, nebo vyberte 'Zrušit' pro návrat."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "PokraÄovat"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "\"Special\" = climb down"
-msgstr "„Použít“ = sestupovat dolů"
+msgstr "„Speciální“ = sestoupit dolů"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Autoforward"
-msgstr "Vpřed"
+msgstr "Automaticky vpřed"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
-msgstr ""
+msgstr "Automaticky skákat"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Vzad"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Change camera"
-msgstr "Změnit nastavení kláves"
+msgstr "Změnit nastavení kamery"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
@@ -1638,9 +1788,8 @@ msgid "Console"
msgstr "Konzole"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Dec. range"
-msgstr "Vzdálenost dohledu"
+msgstr "Snížit rozsah"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
@@ -1659,9 +1808,8 @@ msgid "Forward"
msgstr "Vpřed"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Inc. range"
-msgstr "Vzdálenost dohledu"
+msgstr "Zvýšit rozsah"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
@@ -1715,44 +1863,39 @@ msgstr "Plížit se"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Special"
-msgstr ""
+msgstr "Speciální"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle HUD"
-msgstr "Létání"
+msgstr "Zapnout/Vypnout ovládací prvky"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle chat log"
-msgstr "Turbo"
+msgstr "Zapnout/Vypnout záznam chatu"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
-msgstr "Turbo"
+msgstr "Zapnout/Vypnout rychlost"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fly"
-msgstr "Létání"
+msgstr "Zapnout/Vypnout létání"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle fog"
-msgstr "Létání"
+msgstr "Zapnout/Vypnout mlhu"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle minimap"
-msgstr "Duch"
+msgstr "Zapnout/Vypnout minimapu"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr "Duch"
+msgstr "Zapnout/Vypnout režim ořezu"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
-msgstr "Turbo"
+msgstr "Zapnout/Vypnout režim posunu Pitch"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -1779,18 +1922,22 @@ msgid "Exit"
msgstr "Odejít"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy
msgid "Muted"
-msgstr "Ztlumit"
+msgstr "Ztlumeno"
#: src/gui/guiVolumeChange.cpp
msgid "Sound Volume: "
msgstr "Hlasitost: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Zadejte "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "cs"
@@ -1800,6 +1947,8 @@ msgid ""
"(Android) Fixes the position of virtual joystick.\n"
"If disabled, virtual joystick will center to first-touch's position."
msgstr ""
+"(Android) Opravena pozice virtuálního joysticku.\n"
+"Pokud je zakázán, virtuální joystick se upraví podle umístění prvního dotyku."
#: src/settings_translation_file.cpp
msgid ""
@@ -1807,9 +1956,11 @@ msgid ""
"If enabled, virtual joystick will also tap \"aux\" button when out of main "
"circle."
msgstr ""
+"(Android) Použít virtuální joystick pro stisknutí tlaÄítka 'aux'.\n"
+"Pokud je povoleno, virtuální joystick automaticky stiskne tlaÄítko 'aux' "
+"pokud je mimo hlavní kruh."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1820,10 +1971,13 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-"(X,Y,Z) posun fraktálu od středu světa v jednotkách 'scale'.\n"
-"Použito k posunutí vhodného spawnu v údolí poblíž souřadnic (0,0).\n"
-"Výchozí nastavení je vhodné pro Mandelbrotovu množinu, pro Juliovu množinu "
-"musí být zvlášť upraveny.\n"
+"(X,Y,Z) rozestup fraktálu od středu světa v jednotkách 'scale'.\n"
+"Může být použito k posunutí spawnu ze souřadnic (0,0),\n"
+"nebo k umožnění přiblížení 'zoom in' na konkrétní bod,\n"
+"zvýšením hodnoty 'scale'.\n"
+"Výchozí nastavení je vhodné pro Mandelbrotovu množinu,\n"
+"pro Juliovu a další množiny, může být potřeba speciálního\n"
+"nastavení.\n"
"Rozsah je přibližně od -2 do 2. Násobte 'scale' pro posun v blocích."
#: src/settings_translation_file.cpp
@@ -1836,6 +1990,13 @@ 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) měřítko fraktálu v uzlech.\n"
+"SkuteÄná fraktální velikost bude 2 až 3krát vÄ›tší.\n"
+"Tato Äísla mohou být velmi velká, fraktál se nemusí\n"
+"vejít do světa.\n"
+"Zvětšete tyto, abyste „přiblížili“ detail fraktálu.\n"
+"Výchozí je pro svisle stlaÄený tvar, vhodný například\n"
+"pro ostrov, nastavte vÅ¡echna 3 Äísla stejnÄ› pro ryzí tvar."
#: src/settings_translation_file.cpp
msgid ""
@@ -1847,31 +2008,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr ""
+msgstr "2D šum, který definuje tvar/velikost horských útvarů."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "2D šum, který definuje tvar/velikost postupných hor."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "2D šum, který definuje tvar/velikost schodišťových hor."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
-msgstr ""
+msgstr "2D Å¡um, který definuje velikost/Äetnost horských masivů."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "2D Å¡um, který definuje velikost/Äetnost postupných hor."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr ""
+msgstr "2D Å¡um, který definuje velikost/Äetnost schodišťových horských útvarů."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "2D Å¡um, který umisÅ¥uje říÄní koryta a kanály."
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -1882,6 +2043,11 @@ msgid "3D mode"
msgstr "Režim 3D zobrazení"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Síla parallax occlusion"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "3D Å¡um urÄující obří jeskynní dutiny."
@@ -1894,24 +2060,30 @@ msgstr ""
"UrÄuje také strukturu horského terénu na létajících ostrovech."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "3D Å¡um urÄující strukturu stÄ›n kaňonů Å™ek."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D noise defining terrain."
-msgstr "3D Å¡um urÄující obří jeskynní dutiny."
+msgstr "3D Å¡um urÄující terén."
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
-msgstr ""
+msgstr "3D šum definující horské převisy, atp. Typicky malé odchylky."
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "3D Å¡um, který definuje poÄet žalářů na kusu mapy."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"3D support.\n"
"Currently supported:\n"
@@ -1930,7 +2102,10 @@ msgstr ""
"- anaglyph: azurové/purpurové barevné 3D.\n"
"- interlaced: pro polarizaci lichý/sudý řádek.\n"
"- topbottom: rozdÄ›lení obrazovky na horní a dolní Äást.\n"
-"- sidebyside: rozdÄ›lení obrazovky na levou a pravou Äást."
+"- sidebyside: rozdÄ›lení obrazovky na levou a pravou Äást.\n"
+"- crossview: Zkřížení oÄí 3d\n"
+"- pageflip: 3d se 4-násobným bufferem.\n"
+"Pozn.: Režim 'interlaced' vyžaduje podporu 'shaderů'."
#: src/settings_translation_file.cpp
msgid ""
@@ -1950,12 +2125,12 @@ msgid "A message to be displayed to all clients when the server shuts down."
msgstr "Zpráva, která se zobrazí všem klientům, když se server vypne."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ABM interval"
-msgstr "Interval ukládání mapy"
+msgstr "Interval Aktivní Blokové Modifikace (ABM)"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "Maximální poÄet emerge front"
#: src/settings_translation_file.cpp
@@ -1964,14 +2139,13 @@ msgstr "Zrychlení ve vzduchu"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr ""
+msgstr "GravitaÄní zrychlení, v blocích za vteÅ™inu za vteÅ™inu."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
msgstr "Active Block Modifiery"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Active block management interval"
msgstr "Interval pro Active Block Management"
@@ -2006,6 +2180,16 @@ msgstr ""
"například s 4k obrazovkami."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "PokroÄilé"
@@ -2019,11 +2203,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Altitude chill"
-msgstr "Výškové ochlazení"
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr "Vždy mít zapnuté létání a turbo"
@@ -2033,12 +2212,11 @@ msgstr "Gamma ambientní okluze"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "Množství zpráv, které může hrÃ¡Ä odeslat za 10 vteÅ™in."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Amplifies the valleys."
-msgstr "Zesílí údolí"
+msgstr "Zvýrazní údolí."
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
@@ -2055,11 +2233,11 @@ msgstr "Zveřejnit server"
#: src/settings_translation_file.cpp
msgid "Append item name"
-msgstr ""
+msgstr "Dodatkový název položky"
#: src/settings_translation_file.cpp
msgid "Append item name to tooltip."
-msgstr ""
+msgstr "Dodatkový název položky v popisku."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
@@ -2067,13 +2245,15 @@ msgstr "Použít stromový šum"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
-msgstr ""
+msgstr "SetrvaÄnost ruky"
#: src/settings_translation_file.cpp
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
+"SetrvaÄnost ruky, vytváří vÄ›tší dojem opravdového pohybu\n"
+"ruky, výkyvem/pohybem kamery."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
@@ -2111,7 +2291,7 @@ msgstr "Vpřed"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "Automaticky vyskoÄit na pÅ™ekážky vysoké 1 blok."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2124,7 +2304,7 @@ msgstr "Ukládat velikost obr."
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "Režim automatického přiblížení"
#: src/settings_translation_file.cpp
msgid "Backward key"
@@ -2179,7 +2359,7 @@ msgstr "Bitová hloubka (bity na pixel) v celoobrazovkovém režimu."
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
-msgstr ""
+msgstr "Optimalizace vzdálenosti vysílání bloku"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2215,8 +2395,8 @@ msgstr "Bump mapování"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2295,12 +2475,22 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Velikost písma"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Klávesa chatu"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Úroveň minimální důležitosti ladících informací"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr ""
+msgstr "Omezení poÄtu zpráv v Chatu"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2314,7 +2504,7 @@ msgstr "Práh pouštního šumu"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr ""
+msgstr "Omezení velikosti jedné zprávy v Chatu"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
@@ -2359,7 +2549,7 @@ msgstr "Lokální mody"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
-msgstr ""
+msgstr "Omezení vyhledávání bloků z klientské aplikace"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
@@ -2477,7 +2667,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
-msgstr ""
+msgstr "Ovládá rychlost potápění v kapalinách."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2580,6 +2770,11 @@ msgid "Default report format"
msgstr "Výchozí formát reportů"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Výchozí hra"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2939,6 +3134,16 @@ msgstr ""
"je-li nastaveno na vyšší Äíslo než 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS v menu pauzy"
@@ -3062,6 +3267,41 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "Koncentrace hor na létajících ostrovech"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "Výška hor na létajících ostrovech"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "Výška hor na létajících ostrovech"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Základní šum létajících ostrovů"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "Koncentrace hor na létajících ostrovech"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Základní šum létajících ostrovů"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Výška létajících ostrovů"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Klávesa létání"
@@ -3116,6 +3356,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4690,14 +4936,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4762,6 +5000,11 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "Maximální poÄet emerge front"
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Skript hlavní nabídky"
@@ -4848,10 +5091,19 @@ msgstr ""
"Příznaky zaÄínající na 'no' slouží k zakázání možnosti."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
+"Globální parametry generování mapy.\n"
+"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n"
+"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n"
+"všechny dekorace.\n"
+"Neuvedené příznaky zůstávají ve výchozím stavu.\n"
+"Příznaky zaÄínající na 'no' slouží k zakázání možnosti."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -4946,10 +5198,6 @@ msgid "Mapgen debug"
msgstr "Ladění generátoru mapy"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Jméno generátoru mapy"
@@ -5017,13 +5265,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5108,6 +5356,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Minimapa"
@@ -5216,7 +5468,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5268,9 +5520,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5348,10 +5597,6 @@ msgid "Parallax occlusion scale"
msgstr "Škála parallax occlusion"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Síla parallax occlusion"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5361,7 +5606,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5395,6 +5642,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Fyzika"
@@ -5465,6 +5720,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5949,6 +6216,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5971,6 +6245,11 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "Síla vygenerovaných normálových map."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Síla vygenerovaných normálových map."
@@ -5982,15 +6261,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6108,7 +6397,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6263,6 +6552,11 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Maximální poÄet emerge front"
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6593,6 +6887,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6653,22 +6955,6 @@ msgstr "cURL timeout"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Neprůhlednost stínu písma (od 0 do 255)."
-#~ msgid "Floatland mountain height"
-#~ msgstr "Výška hor na létajících ostrovech"
-
-#, fuzzy
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Koncentrace hor na létajících ostrovech"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Koncentrace hor na létajících ostrovech"
-
-#~ msgid "Floatland level"
-#~ msgstr "Výška létajících ostrovů"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Základní šum létajících ostrovů"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Šum základní výšky létajících ostrovů"
@@ -6704,3 +6990,12 @@ msgstr "cURL timeout"
#~ "Upraví gamma kódování svÄ›telných tabulek. Vyšší Äísla znamenají svÄ›tlejší "
#~ "hodnoty.\n"
#~ "Toto nastavení ovlivňuje pouze klienta a serverem není použito."
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Stahuji a instaluji $1, prosím Äekejte..."
+
+#~ msgid "Back"
+#~ msgstr "Zpět"
+
+#~ msgid "Ok"
+#~ msgstr "OK"
diff --git a/po/da/minetest.po b/po/da/minetest.po
index 2013abeec..931e3dbbf 100644
--- a/po/da/minetest.po
+++ b/po/da/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Danish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-11-10 15:04+0000\n"
-"Last-Translator: Krock <mk939@ymail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\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/"
"da/>\n"
"Language: da\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 3.10-dev\n"
+"X-Generator: Weblate 4.0-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr "Genopstå"
msgid "You died"
msgstr "Du døde"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -36,10 +40,6 @@ msgid "Main menu"
msgstr "Hovedmenu"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Ok"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Forbind igen"
@@ -116,6 +116,10 @@ msgstr ""
"[a-z0-9_] er tilladte."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
@@ -165,16 +169,17 @@ msgid "All packages"
msgstr "Alle pakker"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Tilbage"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Tilbage til hovedmenuen"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Henter og installerer $1, vent venligst..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "Indlæser..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -219,15 +224,58 @@ msgstr "Afinstaller"
msgid "Update"
msgstr "Opdater"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "En verden med navnet »$1« findes allerede"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Altitude chill"
+msgstr "Højdekulde"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Højdekulde"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Biom støj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Biom støj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Hule støj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Oktaver"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Skab"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Gentagelser"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Hent et spil, såsom Minetest Game fra minetest.net"
@@ -235,25 +283,151 @@ msgstr "Hent et spil, såsom Minetest Game fra minetest.net"
msgid "Download one from minetest.net"
msgstr "Hent en fra minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Ridge støj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "Svævelandsniveau"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Spil"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "Luftfugtighedsstøj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Mapgen"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Flag for Mapgen"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Mapgen v5 særlige flag"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Intet spil valgt"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Flodstørrelse"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Seed"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "Terræn base støj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Floddybde"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Advarsel: Den minimale udvikings test er kun lavet for udviklerne."
#: builtin/mainmenu/dlg_create_world.lua
@@ -409,14 +583,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z spredning"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "Absolut værdi"
+#. ~ "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 "Standard"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -561,6 +746,10 @@ msgid "Host Server"
msgstr "Host Server"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Navn/kodeord"
@@ -630,6 +819,7 @@ msgstr "Navn/adgangskode"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Spiller mod spiller aktiveret"
@@ -882,9 +1072,17 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "Angivne sti til verdenen findes ikke: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr "yes"
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -918,6 +1116,7 @@ msgstr "- Port: "
msgid "- Public: "
msgstr "- Offentlig: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- Spiller mod spiller (PvP): "
@@ -1233,6 +1432,14 @@ msgid "Sound muted"
msgstr "Lydniveau"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Sound unmuted"
msgstr "Lydniveau"
@@ -1265,7 +1472,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "ok"
@@ -1388,6 +1595,7 @@ msgstr "Venstre Skift"
msgid "Left Windows"
msgstr "Venstre meta"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menu"
@@ -1480,6 +1688,7 @@ msgstr "Pause"
msgid "Play"
msgstr "Spil"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Udskriv"
@@ -1516,6 +1725,7 @@ msgstr "Højre meta"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Vælg"
@@ -1763,10 +1973,15 @@ msgstr "Lydløs"
msgid "Sound Volume: "
msgstr "Lydstyrke: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr " "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "da"
@@ -1857,6 +2072,10 @@ msgid "3D mode"
msgstr "3D-tilstand"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "3D-støj, der definerer kæmpe grotter."
@@ -1869,6 +2088,14 @@ msgstr ""
"Definerer også svævelandsbjergterrænstrukturen."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "3D-støj, der definerer flodkløftvægstrukturen."
@@ -1931,7 +2158,8 @@ msgid "ABM interval"
msgstr "Interval for kortlagring"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "Absolut begrænsning af fremkomstkøer"
#: src/settings_translation_file.cpp
@@ -1982,6 +2210,16 @@ msgstr ""
"4k-skærme."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avanceret"
@@ -1995,11 +2233,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Altitude chill"
-msgstr "Højdekulde"
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr "Flyv altid og hurtigt"
@@ -2181,8 +2414,8 @@ msgstr "Bumpmapping"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2267,10 +2500,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Skriftstørrelse"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Snakketast"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Logniveau for fejlsøgning"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2554,6 +2797,11 @@ msgid "Default report format"
msgstr "Standardformat for rapport"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Standard spil"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2905,6 +3153,16 @@ msgstr ""
"når angivet til et højere nummer end 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS i pausemenu"
@@ -3033,6 +3291,39 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "Svævelandsniveau"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Svævelandsniveau"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "Svævelandsgrundhøjdestøj"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Svævelandsgrundhøjdestøj"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Svævelandsniveau"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Flyvetast"
@@ -3087,6 +3378,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4754,14 +5051,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Begrænsning af fremkomsten af forespørgsler på disk"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Begrænsning af fremkomsten af køer at oprette"
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4834,6 +5123,11 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "Absolut begrænsning af fremkomstkøer"
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Hovedmenuskript"
@@ -4919,10 +5213,17 @@ msgstr ""
"Flag starter med \"nej\" er brugt udtrykkeligt deaktivere dem."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
+"Kortoprettelsesattributter specifikke for Mapgen flat.\n"
+"Undtagelsesvis kan søer og bakker tilføjes til den flade verden.\n"
+"Flag som ikke er specificeret i flag-strengen ændres ikke fra standarden.\n"
+"Flag der starter med »no« bruges til eksplicit at deaktivere dem."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -5024,10 +5325,6 @@ msgid "Mapgen debug"
msgstr "Fejlsøgning for Mapgen"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Flag for Mapgen"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Mapgen-navn"
@@ -5095,13 +5392,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5187,6 +5484,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Minikort"
@@ -5296,7 +5597,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5348,9 +5649,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5428,10 +5726,6 @@ msgid "Parallax occlusion scale"
msgstr "Parallax-okklusion"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5441,7 +5735,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5475,6 +5771,15 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Begrænsning af fremkomsten af køer at oprette"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Fysik"
@@ -5544,6 +5849,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -6035,6 +6352,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6058,6 +6382,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -6069,15 +6397,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6199,7 +6537,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6354,6 +6692,11 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Absolut begrænsning af fremkomstkøer"
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6685,6 +7028,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6739,13 +7090,6 @@ msgstr "cURL-tidsudløb"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Alfa for skrifttypeskygge (uigennemsigtighed, mellem 0 og 255)."
-#, fuzzy
-#~ msgid "Floatland level"
-#~ msgstr "Svævelandsniveau"
-
-#~ msgid "Floatland base height noise"
-#~ msgstr "Svævelandsgrundhøjdestøj"
-
#~ msgid "Enables filmic tone mapping"
#~ msgstr "Aktiverer filmisk toneoversættelse"
@@ -6767,3 +7111,15 @@ msgstr "cURL-tidsudløb"
#~ msgstr ""
#~ "Justér gammakodningen for lystabellerne. Et større tal betyder lysere.\n"
#~ "Denne indstilling gælder kun for klienten og ignoreres af serveren."
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Begrænsning af fremkomsten af forespørgsler på disk"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Henter og installerer $1, vent venligst..."
+
+#~ msgid "Back"
+#~ msgstr "Tilbage"
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
diff --git a/po/de/minetest.po b/po/de/minetest.po
index 162fcbbbf..be63088d2 100644
--- a/po/de/minetest.po
+++ b/po/de/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: German (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-12-26 12:21+0000\n"
-"Last-Translator: Stas Kies <stask85@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-15 22:41+0000\n"
+"Last-Translator: Wuzzy <almikes@aol.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/minetest/minetest/"
"de/>\n"
"Language: de\n"
@@ -12,7 +12,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.10\n"
+"X-Generator: Weblate 4.1\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -20,7 +20,11 @@ msgstr "Wiederbeleben"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
-msgstr "Du bist gestorben!"
+msgstr "Sie sind gestorben"
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "OK"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "Hauptmenü"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "OK"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Erneut verbinden"
@@ -115,6 +115,10 @@ msgstr ""
"die folgenden Zeichen sind erlaubt: [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Mehr Mods finden"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
@@ -132,7 +136,7 @@ msgstr "Keine harten Abhängigkeiten"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "Keine Modpack-Beschreibung verfügbar."
+msgstr "Keine Beschreibung für das Modpack verfügbar."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
@@ -160,16 +164,16 @@ msgid "All packages"
msgstr "Alle Pakete"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Rücktaste"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Zurück zum Hauptmenü"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "$1 wird heruntergeladen und installiert, bitte warten …"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "ContentDB ist nicht verfügbar, wenn Minetest ohne cURL kompiliert wurde"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "Herunterladen …"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -214,15 +218,51 @@ msgstr "Deinstallieren"
msgid "Update"
msgstr "Aktualisieren"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Ansehen"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr "Eine Welt Namens „$1“ existiert bereits"
+msgstr "Eine Welt namens „$1“ existiert bereits"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "Zusätzliches Gelände"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Höhenabkühlung"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "Höhenabtrocknung"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Biomübergänge"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Biome"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Hohlräume"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "Höhlen"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Erstellen"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "Dekorationen"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Laden Sie sich ein Spiel (wie Minetest Game) von minetest.net herunter"
@@ -230,26 +270,149 @@ msgstr "Laden Sie sich ein Spiel (wie Minetest Game) von minetest.net herunter"
msgid "Download one from minetest.net"
msgstr "Spiele können von minetest.net heruntergeladen werden"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "Verliese"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "Flaches Gelände"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Schwebende Landmassen im Himmel"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "Schwebeländer (experimentell)"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Spiel"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "Nicht-fraktales Gelände erzeugen: Ozeane und Untergrund"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Hügel"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Feuchte Flüsse"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Erhöht die Luftfeuchte um Flüsse"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+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 "
+"ausgetrocknete Flüsse"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Kartengenerator"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Kartengenerator-Flags"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Kartengeneratorspezifische Flags"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "Berge"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "Schlammfließen"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Netzwerk aus Tunneln und Höhlen"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Kein Spiel ausgewählt"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Reduziert Hitze mit der Höhe"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Reduziert Luftfeuchte mit der Höhe"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Flüsse"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Flüsse am Meeresspiegel"
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Seed"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
-msgstr "Warnung: Die minimale Testversion ist für Entwickler gedacht."
+msgid "Smooth transition between biomes"
+msgstr "Weicher Übergang zwischen Biomen"
+
+#: builtin/mainmenu/dlg_create_world.lua
+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)"
+
+#: 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"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Gemäßigt, Wüste"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Gemäßigt, Wüste, Dschungel"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "Gemäßigt, Wüste, Dschungel, Tundra, Taiga"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "Geländeoberflächenerosion"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "Bäume und Dschungelgras"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Flusstiefe variieren"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "Sehr große Hohlräume tief im Untergrund"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr "Achtung: Der Development Test ist für Entwickler gedacht."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -401,14 +564,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z-Ausbreitung"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "Absolutwert"
+#. ~ "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 "Standardwerte"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "weich (eased)"
@@ -470,7 +644,7 @@ msgstr "Online-Inhalte durchsuchen"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr "Inhalt"
+msgstr "Inhalte"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
@@ -553,6 +727,10 @@ msgid "Host Server"
msgstr "Server hosten"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "Spiele von ContentDB installieren"
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Name/Passwort"
@@ -620,6 +798,7 @@ msgstr "Name / Passwort"
msgid "Ping"
msgstr "Latenz"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Spielerkampf aktiviert"
@@ -782,7 +961,7 @@ msgstr "Wehende Blätter"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
-msgstr "Wasserwellen"
+msgstr "Flüssigkeitswellen"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
@@ -864,6 +1043,14 @@ msgstr "Fehler beim öffnen der ausgewählten Passwort-Datei: "
msgid "Provided world path doesn't exist: "
msgstr "Angegebener Weltpfad existiert nicht: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -900,6 +1087,7 @@ msgstr "- Port: "
msgid "- Public: "
msgstr "- Öffentlich: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- Spielerkampf: "
@@ -973,8 +1161,8 @@ msgstr ""
"- %s: Nach rechts\n"
"- %s: Springen/klettern\n"
"- %s: Kriechen/runter\n"
-"- %s: Gegenstand wegwerfen\n"
-"- %s: Inventar\n"
+"- %s: Gegenstand wegwerfen\n"
+"- %s: Inventar\n"
"- Maus: Drehen/Umschauen\n"
"- Maus links: Graben/Schlagen\n"
"- Maus rechts: Bauen/Benutzen\n"
@@ -995,7 +1183,7 @@ msgstr "Debug-Infos und Profiler-Graph verborgen"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr "Debug-Info angezeigt"
+msgstr "Debug-Infos angezeigt"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
@@ -1198,6 +1386,14 @@ msgid "Sound muted"
msgstr "Ton verstummt"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "Tonsystem ist deaktiviert"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "Tonsystem ist in diesem Build nicht unterstützt"
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Ton nicht mehr verstummt"
@@ -1229,7 +1425,7 @@ msgstr "Drahtmodell angezeigt"
msgid "Zoom currently disabled by game or mod"
msgstr "Zoom ist momentan von Spiel oder Mod deaktiviert"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "OK"
@@ -1350,6 +1546,7 @@ msgstr "Umsch. links"
msgid "Left Windows"
msgstr "Win. links"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menü"
@@ -1442,6 +1639,7 @@ msgstr "Pause"
msgid "Play"
msgstr "Spielen"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Druck"
@@ -1478,6 +1676,7 @@ msgstr "Win. rechts"
msgid "Scroll Lock"
msgstr "Rollen"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Auswählen"
@@ -1721,10 +1920,15 @@ msgstr "Stumm"
msgid "Sound Volume: "
msgstr "Tonlautstärke: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Eingabe "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "de"
@@ -1750,7 +1954,6 @@ msgstr ""
"drücken, wenn er sich außerhalb des Hauptkreises befindet."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1767,7 +1970,8 @@ msgstr ""
"um es zu ermöglichen, in einen gewünschten Punkt „hereinzuoomen“,\n"
"indem man „scale“ erhöht.\n"
"Die Standardeinstellung ist brauchbar für Mandelbrotmengen mit\n"
-"Standardparametern.\n"
+"Standardparametern, sie könnte jedoch Anpassungen für andere\n"
+"Situationen benötigen.\n"
"Die Reichweite liegt grob zwischen -2 und 2. Mit „scale“ multiplizieren,\n"
"um einen Versatz in Blöcken zu erhalten."
@@ -1838,6 +2042,10 @@ msgid "3D mode"
msgstr "3-Dimensionaler-Modus"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr "3D-Modus-Parallaxstärke"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "3-D-Rauschen, welches riesige Hohlräume definiert."
@@ -1851,6 +2059,19 @@ msgstr ""
"der Berge in den Schwebeländern."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+"3D-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"
+"einen Wert zwischen etwa -2.0 bis 2.0 hat."
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
"3-D-Rauschen, welches die Form von Erdwällen von Flusscanyons definiert."
@@ -1922,8 +2143,8 @@ msgid "ABM interval"
msgstr "ABM-Intervall"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
-msgstr "Absolute Grenze der Erzeugungswarteschlangen"
+msgid "Absolute limit of queued blocks to emerge"
+msgstr "Absolute Grenze der zu erzeugenden Kartenblöcke in Warteschlange"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -1970,6 +2191,22 @@ msgid ""
msgstr "DPI des Bildschirms (nicht für X11/Android) z.B. für 4K-Bildschirme."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+"Passt die Dichte der Schwebelandebene an.\n"
+"Wert erhöhen, um die Dichte zu erhöhen. Kann positiv oder negativ sein.\n"
+"Wert = 0.0: 50% des Volumens sind Schwebeländer.\n"
+"Wert = 2.0 (kann abhängig von „mgv7_np_floatland“ höher sein, solle man\n"
+"immer testen, um sicher zu sein) erzeugt eine durchgehende\n"
+"Schwebelandebene."
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Erweitert"
@@ -1981,10 +2218,13 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Höhenabkühlung"
+"Passt die Lichtkurve an, indem eine sog. Gammakorrektur\n"
+"an ihr vorgenommen wird. Höhere Werte können mittlere\n"
+"und niedrigere Lichtstufen heller machen. Der Wert „1.0“\n"
+"lässt die Lichtkurve unverändert.\n"
+"Das hat nur einen merkliche Wirkung auf das Tageslicht und\n"
+"dem künstlichem Licht, es hat sehr geringe Auswirkungen\n"
+"auf natürliches Licht bei Nacht."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2141,24 +2381,20 @@ msgid "Block send optimize distance"
msgstr "Distanz für Sendeoptimierungen von Kartenblöcken"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Pfad der Festbreitenschrift"
+msgstr "Pfad der Fett- und Kursivschrift"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Pfad der Festbreitenschrift"
+msgstr "Pfad der fetten und kursiven Festbreitenschrift"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Schriftpfad"
+msgstr "Pfad der Fettschrift"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Pfad der Festbreitenschrift"
+msgstr "Pfad der fetten Festbreitenschrift"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2174,14 +2410,15 @@ msgstr "Bumpmapping"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
"Distanz von der Kamera zur vorderen Clippingebene in Blöcken, zwischen 0 und "
-"0.5.\n"
-"Die meisten Benutzer müssen dies nicht ändern.\n"
+"0.25.\n"
+"Funktioniert nur auf GLES-Plattformen. Die meisten Benutzer müssen dies "
+"nicht ändern.\n"
"Eine Erhöhung dieses Wertes kann Artefakte auf schwächeren GPUs reduzieren.\n"
"0.1 = Standard, 0.25 = Guter Wert für schwächere Tablets."
@@ -2246,6 +2483,8 @@ msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Mittelpunkt des Lichtkurvenverstärkungsintervalls.\n"
+"Wobei 0.0 die minimale Lichtstufe und 1.0 die höchste Lichtstufe ist."
#: src/settings_translation_file.cpp
msgid ""
@@ -2264,10 +2503,18 @@ msgstr ""
"für kleinere Bildschirme nötig sein."
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr "Chat-Schriftgröße"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Chattaste"
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr "Chatprotokollausgabelevel"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "Max. Anzahl Chatnachrichten"
@@ -2472,6 +2719,9 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Passt die Breite von Tunneln an. Ein kleinerer Wert erzeugt breitere\n"
+"Tunnel. Ein Wert >= 10.0 deaktiviert die Erzeugung von Tunneln vollständig\n"
+"und verhindert rechenintensive Rauschberechnungen."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2522,7 +2772,6 @@ msgid "Dec. volume key"
msgstr "Leiser-Taste"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Decrease this to increase liquid resistance to movement."
msgstr ""
"Dies verringern, um den Bewegungswiderstand in Flüssigkeiten zu erhöhen."
@@ -2561,6 +2810,10 @@ msgid "Default report format"
msgstr "Standard-Berichtsformat"
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr "Standardstapelgröße"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2736,6 +2989,8 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"IPv6-Unterstützung aktivieren (sowohl für Client als auch Server).\n"
+"Benötigt, damit IPv6-Verbindungen funktionieren."
#: src/settings_translation_file.cpp
msgid ""
@@ -2827,6 +3082,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Aktiviert Vertex Buffer Objects.\n"
+"Dies sollte die Grafikperformanz beträchtlich verbessern."
#: src/settings_translation_file.cpp
msgid ""
@@ -2840,14 +3097,14 @@ msgstr ""
"1.0 für den Standardwert, 2.0 für doppelte Geschwindigkeit."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
"Server als IPv6 laufen lassen (oder nicht).\n"
-"Wird ignoriert, falls bind_address gesetzt ist."
+"Wird ignoriert, falls bind_address gesetzt ist.\n"
+"Dafür muss außerdem enable_ipv6 aktiviert sein."
#: src/settings_translation_file.cpp
msgid ""
@@ -2856,6 +3113,10 @@ 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"
+"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."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -2907,6 +3168,10 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Aktiviert das Tonsystem.\n"
+"Falls deaktiviert, wird es alle Geräusche überall abschalten und\n"
+"die Tonsteuerung im Spiel wird funktionslos sein.\n"
+"Die Änderung dieser Einstellung benötigt einen Neustart."
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -2925,6 +3190,23 @@ msgstr ""
"Blöcken verursachen, wenn auf einen Wert größer 0 gesetzt."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+"Exponent der Schwebelandzuspitzung. Passt das Zuspitzungverhalten an.\n"
+"Wert = 1.0 erzeugt eine einheitliche lineare Zuspitzung.\n"
+"Werte > 1.0 erzeugen eine weiche Zuspitzung, die für die standardmäßig\n"
+"getrennten Schwebeländer geeignet sind.\n"
+"Werte < 1.0 (z.B. 0.25) erzeugen eine bestimmtere Oberflächenhöhe mit\n"
+"flacheren Tiefländern; dies ist für eine durchgehende Schwebelandebene\n"
+"geeignet."
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "Bildwiederholrate im Pausenmenü"
@@ -2941,9 +3223,8 @@ msgid "Fall bobbing factor"
msgstr "Kameraschütteln beim Sturz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Ersatzschrift"
+msgstr "Ersatzschriftpfad"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -3046,6 +3327,34 @@ msgid "Fixed virtual joystick"
msgstr "Fester virtueller Joystick"
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr "Schwebelanddichte"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr "Schwebeland: Max. Y"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr "Schwebeland: Min. Y"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr "Schwebelandrauschen"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr "Schwebelandzuspitzexponent"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr "Schwebelandzuspitzdistanz"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr "Schwebelandwasserhöhe"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Flugtaste"
@@ -3067,11 +3376,11 @@ msgstr "Taste für Nebel umschalten"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Schrift standardmäßig fett"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Schrift standardmäßig kursiv"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3087,15 +3396,24 @@ msgstr "Schriftgröße"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "Schriftgröße der Standardschrift in Punkt (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "Schriftgröße der Ersatzschrift in Punkt (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "Schriftgröße der Festbreitenschrift in Punkt (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 ""
+"Schriftgröße für den Chattext (für neue Chatnachrichten) und\n"
+"der Chateingabe in Punkt (pt).\n"
+"Der Wert 0 wird die Standardschriftgröße benutzen."
#: src/settings_translation_file.cpp
msgid ""
@@ -3248,18 +3566,20 @@ msgstr ""
"wird es alle Dekorationen beinflussen."
#: 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 "Steigung der Lichtkurve an der maximalen Lichtstufe."
+msgstr ""
+"Steigung der Lichtkurve an der maximalen Lichtstufe.\n"
+"Regelt den Kontrast der höchsten Lichtstufen."
#: 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 "Steigung der Lichtkurve an der minimalen Lichtstufe."
+msgstr ""
+"Steigung der Lichtkurve an der minimalen Lichtstufe.\n"
+"Regelt den Kontrast der niedrigsten Lichtstufen."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3290,7 +3610,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"
"- legacy: (try to) mimic old behaviour (default for release).\n"
@@ -3542,6 +3861,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Wie schnell sich Flüssigkeitswellen bewegen werden. Höher = schneller.\n"
+"Falls negativ, werden sich die Wellen rückwärts bewegen.\n"
+"Hierfür müssen Flüssigkeitswellen aktiviert sein."
#: src/settings_translation_file.cpp
msgid ""
@@ -3715,8 +4037,8 @@ msgstr "Spiel"
#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
-"Undurchsichtigkeit des Hintergrundes der Chat-Konsole im Spiel\n"
-"(Wert zwischen 0 und 255)."
+"Undurchsichtigkeit des Hintergrundes der Chat-Konsole im Spiel (Wert "
+"zwischen 0 und 255)."
#: src/settings_translation_file.cpp
msgid "In-game chat console background color (R,G,B)."
@@ -3726,8 +4048,7 @@ msgstr "Hintergrundfarbe (R,G,B) der Chat-Konsole im Spiel."
msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
msgstr ""
"Chatkonsolenhöhe im Spiel, zwischen 0.1 (10%) und 1.0 (100%).\n"
-"(Beachten Sie die englische Notation mit Punkt als\n"
-"Dezimaltrennzeichen.)"
+"(Beachten Sie die englische Notation mit Punkt als Dezimaltrennzeichen.)"
#: src/settings_translation_file.cpp
msgid "Inc. volume key"
@@ -3806,14 +4127,12 @@ msgid "Invert vertical mouse movement."
msgstr "Kehrt die vertikale Mausbewegung um."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Pfad der Festbreitenschrift"
+msgstr "Pfad der Kursivschrift"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Pfad der Festbreitenschrift"
+msgstr "Pfad der kursiven Festbreitenschrift"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4647,15 +4966,15 @@ msgstr "Tiefe für große Höhlen"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Max. Anzahl großer Höhlen"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Min. Anzahl großer Höhlen"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Anteil gefluteter großer Höhlen"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4693,13 +5012,12 @@ msgstr ""
"üblicherweise aktualisiert werden."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"Auf „wahr“ setzen, um sich im Wind wehende Blätter zu aktivieren.\n"
-"Dafür müssen Shader aktiviert sein."
+"Länge von Flüssigkeitswellen.\n"
+"Dafür müssen Flüssigkeitswellen aktiviert sein."
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
@@ -4724,8 +5042,8 @@ msgid ""
"- info\n"
"- verbose"
msgstr ""
-"Bis zu welcher Dringlichkeitsstufe Protokollmeldungen\n"
-"in debug.txt geschrieben werden sollen:\n"
+"Bis zu welcher Stufe Protokollmeldungen in debug.txt geschrieben werden "
+"sollen:\n"
"- <nichts> (keine Protokollierung)\n"
"- none (Meldungen ohne Einstufung)\n"
"- error (Fehler)\n"
@@ -4735,42 +5053,28 @@ msgstr ""
"- verbose (Ausführlich)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost"
-msgstr "Lichtkurven-Mittenverstärkung"
+msgstr "Lichtkurvenverstärkung"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost center"
-msgstr "Lichtkurven-Mittenverstärkung Mitte"
+msgstr "Lichtkurvenverstärkung: Mitte"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost spread"
-msgstr "Lichtkurven-Mittenverstärkungs-Ausbreitung"
+msgstr "Lichtkurvenverstärkung: Ausbreitung"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve gamma"
-msgstr "Lichtkurven-Mittenverstärkung"
+msgstr "Lichtkurven-Gammawert"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve high gradient"
-msgstr "Lichtkurven-Mittenverstärkung"
+msgstr "Lichtkurve: Hoher Gradient"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve low gradient"
-msgstr "Lichtkurven-Mittenverstärkung Mitte"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Erzeugungswarteschlangengrenze auf Festspeicher"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Limit der Erzeugungswarteschlangen"
+msgstr "Lichtkurve: Niedriger Gradient"
#: src/settings_translation_file.cpp
msgid ""
@@ -4849,6 +5153,10 @@ msgid "Lower Y limit of dungeons."
msgstr "Y-Untergrenze von Verliesen."
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr "Y-Untergrenze von Schwebeländern."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Hauptmenü-Skript"
@@ -4860,14 +5168,14 @@ msgstr "Hauptmenü-Stil"
msgid ""
"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
msgstr ""
-"Nebel- und Himmelsfarben von der Tageszeit (Sonnenaufgang/Sonnenuntergang)\n"
+"Nebel- und Himmelsfarben von der Tageszeit (Sonnenaufgang/Sonnenuntergang) "
"und Blickrichtung abhängig machen."
#: src/settings_translation_file.cpp
msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
msgstr ""
-"DirectX mit LuaJIT zusammenarbeiten lassen. Deaktivieren Sie dies,\n"
-"falls es Probleme verursacht."
+"DirectX mit LuaJIT zusammenarbeiten lassen. Deaktivieren Sie dies, falls es "
+"Probleme verursacht."
#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
@@ -4883,7 +5191,6 @@ msgstr ""
"Kartengenerierungsattribute speziell für den Carpathian-Kartengenerator."
#: 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."
@@ -4892,13 +5199,12 @@ msgstr ""
"Zu einer flachen Welt können gelegentliche Seen und Hügel hinzugefügt werden."
#: 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 ""
-"Kartengenerierungsattribute speziell für den flachen Kartengenerator.\n"
+"Kartengenerierungsattribute speziell für den Fraktale-Kartengenerator.\n"
"„terrain“ aktiviert die Erzeugung von nicht-fraktalem Gelände:\n"
"Ozean, Inseln und der Untergrund."
@@ -4938,10 +5244,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
"Kartengenerierungsattribute speziell für den Kartengenerator v7.\n"
-"„ridges“ aktiviert die Flüsse."
+"„ridgesâ€: Flüsse.\n"
+"„floatlands“: Schwebende Landmassen in der Atmosphäre.\n"
+"„caverns“: Gigantische Höhlen tief im Untergrund."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -5028,10 +5338,6 @@ msgid "Mapgen debug"
msgstr "Kartengenerator-Debugging"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Kartengenerator-Flags"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Kartengeneratorname"
@@ -5073,20 +5379,19 @@ msgstr "Maximale Breite der Schnellleiste"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Obergrenze der zufälligen Anzahl großer Höhlen je Mapchunk."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Obergrenze Anzahl der zufälligen Anzahl kleiner Höhlen je Mapchunk."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
-"Maximaler Flüssigkeitswiderstand. Regelt die Abbremsung beim Eintauchen in "
-"eine Flüssigkeit bei hoher Geschwindigkeit."
+"Maximaler Flüssigkeitswiderstand. Regelt die Abbremsung beim\n"
+"Eintauchen in eine Flüssigkeit bei hoher Geschwindigkeit."
#: src/settings_translation_file.cpp
msgid ""
@@ -5105,20 +5410,20 @@ msgstr "Maximale Anzahl der Kartenblöcke in der Ladewarteschlange."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
-"Maximale Anzahl der Kartenblöcke, die in die Erzeugungswarteschlage gesetzt "
-"werden.\n"
-"Feld frei lassen, um automatisch einen geeigneten Wert zu bestimmen."
+"Maximale Anzahl der Kartenblöcke, die in die Warteschlange für\n"
+"die Erzeugung eingereiht werden sollen.\n"
+"Diese Grenze wird für jeden Spieler einzeln erzwungen."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
-"Maximale Anzahl der Kartenblöcke, die in die Warteschlange zum Laden aus\n"
-"einer Datei gesetzt werden können.\n"
-"Feld frei lassen, um automatisch einen geeigneten Wert zu bestimmen."
+"Maximale Anzahl der Kartenblöcke, die in die Warteschlange zum Laden aus "
+"einer Datei eingereiht werden.\n"
+"Diese Grenze wird für jeden Spieler einzeln erzwungen."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5139,7 +5444,7 @@ msgid ""
"try reducing it, but don't reduce it to a number below double of targeted\n"
"client number."
msgstr ""
-"Maximale Anzahl der Pakete, die pro Sende-Schritt gesendet werden. Falls Sie "
+"Maximale Anzahl der Pakete, die pro Sendeschritt gesendet werden. Falls Sie "
"eine\n"
"langsame Verbindung haben, probieren Sie, diesen Wert zu reduzieren,\n"
"aber reduzieren Sie ihn nicht unter der doppelten Anzahl der Clients, die "
@@ -5223,6 +5528,10 @@ msgid "Method used to highlight selected object."
msgstr "Verwendete Methode, um ein ausgewähltes Objekt hervorzuheben."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr "Minimaler Level des Prokolls, die in den Chat geschrieben werden soll."
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Übersichtskarte"
@@ -5235,13 +5544,12 @@ msgid "Minimap scan height"
msgstr "Abtasthöhe der Übersichtskarte"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "3-D-Rauschen, welches die Anzahl der Verliese je Mapchunk festlegt."
+msgstr "Untergrenze der zufälligen Anzahl großer Höhlen je Mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Untergrenze der zufälligen Anzahl kleiner Höhlen je Mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
@@ -5301,8 +5609,8 @@ msgid ""
"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""
"Faktor für Kameraschütteln beim Sturz.\n"
-"Zum Beispiel: 0 für kein Schütteln, 1.0 für den Standardwert,\n"
-"2.0 für doppelte Geschwindigkeit."
+"Zum Beispiel: 0 für kein Schütteln, 1.0 für den Standardwert, 2.0 für "
+"doppelte Geschwindigkeit."
#: src/settings_translation_file.cpp
msgid "Mute key"
@@ -5340,12 +5648,11 @@ msgid ""
"Name of the server, to be displayed when players join and in the serverlist."
msgstr ""
"Name des Servers. Er wird in der Serverliste angezeigt und für frisch "
-"verbundene\n"
-"Spieler angezeigt."
+"verbundene Spieler angezeigt."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
-msgstr "Vordere Clippingebene"
+msgid "Near plane"
+msgstr "Vordere Ebene"
#: src/settings_translation_file.cpp
msgid "Network"
@@ -5357,8 +5664,7 @@ msgid ""
"This value will be overridden when starting from the main menu."
msgstr ""
"Netzwerkport (UDP), auf dem gelauscht werden soll.\n"
-"Dieser Wert wird überschrieben, wenn vom Hauptmenü\n"
-"aus gestartet wird."
+"Dieser Wert wird überschrieben, wenn vom Hauptmenü aus gestartet wird."
#: src/settings_translation_file.cpp
msgid "New users need to input this password."
@@ -5399,9 +5705,6 @@ msgstr "Anzahl der Erzeugerthreads"
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5413,18 +5716,14 @@ msgid ""
"'on_generated'. For many users the optimum setting may be '1'."
msgstr ""
"Anzahl der zu verwendeten Erzeugerthreads.\n"
-"ACHTUNG: Momentan gibt es mehrere Bugs, die Abstürze verursachen können,\n"
-"wenn „num_emerge_threads“ größer als 1 ist. Bis diese Warnung entfernt ist,\n"
-"wird es stark empfohlen, diesen Wert auf den Standardwert „1“ zu setzen.\n"
"Wert 0:\n"
-"Leerer Wert oder 0:\n"
"- Automatische Wahl. Die Anzahl der Erzeugerthreads wird\n"
"- „Anzahl der Prozessoren - 2“ sein, mit einer Untergrenze von 1.\n"
"Jeder andere Wert:\n"
"- Legt die Anzahl der Erzeugerthreads fest, mit einer Untergrenze von 1.\n"
"ACHTUNG: Das Erhöhen der Anzahl der Erzeugerthreads erhöht die\n"
"Geschwindigkeit des Engine-Kartengenerators, aber dies könnte die Spiel-\n"
-"performanz beeinträchtigen, da mit anderen Prozessen konkurriert wird,\n"
+"performanz beeinträchtigen, da mit anderen Prozessen konkurriert wird;\n"
"das ist besonders im Einzelspielermodus der Fall und/oder, wenn Lua-Code\n"
"in „on_generated“ ausgeführt wird.\n"
"Für viele Benutzer wird die optimale Einstellung wohl die „1“ sein."
@@ -5455,11 +5754,15 @@ msgstr "Undurchsichtige Flüssigkeiten"
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
msgstr ""
+"Undurchsichtigkeit (Alpha) des Schattens hinter der Standardschrift, "
+"zwischen 0 und 255."
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
msgstr ""
+"Undurchsichtigkeit (Alpha) des Schattens hinter der Ersatzschrift, zwischen "
+"0 und 255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5501,10 +5804,6 @@ msgid "Parallax occlusion scale"
msgstr "Parallax-Occlusion-Skalierung"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Parallax-Occlusion-Stärke"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5512,10 +5811,22 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Pfad der Ersatzschrift.\n"
+"Falls die „freetype“-Einstellung aktiviert ist: Muss eine TrueType-Schrift "
+"sein.\n"
+"Falls die „freetype“-Einstellung deaktiviert ist: Muss eine Bitmap- oder XML-"
+"Vektor-Schrift sein.\n"
+"Diese Schrift wird für bestimmte Sprachen benutzt, oder, wenn die "
+"Standardschrift nicht verfügbar ist."
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Pfad, in dem Bildschirmfotos abgespeichert werden."
+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 ""
+"Pfad, in dem Bildschirmfotos gespeichert werden sollen. Kann ein absoluter "
+"oder relativer Pfad sein.\n"
+"Dieses Verzeichnis wird erstellt, wenn es nicht bereits existiert."
#: src/settings_translation_file.cpp
msgid ""
@@ -5523,8 +5834,7 @@ msgid ""
"used."
msgstr ""
"Pfad zum Shader-Verzeichnis. Falls kein Pfad definiert ist, wird der "
-"Standard-\n"
-"pfad benutzt."
+"Standardpfad benutzt."
#: src/settings_translation_file.cpp
msgid "Path to texture directory. All textures are first searched from here."
@@ -5538,6 +5848,13 @@ 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 ""
+"Pfad der Standardschrift.\n"
+"Falls die „freetype“-Einstellung aktiviert ist: Muss eine TrueType-Schrift "
+"sein.\n"
+"Falls die „freetype“-Einstellung deaktiviert ist: Muss eine Bitmap- oder XML-"
+"Vektor-Schrift sein.\n"
+"Die Ersatzschrift wird benutzt, falls diese Schrift nicht geladen werden "
+"kann."
#: src/settings_translation_file.cpp
msgid ""
@@ -5546,12 +5863,26 @@ 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 ""
+"Pfad der Festbreitenschrift.\n"
+"Falls die „freetype“-Einstellung aktiviert ist: Muss eine TrueType-Schrift "
+"sein.\n"
+"Falls die „freetype“-Einstellung deaktiviert ist: Muss eine Bitmap- oder XML-"
+"Vektor-Schrift sein.\n"
+"Diese Schrift wird z.B. für die Konsole und die Profiler-Anzeige benutzt."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
msgstr "Pausieren bei Fensterfokusverlust"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr "Je-Spieler-Grenze der Ladewarteschlange für Kartenblöcke"
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Je-Spieler-Grenze der Kartenblöcke in Erzeugungswarteschlange"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Physik"
@@ -5589,23 +5920,22 @@ msgid ""
"Note that the port field in the main menu overrides this setting."
msgstr ""
"UDP-Port, zu dem sich verbunden werden soll.\n"
-"Beachten Sie, dass das Port-Feld im Hauptmenü diese Einstellung\n"
-"überschreibt."
+"Beachten Sie, dass das Port-Feld im Hauptmenü diese Einstellung überschreibt."
#: src/settings_translation_file.cpp
msgid ""
"Prevent digging and placing from repeating when holding the mouse buttons.\n"
"Enable this when you dig or place too often by accident."
msgstr ""
-"Verhindert wiederholtes Graben und Bauen, wenn man die\n"
-"Maustasten gedrückt hält. Aktivieren Sie dies, wenn sie zu oft aus Versehen\n"
-"graben oder bauen."
+"Verhindert wiederholtes Graben und Bauen, wenn man die Maustasten gedrückt "
+"hält.\n"
+"Aktivieren Sie dies, wenn sie zu oft aus Versehen graben oder bauen."
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
msgstr ""
-"Verhindert, dass Mods unsichere Funktionen, wie das Ausführen von\n"
-"Shell-Kommandos, benutzen können."
+"Verhindert, dass Mods unsichere Funktionen, wie das Ausführen von Shell-"
+"Kommandos, benutzen können."
#: src/settings_translation_file.cpp
msgid ""
@@ -5633,8 +5963,24 @@ msgid "Profiling"
msgstr "Profiling"
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "Prometheus listener address"
+msgstr "Prometheus-Lauschadresse"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
msgstr ""
+"Prometheus-Lauschadresse.\n"
+"Falls Minetest mit der ENABLE_PROMETEUS-Option kompiliert wurde,\n"
+"wird dies den Metriklauscher für Prometheus auf dieser Adresse aktivieren.\n"
+"Metriken können von http://127.0.0.1:30000/metrics abgegriffen werden."
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr "Anteil der großen Höhlen, die eine Flüssigkeit enthalten."
#: src/settings_translation_file.cpp
msgid ""
@@ -5643,8 +5989,8 @@ msgid ""
"corners."
msgstr ""
"Radius des Wolkenbereichs; In Einheiten von 64 Wolkenquadraten.\n"
-"Werte größer als 26 werden scharfe Schnittkanten an den Ecken des Wolken-\n"
-"bereichs erzeugen."
+"Werte größer als 26 werden scharfe Schnittkanten an den Ecken des "
+"Wolkenbereichs erzeugen."
#: src/settings_translation_file.cpp
msgid "Raises terrain to make valleys around the rivers."
@@ -5663,9 +6009,8 @@ msgid "Recent Chat Messages"
msgstr "Letzte Chatnachrichten"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Berichtspfad"
+msgstr "Normalschriftpfad"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5681,7 +6026,7 @@ msgid ""
"Use this to stop players from being able to use color in their messages"
msgstr ""
"Farbcodes aus eingehenden Chatnachrichten entfernen.\n"
-"Benutzen Sie dies, um Spieler daran zu hindern, Farbe in ihren Nachrichten\n"
+"Benutzen Sie dies, um Spieler daran zu hindern, Farbe in ihren Nachrichten "
"zu verwenden"
#: src/settings_translation_file.cpp
@@ -5880,7 +6225,6 @@ msgid "Selection box width"
msgstr "Auswahlboxbreite"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -5973,30 +6317,27 @@ msgstr ""
"gesendet wurde."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
-"Auf „wahr“ setzen, um sich im Wind wehende Blätter zu aktivieren.\n"
+"Auf „wahr“ setzen, um wehende Blätter zu aktivieren.\n"
"Dafür müssen Shader aktiviert sein."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"Auf „wahr“ setzen, um Wasserwogen zu aktivieren.\n"
+"Auf „wahr“ setzen, um Flüssigkeitswellen (wie bei Wasser) zu aktivieren.\n"
"Dafür müssen Shader aktiviert sein."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
-"Auf „wahr“ setzen, um sich im Wind wehende Pflanzen zu aktivieren.\n"
+"Auf „wahr“ setzen, um wehende Pflanzen zu aktivieren.\n"
"Dafür müssen Shader aktiviert sein."
#: src/settings_translation_file.cpp
@@ -6016,22 +6357,20 @@ msgstr ""
"Das funktioniert nur mit dem OpenGL-Grafik-Backend."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
-"Abstand des Schattens hinter der Schrift. Wenn 0, wird der Schatten nicht "
-"gezeichnet."
+"Versatz des Schattens hinter der Standardschrift (in Pixeln). Falls 0, wird "
+"der Schatten nicht gezeichnet."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
"be drawn."
msgstr ""
-"Abstand des Schattens hinter der Schrift. Wenn 0, wird der Schatten nicht "
-"gezeichnet."
+"Versatz des Schattens hinter der Ersatzschrift (in Pixeln). Falls 0, wird "
+"der Schatten nicht gezeichnet."
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6075,7 +6414,7 @@ msgid ""
msgstr ""
"Größe vom Kartenblock-Cache des Meshgenerators. Wird sie\n"
"erhöht, wird die Cache-Trefferrate erhöht, was die Anzahl der Daten,\n"
-"die vom Hauptthread kopiert werden, reduziert und somit das Stottern\n"
+"die vom Hauptthread kopiert werden, reduziert und somit das Stottern "
"reduziert."
#: src/settings_translation_file.cpp
@@ -6088,11 +6427,11 @@ msgstr "Hänge und Füllungen arbeiten zusammen, um die Höhen zu verändern."
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Max. Anzahl kleiner Höhlen"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Min. Anzahl kleiner Höhlen"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6112,8 +6451,8 @@ msgid ""
"Smooths camera when looking around. Also called look or mouse smoothing.\n"
"Useful for recording videos."
msgstr ""
-"Glättet Kamerabewegungen bei der Fortbewegung und beim Umsehen.\n"
-"Auch bekannt als „Look Smoothing“ oder „Mouse Smoothing“.\n"
+"Glättet Kamerabewegungen bei der Fortbewegung und beim Umsehen. Auch bekannt "
+"als „Look Smoothing“ oder „Mouse Smoothing“.\n"
"Nützlich zum Aufnehmen von Videos."
#: src/settings_translation_file.cpp
@@ -6163,14 +6502,25 @@ msgstr ""
"üblichen Weg heruntergeladen (UDP)."
#: 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 ""
+"Legt die Standardstapelgröße von Blöcken, Gegenständen und Werkzeugen fest.\n"
+"Beachten Sie, dass Mods oder Spiele eine explizite Stapelgröße für "
+"bestimmte\n"
+"(oder alle) Gegenstände setzen kann."
+
+#: src/settings_translation_file.cpp
msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
msgstr ""
-"Ausbreitung der Lichtkurven-Mittenverstärkung.\n"
-"Standardabweichung der Mittenverstärkungs-Gaußfunktion."
+"Ausbreitung des Lichtkurvenverstärkungsintervalls.\n"
+"Regelt die Breite des Intervalls, das verstärkt werden soll.\n"
+"Standardabweichung der Lichtkurvenverstärkungs-Gaußfunktion."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6189,6 +6539,10 @@ msgid "Step mountain spread noise"
msgstr "Stufenbergsausbreitungsrauschen"
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr "Stärke von 3D-Modus-Parallax."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Stärke der generierten Normalmaps."
@@ -6198,10 +6552,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Stärke von Parallax."
+"Stärke der Lichtkurvenverstärkung.\n"
+"Die 3 Verstärkungsparameter („boost“) definieren ein Intervall der\n"
+"Lichtkurve, die in ihrer Helligkeit verstärkt wird."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6212,6 +6565,32 @@ msgid "Strip color codes"
msgstr "Farbcodes entfernen"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+"Oberfläche mit optionalem Wasser, das auf einer durchgehenden\n"
+"Schwebelandebene platziert wird. Wasser ist standardmäßig deaktiviert\n"
+"und wird nur platziert, wenn dieser Wert auf einem Wert größer als\n"
+"„mgv7_floatland_ymax†minus „mgv7_floatland_taper†(dem Start\n"
+"der oberen Zuspitzung) gesetzt wurde.\n"
+"***ACHTUNG, MÖGLICHE GEFAHR FÜR WELTEN UND SERVERPERFORMANZ***:\n"
+"Wenn die Wasserplatzierung aktiviert wird, müssen die Schwebeländer\n"
+"konfiguriert und darauf abgeklopft werden, dass sie eine durchgehende\n"
+"Ebene sind, indem „mgv7_floatland_density“ auf 2.0 (oder einem anderen\n"
+"erforderlichen Wert, abhängig von „mgv7_np_floatland“) gesetzt wird,\n"
+"um ein serverbelastendes extremes Wasserfließen und einer gewaltigen\n"
+"Überflutung der Weltoberfläche unten zu vermeiden."
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "Synchrones SQLite"
@@ -6265,7 +6644,7 @@ msgstr "Geländepersistenzrauschen"
#: src/settings_translation_file.cpp
msgid "Texture path"
-msgstr "Texturpfad"
+msgstr "Texturenpfad"
#: src/settings_translation_file.cpp
msgid ""
@@ -6300,7 +6679,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The depth of dirt or other biome filler node."
-msgstr "Die Tiefe der Erde oder einem anderem Biomfüllerblock."
+msgstr "Die Tiefe der Erde oder eines anderen Biomfüllerblocks."
#: src/settings_translation_file.cpp
msgid ""
@@ -6326,6 +6705,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Die maximale Höhe der Oberfläche von Flüssigkeitswellen.\n"
+"4.0 = Wellenhöhe ist zwei Blöcke.\n"
+"0.0 = Wellen bewegen sich gar nicht.\n"
+"Standard ist 1.0 (1/2 Block).\n"
+"Dafür müssen Flüssigkeitswellen aktiviert sein."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6338,8 +6722,7 @@ msgid ""
msgstr ""
"Die Privilegien, die neue Benutzer automatisch erhalten.\n"
"Siehe /privs im Spiel für eine vollständige Liste aller möglichen "
-"Privilegien\n"
-"auf Ihrem Server und die Modkonfiguration."
+"Privilegien auf Ihrem Server und die Modkonfiguration."
#: src/settings_translation_file.cpp
msgid ""
@@ -6349,14 +6732,15 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
"Der Radius des Volumens von Blöcken um jeden Spieler, der dem\n"
"Active-Block-Zeugs unterliegt, in Kartenblöcken angegeben (16 Blöcke).\n"
"In aktiven Kartenblöcken werden Objekte geladen und ABMs ausgeführt.\n"
"Dies ist außerdem die minimale Reichweite, in der aktive Objekte (Mobs) "
"verwaltet\n"
-"werden. Dies sollte zusammen mit active_object_range konfiguriert werden."
+"werden. Dies sollte zusammen mit active_object_send_range_blocks\n"
+"konfiguriert werden."
#: src/settings_translation_file.cpp
msgid ""
@@ -6406,8 +6790,7 @@ msgstr ""
"Die Zeit (in Sekunden), die die Flüssigkeitswarteschlange über die "
"Verarbeitungs-\n"
"kapazität hinauswachsen darf, bevor versucht wird, ihre Größe durch das\n"
-"Verwerfen alter Warteschlangeneinträge zu reduzieren. Der Wert 0 "
-"deaktiviert\n"
+"Verwerfen alter Warteschlangeneinträge zu reduzieren. Der Wert 0 deaktiviert "
"diese Funktion."
#: src/settings_translation_file.cpp
@@ -6475,8 +6858,7 @@ msgstr "Zeitgeschwindigkeit"
#: src/settings_translation_file.cpp
msgid "Timeout for client to remove unused map data from memory."
msgstr ""
-"Zeit, nach der der Client nicht benutzte Kartendaten aus\n"
-"dem Speicher löscht."
+"Zeit, nach der der Client nicht benutzte Kartendaten aus dem Speicher löscht."
#: src/settings_translation_file.cpp
msgid ""
@@ -6511,7 +6893,6 @@ msgid "Trilinear filtering"
msgstr "Trilinearer Filter"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"True = 256\n"
"False = 128\n"
@@ -6519,7 +6900,7 @@ msgid ""
msgstr ""
"Wahr = 256\n"
"Falsch = 128\n"
-"Nützlich, um die Übersichtskarte performanter auf langsamen Maschinen zu "
+"Nützlich, um die Übersichtskarte ruckelfrei auf langsamen Maschinen zu "
"machen."
#: src/settings_translation_file.cpp
@@ -6545,7 +6926,7 @@ msgid ""
msgstr ""
"Unterabtastung ist ähnlich der Verwendung einer niedrigeren "
"Bildschirmauflösung, aber sie wird nur auf die Spielwelt angewandt, während "
-"das GUI intakt bleibt.\n"
+"die GUI intakt bleibt.\n"
"Dies sollte einen beträchtlichen Performanzschub auf Kosten einer weniger "
"detaillierten Grafik geben.\n"
"Hohe Werte führen zu einer weniger detaillierten Grafik."
@@ -6563,6 +6944,10 @@ msgid "Upper Y limit of dungeons."
msgstr "Y-Obergrenze von Verliesen."
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr "Y-Obergrenze von Schwebeländern."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Wolken blockförmig statt flach aussehen lassen."
@@ -6573,8 +6958,8 @@ msgstr "Eine Wolkenanimation für den Hintergrund im Hauptmenü benutzen."
#: src/settings_translation_file.cpp
msgid "Use anisotropic filtering when viewing at textures from an angle."
msgstr ""
-"Anisotrope Filterung verwenden, wenn auf Texturen aus einem\n"
-"gewissen Blickwinkel heraus geschaut wird."
+"Anisotrope Filterung verwenden, wenn auf Texturen aus einem gewissen "
+"Blickwinkel heraus geschaut wird."
#: src/settings_translation_file.cpp
msgid "Use bilinear filtering when scaling textures."
@@ -6586,9 +6971,9 @@ msgid ""
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
-"Map-Mapping benutzen, um Texturen zu skalieren. Könnte die Performanz\n"
-"leicht erhöhen, besonders, wenn ein hochauflösendes Texturenpaket\n"
-"benutzt wird.\n"
+"Mip-Mapping benutzen, um Texturen zu skalieren. Könnte die Performanz\n"
+"leicht erhöhen, besonders, wenn ein hochauflösendes Texturenpaket benutzt "
+"wird.\n"
"Eine gammakorrigierte Herunterskalierung wird nicht unterstützt."
#: src/settings_translation_file.cpp
@@ -6650,8 +7035,8 @@ msgid ""
"Defines the 'persistence' value for terrain_base and terrain_alt noises."
msgstr ""
"Variiert die Rauheit des Geländes.\n"
-"Definiert den „persistence“-Wert für\n"
-"„terrain_base“- und „terrain_alt“-Rauschen."
+"Definiert den „persistence“-Wert für „terrain_base“- und "
+"„terrain_alt“-Rauschen."
#: src/settings_translation_file.cpp
msgid "Varies steepness of cliffs."
@@ -6702,13 +7087,12 @@ msgid "Volume"
msgstr "Tonlautstärke"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
-"Aktiviert Parralax-Occlusion-Mapping.\n"
-"Hierfür müssen Shader aktiviert sein."
+"Lautstärke aller Töne.\n"
+"Dafür muss das Tonsystem aktiviert sein."
#: src/settings_translation_file.cpp
msgid ""
@@ -6755,24 +7139,20 @@ msgid "Waving leaves"
msgstr "Wehende Blätter"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
-msgstr "Wasserwellen"
+msgstr "Flüssigkeitswellen"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Wasserwellen: Wellenhöhe"
+msgstr "Flüssigkeitswellen: Wellenhöhe"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
-msgstr "Wasserwellen: Wellengeschwindigkeit"
+msgstr "Flüssigkeitswellen: Wellengeschwindigkeit"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "Wasserwellen: Wellenlänge"
+msgstr "Flüssigkeitswellen: Wellenlänge"
#: src/settings_translation_file.cpp
msgid "Waving plants"
@@ -6829,14 +7209,15 @@ msgstr ""
"welt-ausgerichtete automatische Texturenskalierung."
#: 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 ""
-"Ob FreeType-Schriften benutzt werden.\n"
-"Dafür muss Minetest mit FreeType-Unterstüzung kompiliert worden sein."
+"Ob FreeType-Schriften benutzt werden. Dafür muss FreeType-Unterstüzung "
+"einkompiliert worden sein.\n"
+"Falls deaktiviert, werden stattdessen Bitmap- und XML-Vektor-Schriften "
+"benutzt."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -6861,9 +7242,10 @@ msgid ""
"Whether to ask clients to reconnect after a (Lua) crash.\n"
"Set this to true if your server is set up to restart automatically."
msgstr ""
-"Ob Clients gefragt werden sollen, sich nach einem (Lua-)Absturz\n"
-"neu zu verbinden. Auf „wahr“ setzen, falls Ihr Server für automatische\n"
-"Neustarts eingerichtet ist."
+"Ob Clients gefragt werden sollen, sich nach einem (Lua-)Absturz neu zu "
+"verbinden.\n"
+"Auf „wahr“ setzen, falls Ihr Server für automatische Neustarts eingerichtet "
+"ist."
#: src/settings_translation_file.cpp
msgid "Whether to fog out the end of the visible area."
@@ -6876,13 +7258,18 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Ob die Töne stummgeschaltet werden. Man kann die Töne jederzeit "
+"stummschalten,\n"
+"außer, wenn das Tonsystem ausgeschaltet wurde (enable_sound=false).\n"
+"Im Spiel können die Töne mit der Stummtaste oder mit Hilfe des\n"
+"Pausemenüs stummgeschaltet werden."
#: src/settings_translation_file.cpp
msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
-"Ob der Client Debug-Informationen zeigen soll (hat die selbe Wirkung\n"
-"wie das Drücken von F5)."
+"Ob der Client Debug-Informationen zeigen soll (hat die selbe Wirkung wie das "
+"Drücken von F5)."
#: src/settings_translation_file.cpp
msgid "Width component of the initial window size."
@@ -6956,6 +7343,21 @@ msgid "Y-distance over which caverns expand to full size."
msgstr "Y-Entfernung, über welche Hohlräume zu voller Größe expandieren."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+"Y-Distanz, über welche die Schwebeländer sich von voller Dichte\n"
+"zu nichts zuspitzen. Die Zuspitzung beginnt an dieser Distanz vom\n"
+"Y-Limit.\n"
+"Für eine durchgehende Schwebelandebene regelt dies die Höhe von\n"
+"Hügeln/Bergen.\n"
+"Muss kleiner als oder gleich der Hälfte der Distanz zwischen den\n"
+"Y-Limits sein."
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Y-Höhe der durchschnittlichen Geländeoberfläche."
@@ -7058,18 +7460,6 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgid "Floatland mountain height"
#~ msgstr "Schwebelandberghöhe"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Schwebelandbergexponent"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Schwebelandbergdichte"
-
-#~ msgid "Floatland level"
-#~ msgstr "Schwebelandhöhe"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Schwebelandbasisrauschen"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Schwebeland-Basishöhenrauschen"
@@ -7127,3 +7517,21 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgstr ""
#~ "Ändert die Gammakodierung der Lichttabellen. Kleinere Werte sind heller.\n"
#~ "Diese Einstellung ist rein clientseitig und wird vom Server ignoriert."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Pfad, in dem Bildschirmfotos abgespeichert werden."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Parallax-Occlusion-Stärke"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Erzeugungswarteschlangengrenze auf Festspeicher"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "$1 wird heruntergeladen und installiert, bitte warten …"
+
+#~ msgid "Back"
+#~ msgstr "Rücktaste"
+
+#~ msgid "Ok"
+#~ msgstr "OK"
diff --git a/po/dv/minetest.po b/po/dv/minetest.po
index aa2107d99..c5d325108 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: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: 2019-11-10 15:04+0000\n"
"Last-Translator: Krock <mk939@ymail.com>\n"
"Language-Team: Dhivehi <https://hosted.weblate.org/projects/minetest/"
@@ -22,6 +22,10 @@ msgstr "Þ‡Þ¦ÞÞªÞ‚Þ° ÞÞ°Þ•Þ¦Þ‡ÞªÞ‚Þ°ÞˆÞ­"
msgid "You died"
msgstr "Þ‰Þ¦ÞƒÞªÞˆÞ©"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -37,10 +41,6 @@ msgid "Main menu"
msgstr "maigandu menu"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "emme rangalhu"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "aa gulhumeh"
@@ -114,6 +114,10 @@ msgid ""
msgstr "Þ‰Þ¦Þ‚Þ§ އަކުރުތަÞÞ° ހިމެނޭތީ Þ‰Þ®Þ‘Þ° '1$' Þ‚ÞªÞ–Þ¬Þ‡Þ°ÞÞªÞ‚Þª. Þ€Þ¦Þ‰Þ¦Þ‡Þ¬Þ†Þ¦Þ‚Þ¨ Þ€ÞªÞ‡Þ°Þ‹Þ¦Þ‡Þ© [Z-A0-9] Þ‰Þ¨ އަކުރުތައް."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Þ‰Þ®Þ‘Þ°:"
@@ -162,16 +166,17 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr ""
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Þ‡Þ¬Þ‚Þ„ÞªÞƒÞ¨ Þ‰Þ¬Þ‡Þ¨Þ‚Þ° Þ‰Þ¬Þ‚Þ«Þ‡Þ¦ÞÞ°"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "$1 Þ‘Þ¦Þ‡ÞªÞ‚Þ°ÞÞ¯Þ‘Þ®Þ†Þ®ÞÞ° Þ‡Þ¨Þ‚Þ°ÞÞ°Þ“Þ¯ÞÞ°Þ†ÞªÞƒÞ¦Þ‚Þ©ØŒ Þ‰Þ¦Þ‘ÞªÞ†ÞªÞƒÞ¦Þ‡Þ°ÞˆÞ§..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "ÞÞ¯Þ‘Þ°ÞˆÞ¦Þ‚Þ©..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -216,16 +221,53 @@ msgstr "ÞŠÞªÞ€Þ¬ÞÞ§"
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "\"$1\" Þ†Þ”Þ§ Þ‹Þ¨ÞªÞ‚Þ¨Þ”Þ¬Þ‡Þ¬Þ‡Þ° Þ‡Þ¬Þ„Þ¦Þ‡Þ¨Þ‚Þ°"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Þ€Þ¦Þ‹Þ§"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
+msgid "Decorations"
+msgstr "Þ‰Þ®Þ‘Þ°ÞŽÞ¬ Þ‰Þ¦Þ‡ÞªÞÞ«Þާތު:"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Þ‰Þ¦Þ‡Þ¨Þ‚Þ°Þ“Þ¬ÞÞ°Þ“Þ°_ÞŽÞ­Þ‰Þ° ÞŠÞ¦Þ‹Þ¦ ÞÞ¦Þ„Þ°ÞŽÞ­Þ‰Þ¬Þ‡Þ° Þ‰Þ¦Þ‡Þ¨Þ‚Þ°Þ“Þ¬ÞÞ°Þ“Þ°.Þ‚Þ¬Þ“Þ° Þ‡Þ¨Þ‚Þ° Þ‘Þ¦Þ‡ÞªÞ‚Þ°ÞÞ¯Þ‘Þ°Þ†ÞªÞƒÞ¦Þ‡Þ°ÞˆÞ§"
@@ -233,25 +275,145 @@ msgstr "Þ‰Þ¦Þ‡Þ¨Þ‚Þ°Þ“Þ¬ÞÞ°Þ“Þ°_ÞŽÞ­Þ‰Þ° ÞŠÞ¦Þ‹Þ¦ ÞÞ¦Þ„Þ°ÞŽÞ­Þ‰Þ¬Þ‡Þ° Þ‰Þ¦Þ‡Þ¨
msgid "Download one from minetest.net"
msgstr "Þ‰Þ¦Þ‡Þ¨Þ‚Þ°Þ“Þ¬ÞÞ°Þ“Þ°.Þ‚Þ¬Þ“Þ° Þ‡Þ¨Þ‚Þ° އެކަތި Þ‘Þ¦Þ‡ÞªÞ‚Þ°ÞÞ¯Þ‘Þ°Þ†ÞªÞƒÞ¦Þ‡Þ°ÞˆÞ§"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "ÞŽÞ­Þ‰Þ°"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Þ‰Þ¬Þ•Þ°Þ–Þ¬Þ‚Þ°"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Þ‰Þ¬Þ•Þ°Þ–Þ¬Þ‚Þ°"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Þ‡Þ¬Þ‡Þ°ÞˆÞ¬ÞÞ° ÞŽÞ­Þ‰Þ¬Þ‡Þ° އިހްތިޔާރުވެފައެއް Þ‚Þ¬Þ Þ°"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "ÞÞ©Þ‘Þ°"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Þ‡Þ¨Þ‚Þ°Þ’Þ§ÞƒÞª: Þ‰Þ¨Þ‚Þ¨Þ‰Þ¦ÞÞ° Þ‘Þ¨ÞˆÞ¬ÞÞ®Þ•Þ°Þ‰Þ¦Þ‚Þ°Þ“Þ° Þ€Þ§Þ‡Þ°ÞÞ¦Þ†ÞªÞƒÞ¬ÞˆÞ¨ÞŠÞ¦Þ‡Þ¨ÞˆÞ¦Þ‚Þ© Þ‘Þ¨ÞˆÞ¬ÞÞ®Þ•Þ¦ÞƒÞªÞ‚Þ°Þ‚Þ¦ÞÞ°."
#: builtin/mainmenu/dlg_create_world.lua
@@ -404,14 +566,25 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -563,6 +736,10 @@ msgid "Host Server"
msgstr "ÞÞ§ÞˆÞ¦ÞƒÞ‡Þ¬Þ‡Þ° Þ€Þ®ÞÞ°Þ“Þ°Þ†ÞªÞƒÞ­"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Þ•Þ§ÞÞ°ÞˆÞ¯Þ‘Þ° / Þ‚Þ¦Þ‚Þ°"
@@ -632,6 +809,7 @@ msgstr "Þ•Þ§ÞÞ°ÞˆÞ¯Þ‘Þ° / Þ‚Þ¦Þ‚Þ°"
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Þ•Þ©.ÞˆÞ©.Þ•Þ© Þ–Þ¦Þ‡Þ°ÞÞ§"
@@ -876,6 +1054,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -910,6 +1096,7 @@ msgstr ""
msgid "- Public: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1202,6 +1389,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1233,7 +1428,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1354,6 +1549,7 @@ msgstr ""
msgid "Left Windows"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Þ‰Þ¬Þ‚Þ«"
@@ -1446,6 +1642,7 @@ msgstr ""
msgid "Play"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1482,6 +1679,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "އިހްތިޔާރުކުރޭ"
@@ -1717,10 +1915,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "dv"
@@ -1804,6 +2007,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1814,6 +2021,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1862,7 +2077,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1910,6 +2125,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1923,10 +2148,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2098,8 +2319,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2177,10 +2398,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2449,6 +2678,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2757,6 +2990,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "Þ•Þ¯ÞÞ° Þ‰Þ¬Þ‚Þ«ÞŽÞ¦Þ‡Þ¨ Þ‡Þ¬ÞŠÞ°.Þ•Þ©.Þ‡Þ¬ÞÞ°"
@@ -2866,6 +3109,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2919,6 +3190,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4214,14 +4491,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4285,6 +4554,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Þ‰Þ¬Þ‡Þ¨Þ‚Þ° Þ‰Þ¬Þ‚Þ« ÞÞ°Þ†Þ°ÞƒÞ¨Þ•Þ°Þ“Þ°"
@@ -4352,7 +4625,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4446,10 +4721,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4517,13 +4788,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4608,6 +4879,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4717,7 +4992,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4769,9 +5044,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4848,10 +5120,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4861,7 +5129,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4895,6 +5165,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4963,6 +5241,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5401,6 +5691,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5423,6 +5720,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5434,15 +5735,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5559,7 +5870,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5712,6 +6023,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6032,6 +6347,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6066,3 +6389,9 @@ msgstr ""
#, fuzzy
#~ msgid "Select Package File:"
#~ msgstr "Þ‰Þ®Þ‘Þ°ÞŽÞ¬ ÞŠÞ¦Þ‡Þ¨ÞÞ° އިހްތިޔާރުކުރޭ:"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "$1 Þ‘Þ¦Þ‡ÞªÞ‚Þ°ÞÞ¯Þ‘Þ®Þ†Þ®ÞÞ° Þ‡Þ¨Þ‚Þ°ÞÞ°Þ“Þ¯ÞÞ°Þ†ÞªÞƒÞ¦Þ‚Þ©ØŒ Þ‰Þ¦Þ‘ÞªÞ†ÞªÞƒÞ¦Þ‡Þ°ÞˆÞ§..."
+
+#~ msgid "Ok"
+#~ msgstr "emme rangalhu"
diff --git a/po/el/minetest.po b/po/el/minetest.po
index 8690fa3c7..1992676a4 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2020-01-11 18:26+0000\n"
-"Last-Translator: rubenwardy <rubenwardy@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-03-31 20:29+0000\n"
+"Last-Translator: THANOS SIOURDAKIS <siourdakisthanos@gmail.com>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/minetest/minetest/"
"el/>\n"
"Language: el\n"
@@ -12,7 +12,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 3.10.1\n"
+"X-Generator: Weblate 4.0-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr ""
msgid "You died"
msgstr "Πέθανες"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Ένα σφάλμα Ï€Ïοέκυψε σε ένα σενάÏιο Lua:"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "ΚÏÏιο μενοÏ"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Οκ"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "ΕπανασÏνδεση"
@@ -92,7 +92,7 @@ msgstr "ΕξαÏτήσεις:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
-msgstr ""
+msgstr "ΑπενεÏγοποίηση όλων"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
@@ -100,7 +100,7 @@ msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr ""
+msgstr "ΕνεÏγοποίηση όλων"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
@@ -113,16 +113,20 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr ""
+msgstr "Δεν υπάÏχουν (Ï€ÏοαιÏετικές) εξαÏτήσεις"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr ""
+msgstr "Δεν παÏέχεται πεÏιγÏαφή παιχνιδιοÏ."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
@@ -158,16 +162,17 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
+msgid "Back to Main Menu"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back to Main Menu"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr ""
+#, fuzzy
+msgid "Downloading..."
+msgstr "ΦόÏτωση..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -212,15 +217,51 @@ msgstr ""
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
@@ -228,25 +269,143 @@ msgstr ""
msgid "Download one from minetest.net"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -397,14 +556,25 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -546,6 +716,10 @@ msgid "Host Server"
msgstr ""
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr ""
@@ -613,6 +787,7 @@ msgstr ""
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
@@ -857,6 +1032,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -891,6 +1074,7 @@ msgstr ""
msgid "- Public: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1163,6 +1347,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1194,7 +1386,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1315,6 +1507,7 @@ msgstr ""
msgid "Left Windows"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1407,6 +1600,7 @@ msgstr ""
msgid "Play"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1443,6 +1637,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
@@ -1677,10 +1872,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "el"
@@ -1764,6 +1964,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1774,6 +1978,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1822,7 +2034,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1867,6 +2079,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1880,10 +2102,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2054,8 +2272,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2133,10 +2351,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2402,6 +2628,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2710,6 +2940,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2819,6 +3059,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2872,6 +3140,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4167,14 +4441,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4238,6 +4504,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4304,7 +4574,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4392,10 +4664,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4463,13 +4731,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4554,6 +4822,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4660,7 +4932,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4712,9 +4984,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4791,10 +5060,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4804,7 +5069,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4838,6 +5105,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4906,6 +5181,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5344,6 +5631,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5366,6 +5660,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5377,15 +5675,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5502,7 +5810,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5655,6 +5963,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -5974,6 +6286,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6004,3 +6324,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL timeout"
msgstr ""
+
+#~ msgid "Ok"
+#~ msgstr "Οκ"
diff --git a/po/eo/minetest.po b/po/eo/minetest.po
index 939c56351..752538f5e 100644
--- a/po/eo/minetest.po
+++ b/po/eo/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Esperanto (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-12-16 22:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-07-06 21:41+0000\n"
"Last-Translator: Tirifto <tirifto@posteo.cz>\n"
"Language-Team: Esperanto <https://hosted.weblate.org/projects/minetest/"
"minetest/eo/>\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 3.10-dev\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr "RenaskiÄi"
msgid "You died"
msgstr "Vi mortis"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "Bone"
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Eraris Lua-skripto:"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "Ĉefmenuo"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Bone"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Rekonekti"
@@ -48,7 +48,7 @@ msgstr "La servilo petis rekonekton:"
#: builtin/mainmenu/common.lua src/client/game.cpp
msgid "Loading..."
-msgstr "Ŝargante…"
+msgstr "Enlegante…"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -114,6 +114,10 @@ msgstr ""
"signoj a–z kaj 0–9 estas permesataj."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Trovu pliajn modifaĵojn"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Modifaĵo:"
@@ -159,16 +163,17 @@ msgid "All packages"
msgstr "Ĉiuj pakaĵoj"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Reen"
+msgid "Back to Main Menu"
+msgstr "Reeniri al ĉefmenuo"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back to Main Menu"
-msgstr "Reen al ĉefmenuo"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "ElÅutante kaj instalante $1, bonvolu atendi…"
+#, fuzzy
+msgid "Downloading..."
+msgstr "Enlegante…"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -213,15 +218,52 @@ msgstr "Malinstali"
msgid "Update"
msgstr "Äœisdatigi"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Vido"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Mondo kun nomo «$1» jam ekzistas"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "Aldona tereno"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Alteca malvarmiÄo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Alteca malvarmiÄo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Klimata miksado"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Klimatoj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Kavernegoj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "Kavernoj"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Krei"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "Ornamoj"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "ElÅuti ludon, ekzemple minetest_game, el minetest.net"
@@ -229,26 +271,148 @@ msgstr "ElÅuti ludon, ekzemple minetest_game, el minetest.net"
msgid "Download one from minetest.net"
msgstr "ElÅutu ludon el minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "Forgeskeloj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "Plata tereno"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Flugantaj teramasoj en la ĉielo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "Fluginsuloj (eksperimentaj)"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Ludo"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "Estigi nefraktalan terenon: oceano kaj subtero"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Montetoj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Malsekaj riveroj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Plialtigas malsekecon ĉirkaŭ riveroj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Lagoj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+"Malalta malsekeco kaj alta varmeco kaÅ­zas malprofundajn aÅ­ sekajn riverojn"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Mondestigilo"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Parametroj de mondestigilo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Parametroj specialaj por Mondestigilo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "Montoj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Reto de tuneloj kaj kavernoj"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Neniu ludo estas elektita"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Malpliigas varmecon kun alteco"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Malpliigas malsekecon kun alteco"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Riveroj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Marnivelaj riveroj"
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Fontnombro"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
-msgstr "Averto: La plejeta programista testo estas intencita por programistoj."
+msgid "Smooth transition between biomes"
+msgstr "Glatigi transiron inter klimatoj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+"Konstruaĵoj aperantaj sur la tereno (neniu efiko sur arboj kaj Äangala herbo "
+"kreitaj de v6)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "Konstruaĵoj aperantaj sur la tereno, ofte arboj kaj kreskaĵoj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Milda, Dezerto"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Milda, Dezerto, Äœangalo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "Milda, Dezerto, Äœangalo, Tundro, Tajgo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "Bruo de terena bazo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "Arboj kaj Äangala herbo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Variigi profundecon de riveroj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "Tre grandaj kavernoj profunde subtere"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr "Averto: La programista testo estas intencita por programistoj."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -302,7 +466,7 @@ msgstr "(Neniu priskribo de agordo estas donita)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr "2D-a bruo"
+msgstr "2d-a bruo"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -400,14 +564,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z-disiÄo"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "absoluta valoro"
+#. ~ "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 "normoj"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "faciligita"
@@ -527,7 +702,7 @@ msgstr "Enlistigi servilon"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr "Asocianta adreso"
+msgstr "Asocii adreso"
#: builtin/mainmenu/tab_local.lua
msgid "Configure"
@@ -550,6 +725,10 @@ msgid "Host Server"
msgstr "Gastigi servilon"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Nomo/Pasvorto"
@@ -617,6 +796,7 @@ msgstr "Nomo / Pasvorto"
msgid "Ping"
msgstr "Retprokrasto"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Dueloj Åaltitas"
@@ -819,7 +999,7 @@ msgstr "Pravalorigante monderojn…"
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr "Ŝargante teksturojn…"
+msgstr "Enlegante teksturojn…"
#: src/client/client.cpp
msgid "Rebuilding shaders..."
@@ -831,7 +1011,7 @@ msgstr "Konekta eraro (ĉu eltempiÄo?)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
-msgstr "Ne povis trovi aÅ­ Åargi ludon \""
+msgstr "Ne povis trovi aÅ­ enlegi ludon \""
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -861,9 +1041,17 @@ msgstr "Malsukcesis malfermi donitan pasvortan dosieron: "
msgid "Provided world path doesn't exist: "
msgstr "Donita monda dosierindiko ne ekzistas: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr "yes"
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -897,6 +1085,7 @@ msgstr "– Pordo: "
msgid "- Public: "
msgstr "– Publika: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "– LkL: "
@@ -1195,6 +1384,14 @@ msgid "Sound muted"
msgstr "Silentigite"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "Sonsistemo estas malÅaltita"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "Sonsistemo ne estas subtenata de ĉi tiu muntaĵo"
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Malsilentigite"
@@ -1206,12 +1403,12 @@ msgstr "Vidodistanco agordita al %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr "Vidodistanco plejgrandas: %d"
+msgstr "Vidodistanco maksimumas: %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr "Vidodistanco je la malplejgrando: %d"
+msgstr "Vidodistanco je la minimumo: %d"
#: src/client/game.cpp
#, c-format
@@ -1226,7 +1423,7 @@ msgstr "Dratostaro montrita"
msgid "Zoom currently disabled by game or mod"
msgstr "Zomado nuntempe malÅaltita de ludo aÅ­ modifaĵo"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "bone"
@@ -1347,6 +1544,7 @@ msgstr "Maldekstra Majuskligo"
msgid "Left Windows"
msgstr "Maldekstra Vindozo"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menuo"
@@ -1439,6 +1637,7 @@ msgstr "Haltigo"
msgid "Play"
msgstr "Ludi"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Presi"
@@ -1475,6 +1674,7 @@ msgstr "Dekstra Vindozo"
msgid "Scroll Lock"
msgstr "Ruluma Baskulo"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Elekti"
@@ -1714,10 +1914,15 @@ msgstr "Silentigita"
msgid "Sound Volume: "
msgstr "LaÅ­teco: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Enigi "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "eo"
@@ -1741,7 +1946,6 @@ msgstr ""
"ĉefa ringo."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1755,7 +1959,7 @@ msgstr ""
"(X,Y,Z) deÅovo de fraktalo for de la centro de la mondo en unuoj\n"
"de «scale».\n"
"Utilas por movo de volata punkto proksimen al (0, 0) por krei taÅ­gan\n"
-"naskiÄejon, aÅ­ por permeso « zomi » al volata punkto per pligrandigo\n"
+"naskiÄejon, aÅ­ por permeso «zomi» al volata punkto per pligrandigo\n"
"de la skalo.\n"
"La normo estas agordita al taÅ­ga naskiÄejo por aroj de Mandelbrot\n"
"kun la normaj parametroj; Äi eble bezonos alÄustigon por aliaj situacioj.\n"
@@ -1794,7 +1998,7 @@ msgstr "2d-a bruo, kiu regas la formon/grandon de krestaj montoj."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr "2d-a bruo, kiu regas la formon/grandon de larÄaj montetoj."
+msgstr "2d-a bruo, kiu regas la formon/grandecon de mildaj montetoj."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
@@ -1806,16 +2010,15 @@ msgstr "2d-a bruo, kiu regas la grandon/ofton de krestaj montaroj."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr "2d-a bruo, kiu regas la grandon/ofton de larÄaj montetoj."
+msgstr "2d-a bruo, kiu regas la grandecon/oftecon de mildaj montetoj."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
msgstr "2d-a bruo, kiu regas la grandon/ofton de terasaj montaroj."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "2D noise that locates the river valleys and channels."
-msgstr "2d-a bruo, kiu regas la formon/grandon de larÄaj montetoj."
+msgstr "2d-a bruo, kiu lokas la riverajn valojn kaj kanalojn."
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -1826,6 +2029,10 @@ msgid "3D mode"
msgstr "3d-a reÄimo"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr "Forteco de 3D-reÄima paralakso"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "3d-a bruo difinanta grandegajn kavernojn."
@@ -1838,6 +2045,14 @@ msgstr ""
"AnkaÅ­ difinas strukturon de montoj sur fluginsuloj."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "3d-a bruo difinanta strukturon de riveraj kanjonaj muroj."
@@ -1900,8 +2115,9 @@ msgid "ABM interval"
msgstr "Intertempo de ABM (aktiva modifilo de monderoj)"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
-msgstr "Plejgrando de mondestigaj vicoj"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
+msgstr "Maksimumo de mondestigaj vicoj"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -1950,6 +2166,16 @@ msgstr ""
"kvarmilaj ekranoj."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Specialaj"
@@ -1961,10 +2187,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Alteca malvarmiÄo"
+"Modifas la luman kurbon per apliko de «gamaa korekto» al Äi.\n"
+"Pli altaj valoroj heligas mezajn kaj malaltajn lumnivelojn.\n"
+"Valoro «1.0» lasas la luman kurbon neÅanÄita.\n"
+"Ĉi tio nur grave efikas sur taglumo kaj artlumo; Äi nur\n"
+"tre malmulte efikas sur natura noktlumo."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2115,27 +2342,23 @@ msgstr "Bitoj bildere (aÅ­ kolornombro) en tutekrana reÄimo."
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
-msgstr "Optimuma distanco de bloko-sendado"
+msgstr "Optimuma distanco de monder-sendado"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Dosierindiko al egallarÄa tiparo"
+msgstr "Dosierindiko al egrasa kaj kursiva tiparo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Dosierindiko al egallarÄa tiparo"
+msgstr "Dosierindiko al grasa kaj kursiva egallarÄa tiparo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Tipara dosierindiko"
+msgstr "Dosierindiko al grasa tiparo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Dosierindiko al egallarÄa tiparo"
+msgstr "Dosierindiko al grasa egallarÄa tiparo"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2151,13 +2374,14 @@ msgstr "Mapado de elstaraĵoj"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
-"Distanco de vidpunkto «proksime tonda ebeno» en monderoj, inter 0 kaj 0.5.\n"
-"Plejparto de uzantoj ne bezonos ĉi tion ÅanÄi.\n"
+"Distanco de vidpunkto «proksime tonda ebeno» en monderoj, inter 0 kaj 0.25.\n"
+"Funkcias nur sur GLES-platformoj. Plejparto de uzantoj ne bezonos ĉi tion "
+"ÅanÄi.\n"
"Plialtigo povas malpliigi misbildojn por malfortaj grafiktraktiloj.\n"
"0.1 = Norma, 0.25 = Bona valoro por malfortaj tabulkomputiloj."
@@ -2203,7 +2427,7 @@ msgstr "Kaverna limo"
#: src/settings_translation_file.cpp
msgid "Cavern noise"
-msgstr "Kaverna bruo"
+msgstr "Bruo de kavernoj"
#: src/settings_translation_file.cpp
msgid "Cavern taper"
@@ -2222,6 +2446,8 @@ msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Centro de amplekso de pliigo de la luma kurbo.\n"
+"Kie 0.0 estas minimuma lumnivelo, 1.0 estas maksimuma numnivelo."
#: src/settings_translation_file.cpp
msgid ""
@@ -2240,10 +2466,19 @@ msgstr ""
"Povus esti bezona por malgrandaj ekranoj."
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr "Grandeco de babiluja tiparo"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Babila klavo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Erarserĉa protokola nivelo"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "Supra limo de babilaj mesaÄoj"
@@ -2444,6 +2679,9 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Regas larÄon de tuneloj, pli malalta valoro kreas pli larÄajn tunelojn.\n"
+"Valoro ≥ 10.0 tute malÅaltas estigon de tuneloj kaj evitas la intensan\n"
+"kalkulojn de bruo."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2494,7 +2732,6 @@ msgid "Dec. volume key"
msgstr "MallaÅ­tiga klavo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Decrease this to increase liquid resistance to movement."
msgstr "Malpliigu ĉi tion por pliigi reziston de fluaĵoj al movo."
@@ -2531,6 +2768,11 @@ msgid "Default report format"
msgstr "Implicita raporta formo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Norma ludo"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2587,7 +2829,7 @@ msgstr "Difinas la profundecon de la rivera akvovojo."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
msgstr ""
-"Difinas plejgrandan distancon por transsendo de ludantoj, en monderoj (0 = "
+"Difinas maksimuman distancon por transsendo de ludantoj, en monderoj (0 = "
"senlima)."
#: src/settings_translation_file.cpp
@@ -2600,14 +2842,14 @@ msgstr "Difinas larÄecon de la rivera valo."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
-msgstr "Difinas arbajn zonojn kaj denson."
+msgstr "Difinas arbajn zonojn kaj densecon."
#: src/settings_translation_file.cpp
msgid ""
"Delay between mesh updates on the client in ms. Increasing this will slow\n"
"down the rate of mesh updates, thus reducing jitter on slower clients."
msgstr ""
-"Prokrasto antaÅ­ Äisdatigo de maÅoj kliente (milisekunde).\n"
+"Prokrasto antaÅ­ Äisdatigo de maÅoj kliente (en milisekundoj).\n"
"Pli grandaj valoroj malrapidigas oftecon de ÅanÄoj, malhelpante postreston\n"
"je malrapidaj klientoj."
@@ -2693,7 +2935,7 @@ msgstr "Maksimuma Y de forgeskelo"
#: src/settings_translation_file.cpp
msgid "Dungeon minimum Y"
-msgstr "Plejeta Y de forgeskeloj"
+msgstr "Minimuma Y de forgeskeloj"
#: src/settings_translation_file.cpp
msgid "Dungeon noise"
@@ -2704,6 +2946,8 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Åœalti subtenon de IPv6 (por kaj kliento kaj servilo).\n"
+"Bezonata por ia funkciado de IPv6-konektoj."
#: src/settings_translation_file.cpp
msgid ""
@@ -2781,8 +3025,8 @@ msgid ""
"textures)\n"
"when connecting to the server."
msgstr ""
-"Åœalti uzon de fora aÅ­dvidaĵa servilo (se Äi donitas de la servilo).\n"
-"Foraj serviloj prezentas ege pli rapidon manieron elÅuti aÅ­dvidaĵojn\n"
+"Åœalti uzon de fora vidaÅ­daĵa servilo (se Äi donitas de la servilo).\n"
+"Foraj serviloj prezentas ege pli rapidon manieron elÅuti vidaÅ­daĵojn\n"
"(ekzemple teksturojn) konektante al la servilo."
#: src/settings_translation_file.cpp
@@ -2790,6 +3034,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Åœalti verticajn bufrajn objektojn.\n"
+"Ĉi tio devus multe plibonigi efikecon de grafiko."
#: src/settings_translation_file.cpp
msgid ""
@@ -2800,14 +3046,14 @@ msgstr ""
"Ekzemple: 0 por nenioma balanciÄo, 1.0 por normala, 2.0 por duobla."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
"Åœalti/malÅalti ruladon de IPv6-a servilo.\n"
-"Ignorita, se «bindi_adreson» estas agordita."
+"Ignorita, se «bind_address» estas agordita.\n"
+"Bezonas «enable_ipv6» Åaltitan."
#: src/settings_translation_file.cpp
msgid ""
@@ -2816,6 +3062,10 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Ŝaltas filmecan mapadon de tono «Uncharted 2», fare de Hable.\n"
+"Simulas la tonan kurbon de fotofilmo, kaj Äian proksimigon al aspekto\n"
+"de bildoj kun alta dinamika amplekso. Mezampleksa kontrasto estas\n"
+"iomete alÄustigita, ombroj kaj malombroj estas glate densigitaj."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -2864,6 +3114,10 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Åœaltas la sonsistemon.\n"
+"MalÅaltite, ĉi tio tute malÅaltas ĉiujn sonojn kaj la enludoj sonregiloj\n"
+"ne funkcios.\n"
+"ÅœanÄo de ĉi tiu agordo postulos restartigon."
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -2882,6 +3136,16 @@ msgstr ""
"je nombro super 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "Kadroj sekunde en paÅ­za menuo"
@@ -2898,21 +3162,20 @@ msgid "Fall bobbing factor"
msgstr "Koeficiento de balancado dum falo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "RetropaÅa tiparo"
+msgstr "Dosierindiko al reenpaÅa tiparo"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
-msgstr "Ombro de retropaÅa tiparo"
+msgstr "Ombro de reenpaÅa tiparo"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow alpha"
-msgstr "Travidebleco de ombro de la retropaÅa tiparo"
+msgstr "Travidebleco de ombro de la reenpaÅa tiparo"
#: src/settings_translation_file.cpp
msgid "Fallback font size"
-msgstr "Grando de retropaÅa tiparo"
+msgstr "Grando de reenpaÅa tiparo"
#: src/settings_translation_file.cpp
msgid "Fast key"
@@ -2966,7 +3229,7 @@ msgstr "Bruo de profundeco de plenigaĵo"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
-msgstr ""
+msgstr "Filmeca mapado de tono"
#: src/settings_translation_file.cpp
msgid ""
@@ -3003,6 +3266,41 @@ msgid "Fixed virtual joystick"
msgstr "Fiksita virtuala stirstango"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "Denseco de fluginsulaj montoj"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "Maksimuma Y de forgeskelo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "Minimuma Y de forgeskeloj"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Baza bruo de fluginsuloj"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "Eksponento de fluginsulaj montoj"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Baza bruo de fluginsuloj"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Alteco de fluginsuloj"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Fluga klavo"
@@ -3024,11 +3322,11 @@ msgstr "Nebula baskula klavo"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Implice grasa tiparo"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Implice kursiva tiparo"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3044,14 +3342,20 @@ msgstr "Tipara grandeco"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "Grando de la implicita tiparo, punkte (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "Grandeco de la reenpaÅa tiparo, punkte (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "Grandeco de la egallarÄa tiparo, punkte (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 ""
#: src/settings_translation_file.cpp
@@ -3188,18 +3492,20 @@ msgid ""
msgstr ""
#: 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 "Transiro de luma kurbo je plejeta lumnivelo."
+msgstr ""
+"Transiro de luma kurbo je plejalta lumnivelo.\n"
+"Regas la kontraston de la plej altaj lumniveloj."
#: 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 "Transiro de luma kurbo je plejeta lumnivelo."
+msgstr ""
+"Transiro de luma kurbo je minimuma lumnivelo.\n"
+"Regas kontraston je la malplej altaj lumniveloj."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3230,7 +3536,6 @@ msgid "HUD toggle key"
msgstr "Baskula klavo por travida fasado"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- legacy: (try to) mimic old behaviour (default for release).\n"
@@ -3258,7 +3563,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Heat blend noise"
-msgstr ""
+msgstr "Bruo de kunfando de varmeco"
#: src/settings_translation_file.cpp
msgid "Heat noise"
@@ -3274,7 +3579,7 @@ msgstr "Alteca bruo"
#: src/settings_translation_file.cpp
msgid "Height select noise"
-msgstr ""
+msgstr "Bruo de elekto de alto"
#: src/settings_translation_file.cpp
msgid "High-precision FPU"
@@ -3478,6 +3783,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Kiel rapide ondoj de fluaĵoj moviÄos. Pli alta = pli rapide.\n"
+"Je minusa valoro, ondoj de fluaĵoj moviÄos reen.\n"
+"Bezonas Åaltitajn ondantajn fluaĵojn."
#: src/settings_translation_file.cpp
msgid ""
@@ -3555,7 +3863,8 @@ msgid ""
"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
"down and\n"
"descending."
-msgstr "Åœaltite, klavo «uzi» uzatas anstataÅ­ klavo «kaÅiri» por malsupreniro."
+msgstr ""
+"Åœaltite, klavo «uzi» estas uzata anstataÅ­ klavo «kaÅiri» por malsupreniro."
#: src/settings_translation_file.cpp
msgid ""
@@ -3717,14 +4026,12 @@ msgid "Invert vertical mouse movement."
msgstr "Renversi vertikalan movon de muso."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Dosierindiko al egallarÄa tiparo"
+msgstr "Dosierindiko al kursiva tiparo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Dosierindiko al egallarÄa tiparo"
+msgstr "Dosierindiko al kursiva egallarÄa tiparo"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4555,15 +4862,15 @@ msgstr "Profundeco de granda kaverno"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Maksimuma nombro de grandaj kavernoj"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Minimuma nombro de grandaj kavernoj"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Subakva parto de granda kaverno"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4600,13 +4907,12 @@ msgstr ""
"trans la reto."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"Ebligas ondojn je kreskaĵoj.\n"
-"Bezonas ombrigilojn."
+"Longo de fluaĵaj ondoj.\n"
+"Bezonas ondantajn fluaĵojn."
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
@@ -4642,37 +4948,29 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Light curve boost"
-msgstr ""
+msgstr "Pliigo de luma kurbo"
#: src/settings_translation_file.cpp
msgid "Light curve boost center"
-msgstr ""
+msgstr "Centro de pliigo de luma kurbo"
#: src/settings_translation_file.cpp
msgid "Light curve boost spread"
-msgstr ""
+msgstr "DisvastiÄo de pliigo de luma kurbo"
#: src/settings_translation_file.cpp
msgid "Light curve gamma"
-msgstr ""
+msgstr "Gamao de luma kurbo"
#: src/settings_translation_file.cpp
msgid "Light curve high gradient"
-msgstr ""
+msgstr "Alta transiro de luma kurbo"
#: src/settings_translation_file.cpp
msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Limo de viceroj enlegotaj de disko"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Limo de viceroj estigotaj"
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4691,7 +4989,7 @@ msgid ""
"Only has an effect if compiled with cURL."
msgstr ""
"Limigas nombron da samtempaj HTTP-petoj. Afliktas:\n"
-"– ElÅuton de aÅ­dvidaĵoj, se la servilo uzas la agordon «remote_media».\n"
+"– ElÅuton de vidaÅ­daĵoj, se la servilo uzas la agordon «remote_media».\n"
"– ElÅuton de listo de serviloj, kaj servila anonco.\n"
"– ElÅutojn fare de la ĉefmenuo (ekz. modifaĵa administrilo).\n"
"Efektivas nur se la ludo tradukiÄis kun cURL."
@@ -4706,7 +5004,7 @@ msgstr "Glatigo de fluida flueco"
#: src/settings_translation_file.cpp
msgid "Liquid loop max"
-msgstr "Plejgrando de fluaĵa ciklo"
+msgstr "Maksimumo de fluaĵa ciklo"
#: src/settings_translation_file.cpp
msgid "Liquid queue purge time"
@@ -4740,13 +5038,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Loading Block Modifiers"
-msgstr ""
+msgstr "Enlegante Modifilojn de Monderoj"
#: src/settings_translation_file.cpp
msgid "Lower Y limit of dungeons."
msgstr "Suba Y-limo de forgeskeloj."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "Suba Y-limo de forgeskeloj."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Ĉefmenua skripto"
@@ -4779,22 +5082,20 @@ msgid "Map generation attributes specific to Mapgen Carpathian."
msgstr "Mondestigaj ecoj speciale por la Karpata Mondestigilo."
#: 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 ""
-"Mapestigaj ecoj speciale por la Plata Mapestigilo.\n"
+"Mondestigaj ecoj speciale por la Plata Mondestigilo.\n"
"Kelklokaj lagoj kaj montetoj povas aldoniÄi al la plata mondo."
#: 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 ""
-"Mapestigaj ecoj speciale por la Plata Mapestigilo.\n"
+"Mondestigaj ecoj speciale por la Plata Mondestigilo.\n"
"«terrain» Åaltas estigon de nefraktala tereno:\n"
"oceano, insuloj, kaj subtero."
@@ -4831,9 +5132,12 @@ msgstr ""
"kaj la flago «jungles» estas malatentata."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
"Mapestigilaj ecoj speciale por Mapestigilo v7.\n"
"«ridges» Åaltas la riverojn."
@@ -4923,10 +5227,6 @@ msgid "Mapgen debug"
msgstr "Mapestigila erarserĉilo"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Parametroj de mondestigilo"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Nomo de mondestigilo"
@@ -4944,7 +5244,7 @@ msgstr "Plejmulto da fluaĵoj traktataj en unu paÅo."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
-msgstr "Plejgrando da ekstraj mondopecoj por «clearobjects»"
+msgstr "Maksimumo da ekstraj mondopecoj por «clearobjects»"
#: src/settings_translation_file.cpp
msgid "Max. packets per iteration"
@@ -4960,7 +5260,7 @@ msgstr "Maksimumaj KS paÅ­ze."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
-msgstr "Plejgrando de perforte enlegitaj mondopecoj"
+msgstr "Maksimumo de perforte enlegitaj mondopecoj"
#: src/settings_translation_file.cpp
msgid "Maximum hotbar width"
@@ -4969,18 +5269,19 @@ msgstr "Maksimuma larÄo de la fulmobreto"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
msgstr ""
+"Maksimuma limo de hazarda nombro de grandaj kavernoj en unu mondoparto."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
msgstr ""
+"Maksimuma limo de hazarda nombro de malgrandaj kavernoj en unu mondoparto."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
-"Plejgranda rezisto de fluaĵoj. Regas malakcelon dum eniÄo en fluaĵon\n"
+"Maksimuma rezisto de fluaĵoj. Regas malakcelon dum eniÄo en fluaĵon\n"
"je granda rapido."
#: src/settings_translation_file.cpp
@@ -4989,8 +5290,8 @@ msgid ""
"The maximum total count is calculated dynamically:\n"
"max_total = ceil((#clients + max_users) * per_client / 4)"
msgstr ""
-"Plejgranda nombro de mondopecoj samtempe sendataj al unu kliento.\n"
-"La plejgranda sumo estas kalkulata flue:\n"
+"Maksimuma nombro de mondopecoj samtempe sendataj al unu kliento.\n"
+"La maksimuma sumo estas kalkulata flue:\n"
"max_total = ceil((#clients + max_users) * per_client / 4)"
#: src/settings_translation_file.cpp
@@ -4998,24 +5299,26 @@ msgid "Maximum number of blocks that can be queued for loading."
msgstr "Maksimuma nombro da mondopecoj atendantaj legon."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Maksimumo nombro de mondopecoj atendantaj estigon.\n"
"Vakigu por memaga elekto de Äusta kvanto."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Maksimuma nombro de atendantaj mondopecoj legotaj de loka dosiero.\n"
"Agordi vake por memaga elekto de Äusta nombro."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
-msgstr "Plejgranda nombro de perforte enlegitaj mondopecoj."
+msgstr "Maksimuma nombro de perforte enlegitaj mondopecoj."
#: src/settings_translation_file.cpp
msgid ""
@@ -5038,15 +5341,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum number of players that can be connected simultaneously."
-msgstr "Plejgranda nombro de ludantoj, kiuj povas konektiÄi samtempe."
+msgstr "Maksimuma nombro de ludantoj, kiuj povas konektiÄi samtempe."
#: src/settings_translation_file.cpp
msgid "Maximum number of recent chat messages to show"
-msgstr "Plejgranda nombro da freÅaj babilaj mesaÄoj montrotaj"
+msgstr "Maksimuma nombro da freÅaj babilaj mesaÄoj montrotaj"
#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
-msgstr "Plejgranda nombro de statike memorataj objektoj en mondopeco."
+msgstr "Maksimuma nombro de statike memorataj objektoj en mondopeco."
#: src/settings_translation_file.cpp
msgid "Maximum objects per block"
@@ -5078,7 +5381,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum time in ms a file download (e.g. a mod download) may take."
-msgstr "Maksimuma tempo (milisekunde) por elÅuto de dosiero (ekz. modifaĵo)."
+msgstr ""
+"Maksimuma tempo (en milisekundoj) por elÅuto de dosiero (ekz. modifaĵo)."
#: src/settings_translation_file.cpp
msgid "Maximum users"
@@ -5105,6 +5409,10 @@ msgid "Method used to highlight selected object."
msgstr "Metodo emfazi elektitan objekton."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Mapeto"
@@ -5117,17 +5425,16 @@ msgid "Minimap scan height"
msgstr "Alteco de mapeta skanado"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "3D-bruo, kiu determinas la nombron de forgeskeloj en mondoparto."
+msgstr "Minimuma limo de hazarda nombro de grandaj kavernoj en mondoparto."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Minimuma limo de hazarda nombro de malgrandaj kavernoj unu mondoparto."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
-msgstr "Plejeta grandeco de teksturoj"
+msgstr "Minimuma grandeco de teksturoj"
#: src/settings_translation_file.cpp
msgid "Mipmapping"
@@ -5162,9 +5469,8 @@ msgid "Mountain variation noise"
msgstr "Bruo de monta variigo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mountain zero level"
-msgstr "Bruo de montoj"
+msgstr "Nulnivelo de montoj"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
@@ -5223,8 +5529,9 @@ msgid ""
msgstr "Nomo de la servilo, montrota al ludantoj kaj en la listo de serviloj."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
-msgstr ""
+#, fuzzy
+msgid "Near plane"
+msgstr "Proksime tonda ebeno"
#: src/settings_translation_file.cpp
msgid "Network"
@@ -5260,7 +5567,7 @@ msgstr "Intervalo de NodeTimer"
#: src/settings_translation_file.cpp
msgid "Noises"
-msgstr "Bruo"
+msgstr "Bruoj"
#: src/settings_translation_file.cpp
msgid "Normalmaps sampling"
@@ -5275,11 +5582,9 @@ msgid "Number of emerge threads"
msgstr "Nombro da mondestigaj fadenoj"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5333,11 +5638,13 @@ msgstr "Netralumeblaj fluidoj"
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
msgstr ""
+"Netravidebleco (alfa) de la ombro post la implicita tiparo, inter 0 kaj 255."
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
msgstr ""
+"Netravidebleco (alfa) de la ombro post la reenpaÅa tiparo, inter 0 kaj 255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5351,7 +5658,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Overall bias of parallax occlusion effect, usually scale/2."
-msgstr ""
+msgstr "Entuta ekarto de la efiko de paralaksa ombrigo, kutime skalo/2."
#: src/settings_translation_file.cpp
msgid "Overall scale of parallax occlusion effect."
@@ -5378,10 +5685,6 @@ msgid "Parallax occlusion scale"
msgstr "Skalo de paralaksa ombrigo"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Potenco de paralaksa ombrigo"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5389,16 +5692,26 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Dosierindiko de la reenpaÅa tiparo.\n"
+"Se la agordo «freetype» estas Åaltita: devas esti tiparspeco «TrueType».\n"
+"Se la agordo «freetype» estas malÅaltita: devas esti bitbilda aÅ­ XML-vektora "
+"tiparo.\n"
+"Ĉi tiu tiparo uziÄos por kelkaj lingvoj, aÅ­ se la norma tiparo ne "
+"disponeblas."
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Dosierindiko por konservi ekrankopiojn."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Path to shader directory. If no path is defined, default location will be "
"used."
-msgstr "Dosierindiko al ombrigiloj. Se neniu difinitos, la implicita uzatos."
+msgstr ""
+"Dosierindiko al ombrigiloj. Se neniu estas difinita, la implicita estos "
+"uzata."
#: src/settings_translation_file.cpp
msgid "Path to texture directory. All textures are first searched from here."
@@ -5411,6 +5724,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 ""
+"Dosierindiko al la implicita tiparo.\n"
+"Se la agordo «freetype» estas Åaltita: devas esti tiparspeco «TrueType».\n"
+"Se la agordo «freetype» estas malÅaltita: devas esti bitbilda aÅ­ XML-vektora "
+"tiparo.\n"
+"La reenpaÅa tiparo uziÄos se la tiparo ne povas enlegiÄi."
#: src/settings_translation_file.cpp
msgid ""
@@ -5419,12 +5737,26 @@ 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 ""
+"Dosierindiko al la egallarÄa tiparo.\n"
+"Se la agordo «freetype» estas Åaltita: devas esti tiparspeco «TrueType».\n"
+"Se la agordo «freetype» estas malÅaltita: devas esti bitbilda aÅ­ XML-vektora "
+"tiparo.\n"
+"Ĉi tiu tiparo estas uzata por ekz. la ekranoj de konzolo kaj profililo."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
msgstr "PaÅ­zigi je perdita fokuso de la fenestro"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Limo de viceroj estigotaj"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Fiziko"
@@ -5482,7 +5814,8 @@ msgid ""
"Print the engine's profiling data in regular intervals (in seconds).\n"
"0 = disable. Useful for developers."
msgstr ""
-"Presi la profilajn datenojn de la motoro laÅ­ regulaj intervaloj (sekunde).\n"
+"Presi la profilajn datenojn de la motoro laÅ­ regulaj intervaloj (en "
+"sekundoj).\n"
"0 = malÅalti. Utila por evoluigistoj."
#: src/settings_translation_file.cpp
@@ -5502,10 +5835,22 @@ msgid "Profiling"
msgstr "Profilado"
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr "Proporcio de grandaj kavernoj, kiu enhavas fluaĵon."
+
+#: src/settings_translation_file.cpp
msgid ""
"Radius of cloud area stated in number of 64 node cloud squares.\n"
"Values larger than 26 will start to produce sharp cutoffs at cloud area "
@@ -5531,9 +5876,8 @@ msgid "Recent Chat Messages"
msgstr "FreÅaj mesaÄoj de babilo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Raporta indiko"
+msgstr "Dosierindiko al normala tiparo"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5584,22 +5928,20 @@ msgstr ""
"READ_PLAYERINFO: 32 (malÅaltas klient-flankan vokadon de «get_player_names»)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ridge mountain spread noise"
-msgstr "Bruo de montoj"
+msgstr "Bruo de disvastiÄo de krestaj montoj"
#: src/settings_translation_file.cpp
msgid "Ridge noise"
-msgstr "Pinta bruo"
+msgstr "Bruo de krestoj"
#: src/settings_translation_file.cpp
msgid "Ridge underwater noise"
-msgstr ""
+msgstr "Subakva bruo de krestoj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ridged mountain size noise"
-msgstr "Bruo de montoj"
+msgstr "Bruo de grandeco de krestaj montoj"
#: src/settings_translation_file.cpp
msgid "Right key"
@@ -5747,7 +6089,6 @@ msgid "Selection box width"
msgstr "LarÄo de elektujo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -5784,8 +6125,8 @@ msgstr ""
"12 = 3D «Kristnaskarba» aro de Julia.\n"
"13 = 3D «Mandelbulb» aro de Mandelbrot.\n"
"14 = 3D «Mandelbulb» aro de Julia.\n"
-"15 = 3D «Sinuse Mandelbulb» aro de Mandelbrot.\n"
-"16 = 3D «Sinuse Mandelbulb» aro de Julia.\n"
+"15 = 3D «Kosinuse Mandelbulb» aro de Mandelbrot.\n"
+"16 = 3D «Kosinuse Mandelbulb» aro de Julia.\n"
"17 = 4D «Mandelbulb» aro de Mandelbrot.\n"
"18 = 4D «Mandelbulb» aro de Julia."
@@ -5839,31 +6180,28 @@ msgstr ""
"Agordi maksimuman longon de babilaj mesaÄoj (en signoj) sendotaj de klientoj."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
-"Ebligas ondojn je kreskaĵoj.\n"
+"Åœaltu por ebligi ondantajn foliojn.\n"
"Bezonas ombrigilojn."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"Ebligas ondojn je akvo.\n"
+"Ŝaltu por ebligi ondantajn fluaĵojn (kiel akvon).\n"
"Bezonas ombrigilojn."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
"Verigo Åaltas ondantajn kreskaĵojn.\n"
-"Bezonas Åalton de ombriloj."
+"Bezonas Åalton de ombrigiloj."
#: src/settings_translation_file.cpp
msgid "Shader path"
@@ -5881,18 +6219,18 @@ msgstr ""
"Ĉi tio funkcias nur kun la bildiga internaĵo de «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 "DeÅovo de tipara ombro; se Äi estas 0, la ombro ne desegniÄos."
+msgstr ""
+"DeÅovo de ombro de la norma tiparo. Se Äi estas 0, la ombro ne desegniÄos."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
"be drawn."
-msgstr "DeÅovo de tipara ombro; se Äi estas 0, la ombro ne desegniÄos."
+msgstr ""
+"DeÅovo de tipara ombro (en bilderoj); se Äi estas 0, la ombro ne desegniÄos."
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -5946,11 +6284,11 @@ msgstr "Deklivo kaj plenigo kunlaboras por ÅanÄi la altecojn."
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Maksimuma nombro de malgrandaj kavernoj"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Minimuma nombro de etaj kavernoj"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6011,17 +6349,27 @@ msgid ""
"(obviously, remote_media should end with a slash).\n"
"Files that are not present will be fetched the usual way."
msgstr ""
-"Specifas URL de kiu la kliento elÅutos aÅ­dvidaĵojn, anstataÅ­ uzi UDP.\n"
+"Specifas URL de kiu la kliento elÅutos vidaÅ­daĵojn, anstataÅ­ uzi UDP.\n"
"$filename atingeblu de $remote_media$filename per cURL\n"
"(kompreneble, «remote_media» finiÄu per dekliva streko).\n"
"Dosieroj mankantaj elÅutiÄos per la kutima maniero."
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread 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 ""
+"DisvastiÄo de pliiga amplekso de luma kurbo.\n"
+"Regas la larÄecon de la pliigota amplekso.\n"
+"Norma deflankiÄo de pliigo de la luma kurbo GaÅ­sa."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6040,6 +6388,11 @@ msgid "Step mountain spread noise"
msgstr "Bruo de disvastiÄo de terasaj montoj"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "Potenco de paralakso."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Forteco de estigitaj normalmapoj."
@@ -6049,10 +6402,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Potenco de paralakso."
+"Forteco de pliigo de la luma kurbo.\n"
+"La 3 parametroj de «boost» definas amplekson\n"
+"de la luma kurbo, kies heleco estas pliigita."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6063,6 +6415,20 @@ msgid "Strip color codes"
msgstr "Forpreni kolorkodojn"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "Akorda SQLite"
@@ -6072,7 +6438,7 @@ msgstr "Varmeca diverseco por klimatoj."
#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
-msgstr "Alternativo bruo de tereno"
+msgstr "Alternativa bruo de tereno"
#: src/settings_translation_file.cpp
msgid "Terrain base noise"
@@ -6084,7 +6450,7 @@ msgstr "Alteco de tereno"
#: src/settings_translation_file.cpp
msgid "Terrain higher noise"
-msgstr ""
+msgstr "Pli alta bruo de tereno"
#: src/settings_translation_file.cpp
msgid "Terrain noise"
@@ -6112,7 +6478,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Terrain persistence noise"
-msgstr ""
+msgstr "Bruo de persisteco de tereno"
#: src/settings_translation_file.cpp
msgid "Texture path"
@@ -6172,6 +6538,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Maksimuma alteco de la nivelo de ondantaj fluaĵoj.\n"
+"4.0 = Alteco de ondo estas du monderoj.\n"
+"0.0 = Ondo tute ne moviÄas.\n"
+"La antaÅ­agordo estas 1.0 (duono de mondero).\n"
+"Bezonas Åaltitajn ondantajn fluaĵojn."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6194,7 +6565,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6275,9 +6646,8 @@ msgstr ""
"je 10 se «altitude_dry» estas Åaltita."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Third of 4 2D noises that together define hill/mountain range height."
-msgstr "Unu el la du 3d-aj bruoj, kiuj kune difinas tunelojn."
+msgstr "Tria el la 4 3d-aj bruoj, kiuj kune difinas altecon de mont(et)aroj."
#: src/settings_translation_file.cpp
msgid ""
@@ -6301,7 +6671,7 @@ msgstr "Rapido de tempo"
#: src/settings_translation_file.cpp
msgid "Timeout for client to remove unused map data from memory."
-msgstr "Tempolimo por forigi neuzatajn mapajn datumojn de klienta memoro."
+msgstr "Tempolimo por forigi neuzatajn mapajn datenojn de klienta memoro."
#: src/settings_translation_file.cpp
msgid ""
@@ -6321,7 +6691,7 @@ msgstr "Baskula klavo de vidpunkta reÄimo"
#: src/settings_translation_file.cpp
msgid "Tooltip delay"
-msgstr "Åœpruchelpila prokrasto"
+msgstr "Prokrasto de Åpruchelpilo"
#: src/settings_translation_file.cpp
msgid "Touch screen threshold"
@@ -6336,7 +6706,6 @@ msgid "Trilinear filtering"
msgstr "Triineara filtrado"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"True = 256\n"
"False = 128\n"
@@ -6366,7 +6735,7 @@ msgid ""
"image.\n"
"Higher values result in a less detailed image."
msgstr ""
-"Subspecimenado similas uzon de malgranda ekrandistingumo, sed Äi nur\n"
+"Subspecimenado similas uzon de malgranda ekrana distingumo, sed Äi nur\n"
"efektivas en la ludo, lasante la fasadon senÅanÄa.\n"
"Äœi grave helpu la efikecon kontraÅ­ malpli detala filmo."
@@ -6383,6 +6752,11 @@ msgid "Upper Y limit of dungeons."
msgstr "Supra Y-limo de forgeskeloj."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Supra Y-limo de forgeskeloj."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Uzi 3d-ajn nubojn anstataÅ­ ebenajn."
@@ -6442,7 +6816,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Variation of maximum mountain height (in nodes)."
-msgstr "Variaĵo de plejgranda alteco de montoj (en monderoj)."
+msgstr "Variaĵo de maksimuma alteco de montoj (en monderoj)."
#: src/settings_translation_file.cpp
msgid "Variation of number of caves."
@@ -6453,10 +6827,12 @@ msgid ""
"Variation of terrain vertical scale.\n"
"When noise is < -0.55 terrain is near-flat."
msgstr ""
+"Variado de vertikala skalo de tereno.\n"
+"Kiam brua subas -0.55, tereno estas preskaÅ­ plata."
#: src/settings_translation_file.cpp
msgid "Varies depth of biome surface nodes."
-msgstr ""
+msgstr "Variigas profundecon de surfacaj monderoj de klimato."
#: src/settings_translation_file.cpp
msgid ""
@@ -6485,7 +6861,7 @@ msgstr "Videa pelilo"
#: src/settings_translation_file.cpp
msgid "View bobbing factor"
-msgstr ""
+msgstr "Koeficiento de balancado de vido"
#: src/settings_translation_file.cpp
msgid "View distance in nodes."
@@ -6516,13 +6892,12 @@ msgid "Volume"
msgstr "LaÅ­teco"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
-"Åœaltas mapadon de paralaksa ombrigo.\n"
-"Bezonas Åaltitajn ombrigilojn."
+"Laŭteco de ĉiuj sonoj\n"
+"Bezonas Åaltitan sonsistemon."
#: src/settings_translation_file.cpp
msgid ""
@@ -6568,24 +6943,20 @@ msgid "Waving leaves"
msgstr "Ondantaj foliaĵoj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
msgstr "Ondantaj fluaĵoj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Alteco de ondoj de ondanta akvo"
+msgstr "Alteco de ondoj de ondantaj fluaĵoj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
msgstr "Rapido de ondoj sur ondanta akvo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "Longo de ondoj de ondanta akvo"
+msgstr "Longo de ondoj de ondantaj fluaĵoj"
#: src/settings_translation_file.cpp
msgid "Waving plants"
@@ -6636,13 +7007,13 @@ msgstr ""
"grandigado de monde laÅ­igitaj teksturoj."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Whether FreeType fonts are used, requires FreeType support to be compiled "
"in.\n"
"If disabled, bitmap and XML vectors fonts are used instead."
msgstr ""
-"Ĉu tiparoj de FreeType uziÄas; postulas entradukitan subtenon de FreeType."
+"Ĉu tiparoj de FreeType uziÄas; postulas entradukitan subtenon de FreeType.\n"
+"MalÅaltite, ĉi tio anstataÅ­e uzigas tiparojn bitbildajn kaj XML-vektorajn."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -6679,6 +7050,10 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Ĉu silentigi sonojn. Vi povas malsilentigi ilin kiam ajn, malse\n"
+"la sonsistemo estas malÅaltita (enable_sound=false).\n"
+"Enlude, vi povas Åalti la staton de silentigo per la silentiga klavo,\n"
+"aÅ­ per la paÅ­za menuo."
#: src/settings_translation_file.cpp
msgid ""
@@ -6753,6 +7128,14 @@ msgstr "Y de supera limo de grandaj kavernoj."
#: src/settings_translation_file.cpp
msgid "Y-distance over which caverns expand to full size."
+msgstr "Y-distanco trans kiu kavernoj etendiÄas al plena grandeco."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6777,7 +7160,7 @@ msgstr "Y-nivelo de marplanko."
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
-msgstr ""
+msgstr "Tempolimo de dosiere elÅuto de cURL"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
@@ -6846,18 +7229,6 @@ msgstr "cURL tempolimo"
#~ msgid "Floatland mountain height"
#~ msgstr "Alteco de fluginsulaj montoj"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Eksponento de fluginsulaj montoj"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Denseco de fluginsulaj montoj"
-
-#~ msgid "Floatland level"
-#~ msgstr "Alteco de fluginsuloj"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Baza bruo de fluginsuloj"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Bruo de baza alteco de fluginsuloj"
@@ -6907,3 +7278,21 @@ msgstr "cURL tempolimo"
#~ "AlÄustigi la gamaan kodadon al la lumtabeloj. Pli altaj nombroj estas pli "
#~ "helaj.\n"
#~ "Ĉi tiu agordo estas klientflanka, kaj serviloj Äin malatentos."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Dosierindiko por konservi ekrankopiojn."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Potenco de paralaksa ombrigo"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Limo de viceroj enlegotaj de disko"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "ElÅutante kaj instalante $1, bonvolu atendi…"
+
+#~ msgid "Back"
+#~ msgstr "Reeniri"
+
+#~ msgid "Ok"
+#~ msgstr "Bone"
diff --git a/po/es/minetest.po b/po/es/minetest.po
index 7f6f47996..f0a5e38dd 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-12-30 20:21+0000\n"
-"Last-Translator: universales <universales@protonmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-07-06 21:41+0000\n"
+"Last-Translator: Agustin Calderon <agustin25901@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 3.10\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr "Reaparecer"
msgid "You died"
msgstr "Has muerto"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "Aceptar"
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Ha ocurrido un error en un script de Lua:"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "Menú principal"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Aceptar"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Reconectar"
@@ -115,6 +115,10 @@ msgstr ""
"los caracteres [a-z0-9_] están permitidos."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Encontrar más mods"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
@@ -153,27 +157,28 @@ msgstr "Mundo:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "Activado"
+msgstr "activado"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Todos los paquetes"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Atrás"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Volver al menú principal"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Descargando e instalando $1, por favor espere..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+"ContentDB no se encuentra disponible cuando Minetest se compiló sin cURL"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "Descargando..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr "Fallo al descargar $1 en $2"
+msgstr "Fallo al descargar $1"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -214,15 +219,51 @@ msgstr "Desinstalar"
msgid "Update"
msgstr "Actualizar"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Ver"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Ya existe un mundo llamado \"$1\""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "Terreno adicional"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Frío de altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "Sequedad de altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Mezclado de biomas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Biomas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Cavernas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "Cavernas"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Crear"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "Decoraciones"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Descarga un subjuego, como minetest_game, desde minetest.net"
@@ -230,28 +271,149 @@ msgstr "Descarga un subjuego, como minetest_game, desde minetest.net"
msgid "Download one from minetest.net"
msgstr "Descarga uno desde minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "Mazmorras"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "Terreno plano"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Tierras flotantes en el cielo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "Tierras flotantes (experimental)"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Juego"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "Generar terreno no fractal: Oceanos y subterráneos"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Colinas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Ríos húmedos"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Incrementa humedad alrededor de los ríos"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Lagos"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+"La baja humedad y el alto calor causan que los ríos sean poco profundos o "
+"secos"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Generador de mapas"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Banderas de Mapgen"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Banderas específicas de Mapgen"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "Montañas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "Flujo de lodo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Red de túneles y cuevas"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Ningún juego seleccionado"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Reduce el calor con la altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Reduce la humedad con la altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Ríos"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Ríos a nivel de mar"
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Semilla"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr "Transición suave entre biomas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
msgstr ""
-"Advertencia: El juego \"Minimal development test\" está diseñado para "
-"desarrolladores."
+"Estructuras generadas en el terreno (sin efecto en arboles y césped de "
+"jungla creado por v6)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "Estructuras que aparecen en el terreno, típicamente árboles y plantas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Templado, Desierto"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Templado, Desierto, Jungla"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "Templado, Desierto, Jungla, Tundra, Taiga"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "Erosión de la superficie del terreno"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "Ãrboles y hierba de la selva"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Variar la profundidad del río"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "Cavernas muy grandes en lo profundo del subsuelo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr ""
+"Advertencia: La prueba de desarrollo está destinada a los desarrolladores."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -309,11 +471,11 @@ msgstr "Ruido 2D"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr "< Volver a la página de Configuración"
+msgstr "< Volver a la página de configuración"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
-msgstr "Navegar"
+msgstr "Explorar"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Disabled"
@@ -377,7 +539,7 @@ msgstr "El valor debe ser mayor o igual que $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr "El valor no debe ser mayor que $1."
+msgstr "El valor debe ser menor o igual que $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
@@ -403,27 +565,34 @@ msgstr "Z"
msgid "Z spread"
msgstr "Propagación Z"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "absvalue"
msgstr "Valor absoluto"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "defaults"
msgstr "Predeterminados"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "eased"
-msgstr "Aliviado"
+msgstr "Suavizado"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
msgstr "$1 (Activado)"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "$1 mods"
msgstr "$1 mods"
@@ -491,7 +660,7 @@ msgstr "Paquetes instalados:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr "Sin depenencias."
+msgstr "Sin dependencias."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
@@ -558,6 +727,10 @@ msgid "Host Server"
msgstr "Servidor anfitrión"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "Instalar juegos desde ContentDB"
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Nombre / contraseña"
@@ -625,6 +798,7 @@ msgstr "Nombre / contraseña"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP activado"
@@ -646,9 +820,8 @@ msgid "8x"
msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "All Settings"
-msgstr "Ver toda la config."
+msgstr "Todos los ajustes"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
@@ -676,7 +849,7 @@ msgstr "Configurar teclas"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr "Vidrio Conectado"
+msgstr "Vidrio conectado"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
@@ -700,7 +873,7 @@ msgstr "No"
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr "Sin Filtrado"
+msgstr "Sin filtrado"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
@@ -760,7 +933,7 @@ msgstr "Hojas simples"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
-msgstr "Iluminación Suave"
+msgstr "Iluminación suave"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
@@ -780,19 +953,19 @@ msgstr "Umbral táctil: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
-msgstr "Filtrado Trilineal"
+msgstr "Filtrado trilineal"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr "Movimiento de Hojas"
+msgstr "Movimiento de hojas"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
-msgstr "Movimiento de Líquidos"
+msgstr "Movimiento de líquidos"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr "Movimiento de Plantas"
+msgstr "Movimiento de plantas"
#: builtin/mainmenu/tab_settings.lua
msgid "Yes"
@@ -872,6 +1045,14 @@ msgstr "Fallo para abrir el archivo con la contraseña proveída: "
msgid "Provided world path doesn't exist: "
msgstr "La ruta del mundo especificada no existe: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -908,9 +1089,10 @@ msgstr "- Puerto: "
msgid "- Public: "
msgstr "- Público: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr "- JvJ: "
+msgstr "- PvP: "
#: src/client/game.cpp
msgid "- Server Name: "
@@ -921,7 +1103,6 @@ msgid "Automatic forward disabled"
msgstr "Avance automático desactivado"
#: src/client/game.cpp
-#, fuzzy
msgid "Automatic forward enabled"
msgstr "Avance automático activado"
@@ -1207,6 +1388,14 @@ msgid "Sound muted"
msgstr "Sonido silenciado"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "El sistema de sonido está desactivado"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "El sistema de sonido no está soportado en esta \"build\""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Sonido no silenciado"
@@ -1238,7 +1427,7 @@ msgstr "Wireframe mostrado"
msgid "Zoom currently disabled by game or mod"
msgstr "El zoom está actualmente desactivado por el juego o un mod"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "aceptar"
@@ -1313,27 +1502,27 @@ msgstr "Inicio"
#: src/client/keycode.cpp
msgid "IME Accept"
-msgstr "IME Aceptar"
+msgstr "Aceptar IME"
#: src/client/keycode.cpp
msgid "IME Convert"
-msgstr "IME Convertir"
+msgstr "Convertir IME"
#: src/client/keycode.cpp
msgid "IME Escape"
-msgstr "IME Escapar"
+msgstr "Escapada de IME"
#: src/client/keycode.cpp
msgid "IME Mode Change"
-msgstr "IME Cambio de modo"
+msgstr "Cambiar Modo IME"
#: src/client/keycode.cpp
msgid "IME Nonconvert"
-msgstr "IME No convertir"
+msgstr "No convertir IME"
#: src/client/keycode.cpp
msgid "Insert"
-msgstr "Introducir"
+msgstr "Insertar"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Left"
@@ -1359,6 +1548,7 @@ msgstr "Shift izq."
msgid "Left Windows"
msgstr "Win izq."
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menú"
@@ -1451,6 +1641,7 @@ msgstr "Pausa"
msgid "Play"
msgstr "Jugar"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Captura"
@@ -1487,6 +1678,7 @@ msgstr "Win der."
msgid "Scroll Lock"
msgstr "Bloq Despl"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Seleccionar"
@@ -1536,7 +1728,7 @@ msgid "Register and Join"
msgstr "Registrarse y unirse"
#: src/gui/guiConfirmRegistration.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"You are about to join this server with the name \"%s\" for the first time.\n"
"If you proceed, a new account using your credentials will be created on this "
@@ -1544,11 +1736,11 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
-"Te vas unir al servidor en %1$s1 con el nombre \"%2$s2\" por primera vez. "
+"Te vas unir al servidor con el nombre \"%s\" por primera vez.\n"
"Cuando procedas, se creará una nueva cuenta en este servidor usando tus "
"credenciales.\n"
"Por favor, reescribe tu contraseña y haz clic en 'Registrarse y unirse' para "
-"confirmar la creación de la cuenta o haz clic en 'Cancelar' para abortar."
+"confirmar la creación de la cuenta, o haz clic en 'Cancelar' para abortar."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
@@ -1693,9 +1885,8 @@ msgid "Toggle noclip"
msgstr "Activar noclip"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
-msgstr "Alternar el registro del chat"
+msgstr "Alternar inclinación"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -1727,12 +1918,17 @@ msgstr "Silenciado"
#: src/gui/guiVolumeChange.cpp
msgid "Sound Volume: "
-msgstr "Volúmen del sonido: "
+msgstr "Volumen del sonido: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Ingresar "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "es"
@@ -1850,6 +2046,11 @@ msgid "3D mode"
msgstr "Modo 3D"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Oclusión de paralaje"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "Ruido 3D definiendo cavernas gigantes."
@@ -1862,6 +2063,14 @@ msgstr ""
"También define la estructura de las islas flotantes montañosas."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "Ruido 3D definiendo la estructura de las paredes de ríos de cañón."
@@ -1928,7 +2137,8 @@ msgid "ABM interval"
msgstr "Intervalo ABM"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "Limite absoluto de colas emergentes"
#: src/settings_translation_file.cpp
@@ -1937,7 +2147,7 @@ msgstr "Aceleración en el aire"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr "Aceleración de gravedad, en nodos por segundo por segundo."
+msgstr "Aceleración de gravedad, en nodos por segundo."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
@@ -1978,6 +2188,16 @@ msgstr ""
"sólo), por ejemplo para pantallas 4K."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avanzado"
@@ -1989,10 +2209,13 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Frío de altitud"
+"Altera la curva de luz aplicándole una \"corrección gamma\".\n"
+"Los valores más altos hacen que los niveles de luz medios y bajos sean más "
+"brillantes.\n"
+"El valor \"1.0\" deja la curva de luz inalterada.\n"
+"Esto sólo tiene un efecto significativo en la luz del día y en la luz "
+"artificial, \n"
+"tiene muy poco efecto en la luz natural nocturna."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2067,7 +2290,7 @@ msgstr ""
"A esta distancia el servidor optimizará agresivamente qué bloques son "
"enviados a\n"
"los clientes.\n"
-"Valores bajos potencialmente mejorarán mucho el rendimiento, a costa de \n"
+"Los valores bajos mejorarán mucho el rendimiento, a costa de \n"
"errores gráficos visibles (algunos bloques no serán renderizados bajo el "
"agua y en cuevas,\n"
"así como ocasionalmente en tierra).\n"
@@ -2076,16 +2299,12 @@ msgstr ""
"Fijado en bloques de mapa (16 nodos)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatic forward key"
msgstr "Tecla de avance automático"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatically jump up single-node obstacles."
-msgstr ""
-"Salta obstáculos de un nodo automáticamente.\n"
-"tipo: booleano"
+msgstr "Saltar obstáculos de un nodo automáticamente."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
@@ -2093,7 +2312,7 @@ msgstr "Automáticamente informar a la lista del servidor."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
-msgstr "Autoguardar tamaño de ventana"
+msgstr "Autoguardar el tamaño de la pantalla"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
@@ -2151,28 +2370,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
-msgstr "Distancia de optimización de envío de bloques"
+msgstr "Optimizar la distancia del envío de bloques"
#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
-msgstr ""
+msgstr "Ruta de la fuente en negrita y cursiva"
#: src/settings_translation_file.cpp
msgid "Bold and italic monospace font path"
-msgstr ""
+msgstr "Ruta de la fuente monoespacio en negrita y cursiva"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Ruta de fuentes"
+msgstr "Ruta de la fuente en negrita"
#: src/settings_translation_file.cpp
msgid "Bold monospace font path"
-msgstr ""
+msgstr "Ruta de la fuente monoespacio en negrita"
#: src/settings_translation_file.cpp
msgid "Build inside player"
-msgstr "Construir dentro de jugador"
+msgstr "Construir dentro del jugador"
#: src/settings_translation_file.cpp
msgid "Builtin"
@@ -2185,15 +2403,16 @@ msgstr "Mapeado de relieve"
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
-"Distancia del plano cercano de la cámara en nodos, entre 0 y 0.5.\n"
-"La mayoría de los usuarios no necesitarán editar ésto.\n"
-"Incrementarlo puede reducir los artefactos en GPUs débiles.\n"
-"0.1 = Predeterminado, 0.25 = Buen valor para tabletas débiles."
+"Distancia de la cámara 'cerca del plano delimitador' en nodos, entre 0 y "
+"0,5.\n"
+"La mayoría de los usuarios no necesitarán cambiar esto.\n"
+"El aumento puede reducir los artefactos en GPU más débiles.\n"
+"0.1 = Predeterminado, 0,25 = Buen valor para comprimidos más débiles."
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
@@ -2256,6 +2475,8 @@ msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Centro de rango de impulso de la curva de luz.\n"
+"Cuando 0.0 es el nivel mínimo de luz, 1.0 es el nivel de luz máximo."
#: src/settings_translation_file.cpp
msgid ""
@@ -2273,17 +2494,26 @@ msgstr ""
"-\tAutomático:\tSimple en Android, completo en otras plataformas."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Tamaño de la fuente"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Tecla del Chat"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Nivel de registro de depuración"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "Límite de mensajes de chat"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
-msgstr "Longitud máx. de mensaje de chat"
+msgstr "Formato del mensaje del chat"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
@@ -2334,9 +2564,8 @@ msgid "Client side modding restrictions"
msgstr "Restricciones para modear del lado del cliente"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Client side node lookup range restriction"
-msgstr "Restricción de distancia de búsqueda de nodos del cliente"
+msgstr "Restricción del rango de búsqueda del nodo del lado cliente"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
@@ -2431,9 +2660,8 @@ msgid "ContentDB Flag Blacklist"
msgstr "Lista negra de banderas de ContentDB"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB URL"
-msgstr "Contenido"
+msgstr "Dirección URL de ContentDB"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
@@ -2457,21 +2685,21 @@ msgid ""
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
-"Controla el duración del ciclo día/noche.\n"
+"Controla la duración del ciclo día/noche.\n"
"Ejemplos: 72 = 20min, 360 = 4min, 1 = 24hora, 0 = día/noche/lo que sea se "
"queda inalterado."
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
-msgstr ""
+msgstr "Controla la velocidad de hundimiento en líquidos."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
-msgstr "Controla lo escarpado/profundo de las depresiones."
+msgstr "Controla la pendiente/profundidad de las depresiones del lago."
#: src/settings_translation_file.cpp
msgid "Controls steepness/height of hills."
-msgstr "Controla lo escarpado/alto de las colinas."
+msgstr "Controla la pendiente/altura de las colinas."
#: src/settings_translation_file.cpp
msgid ""
@@ -2479,6 +2707,11 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Controla la anchura de los túneles, un valor más pequeño crea túneles más "
+"anchos.\n"
+"El valor >- 10.0 desactiva completamente la generación de túneles y evita "
+"la\n"
+"cálculos intensivos de ruido."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2490,7 +2723,7 @@ msgstr "Creativo"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
-msgstr "Opacidad de punto de mira"
+msgstr "Opacidad del punto de mira"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha (opaqueness, between 0 and 255)."
@@ -2517,9 +2750,8 @@ msgid "Debug info toggle key"
msgstr "Tecla alternativa para la información de la depuración"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Debug log file size threshold"
-msgstr "Umbral de ruido del desierto"
+msgstr "Umbral del tamaño del archivo de registro de depuración"
#: src/settings_translation_file.cpp
msgid "Debug log level"
@@ -2531,7 +2763,7 @@ msgstr "Dec. tecla de volumen"
#: src/settings_translation_file.cpp
msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgstr "Disminuya esto para aumentar la resistencia del líquido al movimiento."
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -2566,6 +2798,11 @@ msgid "Default report format"
msgstr "Formato de Reporte por defecto"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Juego por defecto"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2616,9 +2853,8 @@ msgid "Defines the base ground level."
msgstr "Define el nivel base del terreno."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the depth of the river channel."
-msgstr "Define el nivel base del terreno."
+msgstr "Define la profundidad del canal del río."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
@@ -2627,14 +2863,12 @@ msgstr ""
"límite)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river channel."
-msgstr "Define la estructura del canal fluvial a gran escala."
+msgstr "Define el ancho del canal del río."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river valley."
-msgstr "Define las áreas donde los árboles tienen manzanas."
+msgstr "Define el ancho del valle del río."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
@@ -2683,17 +2917,16 @@ msgid "Desert noise threshold"
msgstr "Umbral de ruido del desierto"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Deserts occur when np_biome exceeds this value.\n"
"When the 'snowbiomes' flag is enabled, this is ignored."
msgstr ""
-"Los desiertos se dan cuando np_biome excede este valor.\n"
-"Cuando el nuevo sistema de biomas está habilitado, esto es ignorado."
+"Los desiertos se producen cuando np_biome supera este valor.\n"
+"Cuando se activa la bandera de \"snowbiomes\", esto se ignora."
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
-msgstr "Desincronizar animación de bloques"
+msgstr "Desincronizar la animación de los bloques"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2737,15 +2970,16 @@ msgid "Dungeon minimum Y"
msgstr "Mazmorras, mín. Y"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dungeon noise"
-msgstr "Mazmorras, mín. Y"
+msgstr "Ruido de mazmorra"
#: src/settings_translation_file.cpp
msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Habilitar el soporte de IPv6 (tanto para el cliente como para el servidor).\n"
+"Requerido para que las conexiones IPv6 funcionen."
#: src/settings_translation_file.cpp
msgid ""
@@ -2757,11 +2991,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Enable console window"
-msgstr "Habilita la ventana de consola"
+msgstr "Habilitar la ventana de la consola"
#: src/settings_translation_file.cpp
msgid "Enable creative mode for new created maps."
-msgstr "Habilita el modo creativo para nuevos mapas creados."
+msgstr "Habilitar el modo creativo para los nuevos mapas creados."
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
@@ -2769,7 +3003,7 @@ msgstr "Activar joysticks"
#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
-msgstr "Activar soporte para canales de mods."
+msgstr "Activar soporte para los canales de mods."
#: src/settings_translation_file.cpp
msgid "Enable mod security"
@@ -2792,8 +3026,8 @@ msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
-"Habilita la confirmación de registro cuando se conecte al servidor.\n"
-"Si está desactivada, la nueva cuenta se registrará automáticamente."
+"Habilitar confirmación de registro al conectar al servidor\n"
+"Si esta deshabilitado, se registrará una nueva cuenta automáticamente."
#: src/settings_translation_file.cpp
msgid ""
@@ -2832,6 +3066,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Habilitar los objetos vértices del buffer.\n"
+"Esto debería mejorar enormemente el rendimiento de los gráficos."
#: src/settings_translation_file.cpp
msgid ""
@@ -2842,23 +3078,29 @@ msgstr ""
"Por ejemplo: 0 para balanceo sin vista; 1.0 para normal; 2.0 para doble."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
-"Habilita/deshabilita ejecutar un servidor IPv6. Un servidor IPv6 puede ser\n"
-"restringido a clientes IPv6, dependiendo de la configuración del sistema.\n"
-"Ignorado si 'bind_address' está configurado."
+"Habilita/deshabilita la ejecución de un servidor IPv6.\n"
+"Ignorado si se establece bind_address.\n"
+"Necesita habilitar enable_ipv6 para ser activado."
#: 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 ""
+"Permite el mapeo de tonos fílmicos de Hable \"Uncharted 2\".\n"
+"Simula la curva de tono de la película fotográfica y cómo ésta se aproxima a "
+"la\n"
+"aparición de imágenes de alto rango dinámico. El contraste de gama media es "
+"ligeramente\n"
+"mejorado, los reflejos y las sombras se comprimen gradualmente."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -2908,10 +3150,14 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Habilita el sistema de sonido.\n"
+"Si está desactivado, esto desactiva completamente todos los sonidos y\n"
+"los controles de sonido el juego no serán funcionales.\n"
+"Cambiar esta configuración requiere un reinicio."
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
-msgstr "Intervalo de impresión de datos de profiling de la engine"
+msgstr "Intervalo de impresión de datos del perfil del motor"
#: src/settings_translation_file.cpp
msgid "Entity methods"
@@ -2926,6 +3172,16 @@ msgstr ""
"bloques si se le da un valor mayor a 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS (cuadros/s) en el menú de pausa"
@@ -2942,25 +3198,24 @@ msgid "Fall bobbing factor"
msgstr "Factor de balanceo en caída"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Fuente de reserva"
+msgstr "Ruta de la fuente alternativa"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
-msgstr "Sombra de fuente de reserva"
+msgstr "Sombra de la fuente de reserva"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow alpha"
-msgstr "Alfa de sombra de fuente de reserva"
+msgstr "Alfa de la sombra de la fuente de reserva"
#: src/settings_translation_file.cpp
msgid "Fallback font size"
-msgstr "Tamaño de fuente de reserva"
+msgstr "Tamaño de la fuente de reserva"
#: src/settings_translation_file.cpp
msgid "Fast key"
-msgstr "Tecla de \"Rápido\""
+msgstr "Tecla rápida"
#: src/settings_translation_file.cpp
msgid "Fast mode acceleration"
@@ -3005,7 +3260,7 @@ msgstr "Profundidad del relleno"
#: src/settings_translation_file.cpp
msgid "Filler depth noise"
-msgstr "Nivel llena de ruido"
+msgstr "Nivel lleno de ruido"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
@@ -3045,6 +3300,41 @@ msgid "Fixed virtual joystick"
msgstr "Joystick virtual fijo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "Densidad de las montañas en tierras flotantes"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "Mazmorras, máx. Y"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "Mazmorras, mín. Y"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Ruido base para tierra flotante"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "Exponente de las montañas en tierras flotantes"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Ruido base para tierra flotante"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Nivel de tierra flotante"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Tecla vuelo"
@@ -3066,34 +3356,40 @@ msgstr "Tecla para alternar niebla"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Fuente en negrita por defecto"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Letra cursiva por defecto"
#: src/settings_translation_file.cpp
msgid "Font shadow"
-msgstr "Sombra de fuentes"
+msgstr "Sombra de la fuente"
#: src/settings_translation_file.cpp
msgid "Font shadow alpha"
-msgstr "Alfa de sombra de fuentes"
+msgstr "Alfa de sombra de la fuente"
#: src/settings_translation_file.cpp
msgid "Font size"
-msgstr "Tamaño de fuente"
+msgstr "Tamaño de la fuente"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "Tamaño de la fuente por defecto en punto (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "Tamaño de la fuente de reserva en punto (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "Tamaño de la fuente del monoespacio en punto (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 ""
#: src/settings_translation_file.cpp
@@ -3102,10 +3398,13 @@ msgid ""
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
+"Formato en los mensajes del chat del jugador. Los siguientes strings son "
+"válidos:\n"
+"@name, @message, @timestamp (opcional)"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
-msgstr "Formato de capturas de pantalla."
+msgstr "Formato de las capturas de pantalla."
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Color"
@@ -3117,19 +3416,19 @@ msgstr "Opacidad de fondo Predeterminada para formularios"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Color"
-msgstr "Color see fondo para formularios en pantalla completa"
+msgstr "Color de fondo para formularios en pantalla completa"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Opacity"
-msgstr "Opacidad de formularios en pantalla completa"
+msgstr "Opacidad de los formularios en pantalla completa"
#: src/settings_translation_file.cpp
msgid "Formspec default background color (R,G,B)."
-msgstr "Color de fondo predeterminado para formularios (R, G, B)."
+msgstr "Color de fondo predeterminado para los formularios (R, G, B)."
#: src/settings_translation_file.cpp
msgid "Formspec default background opacity (between 0 and 255)."
-msgstr "Opacidad predeterminada del fondo de formularios (entre 0 y 255)."
+msgstr "Opacidad predeterminada del fondo de los formularios (entre 0 y 255)."
#: src/settings_translation_file.cpp
msgid "Formspec full-screen background color (R,G,B)."
@@ -3166,8 +3465,8 @@ msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
msgstr ""
-"Desde cuán lejos se generan los bloques para los clientes, especificado\n"
-"en bloques de mapa (mapblocks, 16 nodos)."
+"Desde cuán lejos se generan los bloques para los clientes, especificado en "
+"bloques de mapa (mapblocks, 16 nodos)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3222,7 +3521,7 @@ msgstr "Generar mapas normales"
#: src/settings_translation_file.cpp
msgid "Global callbacks"
-msgstr "Devolución de llamadas globales"
+msgstr "Llamadas globales"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3242,18 +3541,20 @@ msgstr ""
"inhabilitar esas opciones."
#: 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 "Gradiente de la curva de luz al nivel de luz máximo."
+msgstr ""
+"Gradiente de la curva de luz en el nivel máximo de luz.\n"
+"Controla el contraste de los niveles de luz más 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 "Gradiente de la curva de luz al nivel de luz mínimo."
+msgstr ""
+"Gradiente de la curva de luz en el nivel mínimo de luz.\n"
+"Controla el contraste de los niveles de luz más bajos."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3277,29 +3578,29 @@ msgstr "Mods HTTP"
#: src/settings_translation_file.cpp
msgid "HUD scale factor"
-msgstr "Factor de escala del HUD"
+msgstr "Factor de escala HUD"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr "Tecla de cambio del HUD"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- legacy: (try to) mimic old behaviour (default for release).\n"
"- log: mimic and log backtrace of deprecated call (default for debug).\n"
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
-"Manejo de las llamadas de la API LUA obsoletas:\n"
-"- legacy: (intenta)imita el antiguo comportamiento (por defecto para "
-"lanzamientos).\n"
-"- log: imita y guarda el seguimiento de las llamadas obsoletas (por defecto "
-"para depuración).\n"
-"- error: Cancela en el uso de llamadas obsoletas (sugerido para los "
-"desarrolladores de Mods)."
+"Manejo de llamadas a la API de Lua en desuso:\n"
+"- legacy: (intentar) imitar el comportamiento antiguo (por defecto para la "
+"liberación).\n"
+"- log: imitar y registrar la pista de seguimiento de la llamada en desuso "
+"(predeterminado para la depuración).\n"
+"- error: abortar el uso de la llamada en desuso (sugerido para "
+"desarrolladores de mods)."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Have the profiler instrument itself:\n"
"* Instrument an empty function.\n"
@@ -3307,6 +3608,11 @@ msgid ""
"call).\n"
"* Instrument the sampler being used to update the statistics."
msgstr ""
+"Tener el propio instrumento del generador de perfiles:\n"
+"* Instrumente una función vacía.\n"
+"Esto estima la sobrecarga, que la instrumentación está agregando (+1 llamada "
+"de función).\n"
+"* Instrumente el muestreador que se utiliza para actualizar las estadísticas."
#: src/settings_translation_file.cpp
msgid "Heat blend noise"
@@ -3326,7 +3632,7 @@ msgstr "Altura del ruido"
#: src/settings_translation_file.cpp
msgid "Height select noise"
-msgstr "Ruido de elección de altura"
+msgstr "Altura del ruido seleccionado"
#: src/settings_translation_file.cpp
msgid "High-precision FPU"
@@ -3366,26 +3672,32 @@ msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
+"Aceleración horizontal en el aire al saltar o caer,\n"
+"en nodos por segundo."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration in fast mode,\n"
"in nodes per second per second."
msgstr ""
+"Aceleración horizontal y vertical en modo rápido,\n"
+"en nodos por segundo."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration on ground or when climbing,\n"
"in nodes per second per second."
msgstr ""
+"Aceleración horizontal y vertical en el suelo o al subir,\n"
+"en nodos por segundo."
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
-msgstr "Tecla de siguiente barra rápida"
+msgstr "Tecla de siguiente de la barra rápida"
#: src/settings_translation_file.cpp
msgid "Hotbar previous key"
-msgstr "Tecla de anterior barra rápida"
+msgstr "Tecla de anterior de la barra rápida"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 1 key"
@@ -3412,139 +3724,112 @@ msgid "Hotbar slot 14 key"
msgstr "Tecla de barra rápida ranura 14"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 15 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 15"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 16 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 16"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 17 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 17"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 18 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 18"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 19 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 19"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 2 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 2"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 20 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 20"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 21 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 21"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 22 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 22"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 23 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 23"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 24 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 24"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 25 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 25"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 26 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 26"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 27 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 27"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 28 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 28"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 29 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 29"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 3 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 30 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 30"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 31 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 31"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 32 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 32"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 4 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 4"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 5 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 5"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 6 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 6"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 7 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 7"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 8 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 8"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 9 key"
-msgstr "Botón de siguiente Hotbar"
+msgstr "Tecla de barra rápida ranura 9"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "How deep to make rivers."
-msgstr "Profundidad para los ríos"
+msgstr "Profundidad para los ríos."
#: src/settings_translation_file.cpp
msgid ""
@@ -3552,6 +3837,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Como de rápido se moverán las ondas de líquido. Más alto = más rápido.\n"
+"Si es negativo, las ondas de líquido se moverán hacia atrás.\n"
+"Requiere que se habiliten los líquidos de agitación."
#: src/settings_translation_file.cpp
msgid ""
@@ -3563,13 +3851,12 @@ msgstr ""
"Con valores mayores es mas fluido, pero se utiliza mas RAM."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "How wide to make rivers."
-msgstr "Ancho de los ríos"
+msgstr "Ancho de los ríos."
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
-msgstr ""
+msgstr "Ruido de la mezcla de humedad"
#: src/settings_translation_file.cpp
msgid "Humidity noise"
@@ -3592,20 +3879,21 @@ msgid ""
"If FPS would go higher than this, limit it by sleeping\n"
"to not waste CPU power for no benefit."
msgstr ""
-"Si las FPS no van mas alto que esto, limitelas\n"
-"para no gastar poder del CPU para ningun beneficio."
+"Si los FPS subieran a más de esto, limítelos durmiendo\n"
+"a fin de no malgastar potencia de CPU sin beneficio."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
"are\n"
"enabled."
msgstr ""
-"Si la tecla \"usar\" desactivada se usa para volar rápido si tanto el modo "
-"rápido como el modo rápido están habilitados."
+"Si está desactivado, la tecla \"especial\" se utiliza para volar rápido si "
+"tanto el modo de vuelo como el modo rápido están\n"
+"habilitados."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"If enabled the server will perform map block occlusion culling based on\n"
"on the eye position of the player. This can reduce the number of blocks\n"
@@ -3613,6 +3901,12 @@ msgid ""
"invisible\n"
"so that the utility of noclip mode is reduced."
msgstr ""
+"Si está habilitado, el servidor realizará la selección de la oclusión del "
+"bloque del mapa basado en\n"
+"en la posición del ojo del jugador. Esto puede reducir el número de bloques\n"
+"enviados al cliente en un 50-80%. El cliente ya no recibirá la mayoría de "
+"las invisibles\n"
+"para que la utilidad del modo nocturno se reduzca."
#: src/settings_translation_file.cpp
msgid ""
@@ -3620,48 +3914,50 @@ msgid ""
"nodes.\n"
"This requires the \"noclip\" privilege on the server."
msgstr ""
-"Si se habilita junto con el modo volar, el jugador puede volar a través de "
+"Si se activa junto con el modo vuelo, el jugador puede volar a través de "
"nodos sólidos.\n"
-"Esto requiere el privilegio \"noclip\" en el servidor."
+"Requiere del privilegio \"noclip\" en el servidor."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
"down and\n"
"descending."
msgstr ""
-"Si está habilitado, la tecla \"usar\" en lugar de la tecla \"escabullirse\" "
-"se usa para subir y bajar."
+"Si está activada, la tecla \"especial\" en lugar de la tecla \"sneak\" se "
+"utilizará para bajar y\n"
+"descender."
#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
-"Si esta activiado, las accione son guardadas para un rollback.\n"
-"Esta opcion es de solo lectura cuando el servidor inicia."
+"Si se activa, las acciones se graban para poder deshacerse.\n"
+"Esta opción sólo se lee al arrancar el servidor."
#: src/settings_translation_file.cpp
msgid "If enabled, disable cheat prevention in multiplayer."
msgstr ""
-"Si esta habilitado, desahabilita la prevencion de trampas y trucos en "
-"multijugador."
+"Si se habilita, deshabilita la prevención de trampas en modo multijugador."
#: src/settings_translation_file.cpp
msgid ""
"If enabled, invalid world data won't cause the server to shut down.\n"
"Only enable this if you know what you are doing."
msgstr ""
-"Si está habilitado, los datos mundiales inválidos no harán que el servidor "
-"se apague.\n"
-"Solo habilita esto si sabes lo que estás haciendo."
+"Si se habilita, los datos del mundo inválidos no causarán que el servidor se "
+"apague.\n"
+"Actívelo sólo si sabe lo que hace."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"If enabled, makes move directions relative to the player's pitch when flying "
"or swimming."
msgstr ""
+"Si está activada, hace que las direcciones de movimiento sean relativas al "
+"lanzamiento del jugador cuando vuela o nada."
#: src/settings_translation_file.cpp
msgid "If enabled, new players cannot join with an empty password."
@@ -3685,6 +3981,9 @@ msgid ""
"limited\n"
"to this distance from the player to the node."
msgstr ""
+"Si la restricción CSM para el rango de nodos está activada, las llamadas a "
+"get_node están limitadas\n"
+"a esta distancia del jugador al nodo."
#: src/settings_translation_file.cpp
msgid ""
@@ -3693,6 +3992,11 @@ msgid ""
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
+"Si el tamaño del archivo debug.txt excede el número de megabytes "
+"especificado en\n"
+"esta configuración cuando se abre, el archivo se mueve a debug.txt.1,\n"
+"borrando un antiguo debug.txt.1 si existe.\n"
+"debug.txt sólo se mueve si esta configuración es positiva."
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
@@ -3704,7 +4008,7 @@ msgstr "Ignora los errores del mundo"
#: src/settings_translation_file.cpp
msgid "In-Game"
-msgstr "Dentro del Juego"
+msgstr "Dentro del juego"
#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
@@ -3728,13 +4032,15 @@ msgstr "Tecla de la consola"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr ""
+msgstr "Velocidad vertical inicial al saltar, en nodos por segundo."
#: src/settings_translation_file.cpp
msgid ""
"Instrument builtin.\n"
"This is usually only needed by core/builtin contributors"
msgstr ""
+"Instrumento incorporado.\n"
+"Esto solo suele ser necesario para los colaboradores principales o integrados"
#: src/settings_translation_file.cpp
msgid "Instrument chatcommands on registration."
@@ -3802,7 +4108,7 @@ msgstr "Ruta de fuentes"
#: src/settings_translation_file.cpp
msgid "Italic monospace font path"
-msgstr ""
+msgstr "Ruta de la fuente monoespacial cursiva"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -3819,6 +4125,10 @@ msgid ""
"increases processing load.\n"
"At iterations = 20 this mapgen has a similar load to mapgen V7."
msgstr ""
+"Iteraciones de la función recursiva.\n"
+"Aumentar esto aumenta la cantidad de detalles finos, pero también\n"
+"aumenta la carga de procesamiento.\n"
+"En las iteraciones = 20 este mapgen tiene una carga similar al mapgen V7."
#: src/settings_translation_file.cpp
msgid "Joystick ID"
@@ -3830,7 +4140,7 @@ msgstr "Intervalo de repetición del botón del Joystick"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
-msgstr ""
+msgstr "Sensibilidad del Joystick"
#: src/settings_translation_file.cpp
msgid "Joystick type"
@@ -4495,6 +4805,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para activar/desactivar el modo cinemático.\n"
+"Véase http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4502,6 +4815,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para activar/desactivar la vista del minimapa.\n"
+"Véase http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4509,6 +4825,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para activar/desactivar el modo veloz.\n"
+"Véase http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4516,6 +4835,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para activar/desactivar el vuelo.\n"
+"Véase http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4523,6 +4845,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para activar/desactivar el modo noclip.\n"
+"Véase http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4559,6 +4884,10 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para activar/desactivar la visualización de información de depuración."
+"\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4577,6 +4906,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para activar/desactivar la visualización del HUD.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4591,6 +4923,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para activar/desactivar el perfilador. Usado para desarrollo.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4598,6 +4933,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para activar/desactivar rango de vista ilimitado.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4605,6 +4943,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Tecla para hacer zoom cuando sea posible.\n"
+"Ver http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
@@ -4654,6 +4995,10 @@ msgid ""
"- Simple: only outer faces, if defined special_tiles are used\n"
"- Opaque: disable transparency"
msgstr ""
+"Estilo de hojas:\n"
+"- Fabuloso: Todas las caras son visibles\n"
+"- Simple: Solo caras externas, si se utilizan special_tiles definidos\n"
+"- Opaco: Transparencia desactivada"
#: src/settings_translation_file.cpp
msgid "Left key"
@@ -4697,9 +5042,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost"
-msgstr "Aumento medio del centro de la curva de luz."
+msgstr "Aumento medio del centro de la curva de luz"
#: src/settings_translation_file.cpp
msgid "Light curve boost center"
@@ -4722,14 +5066,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4795,13 +5131,16 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr "Límite inferior Y de las tierras flotantes."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Script del menú principal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Main menu style"
-msgstr "Script del menú principal"
+msgstr "Estilo del menú principal"
#: src/settings_translation_file.cpp
msgid ""
@@ -4890,10 +5229,22 @@ msgstr ""
"inhabilitar esas opciones."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
+"Atributos del generador de mapas globales.\n"
+"En el generador de mapas V6 la opción (o marcador) \"decorations\" controla "
+"todos los elementos decorativos excepto los árboles y la hierba de la "
+"jungla, en todos los otros generadores de mapas esta opción controla todas "
+"las decoraciones.\n"
+"Las opciones que no son incluidas en el texto con la cadena de opciones no "
+"serán modificadas y mantendrán su valor por defecto.\n"
+"Las opciones que comienzan con el prefijo \"no\" son utilizadas para "
+"inhabilitar esas opciones."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -4920,9 +5271,8 @@ msgid "Mapblock unload timeout"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Carpathian"
-msgstr "Generador de mapas"
+msgstr "Generador de mapas carpatiano"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4930,9 +5280,8 @@ msgid "Mapgen Carpathian specific flags"
msgstr "Banderas planas de Mapgen"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Flat"
-msgstr "Mapgen plano"
+msgstr "Generador de mapas plano"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4940,9 +5289,8 @@ msgid "Mapgen Flat specific flags"
msgstr "Banderas planas de Mapgen"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal"
-msgstr "Generador de mapas"
+msgstr "Generador de mapas fractal"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4950,9 +5298,8 @@ msgid "Mapgen Fractal specific flags"
msgstr "Banderas planas de Mapgen"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V5"
-msgstr "Generador de mapas"
+msgstr "Generador de mapas V5"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4960,9 +5307,8 @@ msgid "Mapgen V5 specific flags"
msgstr "Banderas planas de Mapgen"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V6"
-msgstr "Generador de mapas"
+msgstr "Generador de mapas V6"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4970,9 +5316,8 @@ msgid "Mapgen V6 specific flags"
msgstr "Banderas planas de Mapgen"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V7"
-msgstr "Generador de mapas"
+msgstr "Generador de mapas v7"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4993,25 +5338,21 @@ msgid "Mapgen debug"
msgstr "Depuración del generador de mapas"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Banderas de Mapgen"
-
-#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen name"
msgstr "Generador de mapas"
#: src/settings_translation_file.cpp
msgid "Max block generate distance"
-msgstr ""
+msgstr "Distancia máxima de generación de bloques"
#: src/settings_translation_file.cpp
msgid "Max block send distance"
-msgstr ""
+msgstr "Distancia máxima de envío de bloques"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Max liquids processed per step."
-msgstr ""
+msgstr "Líquidos máximos procesados por paso."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
@@ -5023,11 +5364,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum FPS"
-msgstr ""
+msgstr "FPS máximos"
#: src/settings_translation_file.cpp
msgid "Maximum FPS when game is paused."
-msgstr ""
+msgstr "FPS máximos cuando el juego está pausado."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5057,6 +5398,9 @@ msgid ""
"The maximum total count is calculated dynamically:\n"
"max_total = ceil((#clients + max_users) * per_client / 4)"
msgstr ""
+"Número máximo de bloques que se envían simultáneamente por cliente.\n"
+"El recuento total máximo se calcula dinámicamente:\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."
@@ -5065,13 +5409,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5134,7 +5478,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum users"
-msgstr ""
+msgstr "Usuarios máximos"
#: src/settings_translation_file.cpp
msgid "Menus"
@@ -5146,27 +5490,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Message of the day"
-msgstr ""
+msgstr "Mensaje del día"
#: src/settings_translation_file.cpp
msgid "Message of the day displayed to players connecting."
-msgstr ""
+msgstr "Mensaje del día mostrado a los jugadores que se conectan."
#: src/settings_translation_file.cpp
msgid "Method used to highlight selected object."
+msgstr "Método utilizado para resaltar el objeto seleccionado."
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
msgstr ""
#: src/settings_translation_file.cpp
msgid "Minimap"
-msgstr ""
+msgstr "Minimapa"
#: src/settings_translation_file.cpp
msgid "Minimap key"
-msgstr ""
+msgstr "Clave del minimapa"
#: src/settings_translation_file.cpp
msgid "Minimap scan height"
-msgstr ""
+msgstr "Altura de escaneo del minimapa"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5237,13 +5585,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mute key"
-msgstr "Usa la tecla"
+msgstr "Tecla de silencio"
#: src/settings_translation_file.cpp
msgid "Mute sound"
-msgstr ""
+msgstr "Silenciar sonido"
#: src/settings_translation_file.cpp
msgid ""
@@ -5266,12 +5613,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Network"
-msgstr ""
+msgstr "Red"
#: src/settings_translation_file.cpp
msgid ""
@@ -5318,9 +5665,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5345,7 +5689,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
-msgstr ""
+msgstr "Contenido del repositorio en linea"
#: src/settings_translation_file.cpp
msgid "Opaque liquids"
@@ -5402,11 +5746,6 @@ msgid "Parallax occlusion scale"
msgstr "Oclusión de paralaje"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Parallax occlusion strength"
-msgstr "Oclusión de paralaje"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5416,7 +5755,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5450,10 +5791,18 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Physics"
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "Físicas"
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Pitch move key"
msgstr "Tecla vuelo"
@@ -5475,11 +5824,11 @@ msgstr "Nombre del jugador"
#: src/settings_translation_file.cpp
msgid "Player transfer distance"
-msgstr ""
+msgstr "Distancia de transferencia del jugador"
#: src/settings_translation_file.cpp
msgid "Player versus player"
-msgstr ""
+msgstr "Jugador contra jugador"
#: src/settings_translation_file.cpp
msgid ""
@@ -5520,6 +5869,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5618,19 +5979,16 @@ msgid "River channel depth"
msgstr "Profundidad del relleno"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel width"
-msgstr "Profundidad del relleno"
+msgstr "Ancho de canal de río"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River depth"
-msgstr "Profundidad del relleno"
+msgstr "Profundidad de río"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River noise"
-msgstr "Ruido de caverna"
+msgstr "Ruido de río"
#: src/settings_translation_file.cpp
msgid "River size"
@@ -5699,14 +6057,12 @@ msgid "Screenshot folder"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Screenshot format"
-msgstr "Captura de pantalla"
+msgstr "Formato de captura de pantalla"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Screenshot quality"
-msgstr "Captura de pantalla"
+msgstr "Calidad de captura de pantalla"
#: src/settings_translation_file.cpp
msgid ""
@@ -5732,7 +6088,7 @@ msgstr "Primero de 2 ruidos 3D que juntos definen túneles."
#: src/settings_translation_file.cpp
msgid "Security"
-msgstr ""
+msgstr "Seguridad"
#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -5867,9 +6223,8 @@ msgstr ""
"Requiere habilitar sombreadores."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Shader path"
-msgstr "Sombreadores"
+msgstr "Ruta de sombreador"
#: src/settings_translation_file.cpp
msgid ""
@@ -5983,12 +6338,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Sound"
-msgstr ""
+msgstr "Sonido"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Special key"
-msgstr "Tecla sigilo"
+msgstr "Tecla especial"
#: src/settings_translation_file.cpp
msgid "Special key for climbing/descending"
@@ -6004,6 +6358,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6026,9 +6387,12 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "La fuerza del paralaje del modo 3D."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
-msgstr "Generar mapas normales"
+msgstr "Fuerza de los mapas normales generados."
#: src/settings_translation_file.cpp
msgid ""
@@ -6038,15 +6402,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6164,7 +6538,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6294,9 +6668,8 @@ msgid "URL to the server list displayed in the Multiplayer Tab."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Undersampling"
-msgstr "Renderizado:"
+msgstr "Renderizado"
#: src/settings_translation_file.cpp
msgid ""
@@ -6320,6 +6693,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr "Límite superior Y de las tierras flotantes."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6355,9 +6732,8 @@ msgid "VSync"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Valley depth"
-msgstr "Profundidad del relleno"
+msgstr "Profundidad del valle"
#: src/settings_translation_file.cpp
msgid "Valley fill"
@@ -6487,9 +6863,8 @@ msgid "Water surface level of the world."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving Nodes"
-msgstr "Movimiento de hojas"
+msgstr "Movimiento de nodos"
#: src/settings_translation_file.cpp
msgid "Waving leaves"
@@ -6613,9 +6988,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "World start time"
-msgstr "Nombre del mundo"
+msgstr "Tiempo comienzo mundo"
#: src/settings_translation_file.cpp
msgid ""
@@ -6642,15 +7016,22 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Y of upper limit of large caves."
-msgstr "Limite absoluto de colas emergentes"
+msgstr "\"Y\" del límite superior de las grandes cuevas."
#: src/settings_translation_file.cpp
msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6710,18 +7091,6 @@ msgstr "Tiempo de espera de cURL"
#~ msgid "Floatland mountain height"
#~ msgstr "Altura de las montañas en tierras flotantes"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Exponente de las montañas en tierras flotantes"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Densidad de las montañas en tierras flotantes"
-
-#~ msgid "Floatland level"
-#~ msgstr "Nivel de tierra flotante"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Ruido base para tierra flotante"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Ruido de altura base para tierra flotante"
@@ -6766,3 +7135,15 @@ msgstr "Tiempo de espera de cURL"
#~ "Ajustar la codificación gamma para las tablas de iluminación. Números "
#~ "mayores son mas brillantes.\n"
#~ "Este ajuste es solo para cliente y es ignorado por el servidor."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Ruta para guardar las capturas de pantalla."
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Descargando e instalando $1, por favor espere..."
+
+#~ msgid "Back"
+#~ msgstr "Atrás"
+
+#~ msgid "Ok"
+#~ msgstr "Aceptar"
diff --git a/po/et/minetest.po b/po/et/minetest.po
index 4c62b900e..67b8210b3 100644
--- a/po/et/minetest.po
+++ b/po/et/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Estonian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2020-01-13 12:21+0000\n"
-"Last-Translator: Evert Prants <evert@lunasqu.ee>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-05-03 19:14+0000\n"
+"Last-Translator: Janar Leas <janar.leas@gmail.com>\n"
"Language-Team: Estonian <https://hosted.weblate.org/projects/minetest/"
"minetest/et/>\n"
"Language: et\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 3.10.1\n"
+"X-Generator: Weblate 4.1-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr "Ärka ellu"
msgid "You died"
msgstr "Said surma"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua skriptis ilmnes viga:"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "Peamenüü"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Olgu."
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Taasta ühendus"
@@ -115,6 +115,10 @@ msgstr ""
"ainult [a-z0-9_] märgid."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
@@ -160,16 +164,17 @@ msgid "All packages"
msgstr "Kõik pakid"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Tagasi"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Tagasi peamenüüsse"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Palun oota $1 allalaadimist ja paigaldamist…"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "Laadimine..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -214,15 +219,54 @@ msgstr "Eemalda"
msgid "Update"
msgstr "Uuenda"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Maailm nimega \"$1\" on juba olemas"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Koobaste läve"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Oktaavid"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Loo"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Teave:"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Lae alla mäng: näiteks „Minetest Game“, aadressilt: minetest.net"
@@ -230,25 +274,148 @@ msgstr "Lae alla mäng: näiteks „Minetest Game“, aadressilt: minetest.net"
msgid "Download one from minetest.net"
msgstr "Laadi minetest.net-st üks mäng alla"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Dungeon noise"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Mäng"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Kaardi generaator"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Mapgen flags"
+msgstr "Põlvkonna kaardid"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Põlvkonna kaardid"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Mäng valimata"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Parem Windowsi nupp"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Seed"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Hoiatus: minimaalne arendustest on mõeldud arendajatele."
#: builtin/mainmenu/dlg_create_world.lua
@@ -401,17 +568,28 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z levitus"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "absoluutväärtus"
+#. ~ "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 "vaikesätted"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+msgstr "pehmendatud"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
@@ -551,6 +729,10 @@ msgid "Host Server"
msgstr "Majuta server"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Nimi/Parool"
@@ -618,6 +800,7 @@ msgstr "Nimi / Salasõna"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP lubatud"
@@ -862,6 +1045,14 @@ msgstr "Salasõnafaili avamine ebaõnnestus: "
msgid "Provided world path doesn't exist: "
msgstr "Maailma failiteed pole olemas: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -898,6 +1089,7 @@ msgstr "- Port: "
msgid "- Public: "
msgstr "- Avalik: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -1014,6 +1206,18 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
+"Vaikimisi juhtimine:\n"
+"Menüü pole nähtav:\n"
+"- toksa: nupu käitamine\n"
+"- kaksiktoksa: aseta/kasuta\n"
+"- libista näpuga: vaata ringi\n"
+"Menüü/varamu nähtav:\n"
+"- kaksiktoksa (välja):\n"
+" -->sulgeb\n"
+"- puutu vihku, puutu pesa:\n"
+" --> teisaldab vihu\n"
+"- puutu&lohista, toksa 2-se näpuga\n"
+" --> asetab ühe eseme pessa\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
@@ -1093,47 +1297,47 @@ msgstr ""
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "Pisikaardi keelab hetkel mäng või MOD"
#: src/client/game.cpp
msgid "Minimap hidden"
-msgstr ""
+msgstr "Pisikaart peidetud"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x1"
-msgstr ""
+msgstr "Radarkaart, Suurendus ×1"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x2"
-msgstr ""
+msgstr "Radarkaart, Suurendus ×2"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x4"
-msgstr ""
+msgstr "Radarkaart, Suurendus ×4"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x1"
-msgstr ""
+msgstr "Pinnakaart, Suurendus ×1"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x2"
-msgstr ""
+msgstr "Pinnakaart, Suurendus ×2"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x4"
-msgstr ""
+msgstr "Pinnakaart, Suurendus ×4"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr ""
+msgstr "Haakumatus keelatud"
#: src/client/game.cpp
msgid "Noclip mode enabled"
-msgstr "Noclip režiim lubatud"
+msgstr "Nakkumatus lubatud"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr ""
+msgstr "Haakumatus lubatud (pole 'haakumatus' volitust)"
#: src/client/game.cpp
msgid "Node definitions..."
@@ -1184,6 +1388,14 @@ msgid "Sound muted"
msgstr "Heli vaigistatud"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Heli taastatud"
@@ -1215,7 +1427,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1342,6 +1554,7 @@ msgstr "Vasak Shift"
msgid "Left Windows"
msgstr "Vasak Windowsi nupp"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menüü"
@@ -1434,6 +1647,7 @@ msgstr "Paus"
msgid "Play"
msgstr "Mängi"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Prindi"
@@ -1470,6 +1684,7 @@ msgstr "Parem Windowsi nupp"
msgid "Scroll Lock"
msgstr "Scroll lukk"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Vali"
@@ -1707,10 +1922,15 @@ msgstr "Vaigistatud"
msgid "Sound Volume: "
msgstr "Hääle Volüüm: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "et"
@@ -1794,6 +2014,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1804,6 +2028,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1852,7 +2084,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1897,6 +2129,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Arenenud sätted"
@@ -1910,10 +2152,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2084,8 +2322,8 @@ msgstr "Muhkkaardistamine"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2163,10 +2401,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Vestlusklahv"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Vestluse lülitusklahv"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2434,6 +2681,11 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Vaikemäng"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2743,6 +2995,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2853,6 +3115,35 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Põlvkonna kaardid"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2906,6 +3197,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4215,14 +4512,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4286,6 +4575,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Main menu script"
msgstr "Menüü"
@@ -4354,7 +4647,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4458,11 +4753,6 @@ msgstr "Põlvkonna kaardid"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Mapgen flags"
-msgstr "Põlvkonna kaardid"
-
-#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen name"
msgstr "Põlvkonna kaardid"
@@ -4530,13 +4820,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4622,6 +4912,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4730,7 +5024,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4782,9 +5076,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4861,10 +5152,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4874,7 +5161,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4908,6 +5197,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4977,6 +5274,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5430,6 +5739,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5452,6 +5768,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5463,15 +5783,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5589,7 +5919,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5744,6 +6074,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6070,6 +6404,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6118,3 +6460,12 @@ msgstr ""
#~ msgid "Darkness sharpness"
#~ msgstr "Pimeduse teravus"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Palun oota $1 allalaadimist ja paigaldamist…"
+
+#~ msgid "Back"
+#~ msgstr "Tagasi"
+
+#~ msgid "Ok"
+#~ msgstr "Olgu."
diff --git a/po/eu/minetest.po b/po/eu/minetest.po
index d26c363a7..17c4325df 100644
--- a/po/eu/minetest.po
+++ b/po/eu/minetest.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2020-01-11 18:26+0000\n"
-"Last-Translator: rubenwardy <rubenwardy@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-07-08 20:47+0000\n"
+"Last-Translator: sfan5 <sfan5@live.de>\n"
"Language-Team: Basque <https://hosted.weblate.org/projects/minetest/minetest/"
"eu/>\n"
"Language: 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 3.10.1\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -27,6 +27,10 @@ msgstr "Birsortu"
msgid "You died"
msgstr "Hil zara"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Errore bat gertatu da Lua script batean:"
@@ -40,10 +44,6 @@ msgid "Main menu"
msgstr "Menu nagusia"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Ados"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Birkonektatu"
@@ -101,7 +101,7 @@ msgstr "Desgaitu denak"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr ""
+msgstr "Mod paketea desgaitu"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -109,13 +109,19 @@ msgstr "Gaitu denak"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr ""
+msgstr "Mod paketea gaitu"
#: 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 ""
+"Akatsa \"$1\" mod-a gaitzerakoan baimendu gabeko karaktereak dituelako. [a-"
+"z0-9_] karaktereak erabil daitezke soilik."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
@@ -135,7 +141,7 @@ msgstr "Mendekotasun zorrotzik ez"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr ""
+msgstr "Mod-aren deskribapena ez dago eskuragarri."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
@@ -163,16 +169,17 @@ msgid "All packages"
msgstr "Pakete guztiak"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Atzera"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Itzuli menu nagusira"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "$1 deskargatu eta instalatzen, itxaron mesedez..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "Kargatzen..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -217,15 +224,52 @@ msgstr "Desinstalatu"
msgid "Update"
msgstr "Eguneratu"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Badago \"$1\" izeneko mundu bat"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Sortu"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Informazioa:"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
"Deskargatu jolasen bat, esaterako Minetest Game, minetest.net zerbitzaritik"
@@ -234,25 +278,144 @@ msgstr ""
msgid "Download one from minetest.net"
msgstr "Deskargatu minetest.net zerbitzaritik"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Jolasa"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Mapa sortzailea"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Ez da jolasik aukeratu"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Hazia"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Abisua: \"Minimal development test\" garatzaileentzako da."
#: builtin/mainmenu/dlg_create_world.lua
@@ -275,11 +438,11 @@ msgstr "Ezabatu"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr ""
+msgstr "pkgmgr: Akatsa \"$1\" ezabatzean"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr ""
+msgstr "pkgmgr: \"$1\" bide baliogabea"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
@@ -291,13 +454,15 @@ msgstr "Onartu"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr ""
+msgstr "Mod paketea berrizendatu:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
+"Mod pakete honek berezko izen zehatza du emanda bere modpack.conf-ean eta "
+"berrizendatutako edozein gainidatziko du hemen."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
@@ -329,7 +494,7 @@ msgstr "Gaituta"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
-msgstr ""
+msgstr "Hutsunetasuna"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
@@ -385,7 +550,7 @@ msgstr "X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X spread"
-msgstr ""
+msgstr "X hedapena"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
@@ -393,7 +558,7 @@ msgstr "Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y spread"
-msgstr ""
+msgstr "Y hedapena"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
@@ -401,19 +566,30 @@ msgstr "Z"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z spread"
-msgstr ""
+msgstr "Z hedapena"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr ""
+msgstr "Balio absolutua"
+#. ~ "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 "lehenespenak"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+msgstr "Arindua"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
@@ -421,7 +597,7 @@ msgstr "$1 (Gaituta)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr ""
+msgstr "$1 mod"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
@@ -429,126 +605,133 @@ msgstr "Huts egin du $1 %2-n instalatzean"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr ""
+msgstr "Mod instalakuntza: Ezinezkoa S1 mod-en berezko izena aurkitzea"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
+"Mod instalakuntza: ezinezkoa $1 mod-entzako karpeta izen egokia aurkitzea"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: Unsupported file type \"$1\" or broken archive"
msgstr ""
+"Instalakuntza: \"$1\" sustengu gabeko fitxategi formatua edo hondatutako "
+"fitxategia"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: file: \"$1\""
-msgstr ""
+msgstr "Instalakuntza: fitxategia: \"$1\""
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr ""
+msgstr "Ezinezkoa baliozko mod edo mod pakete bat aurkitzea"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr ""
+msgstr "Akatsa $1 testura pakete moduan instalatzea"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
-msgstr ""
+msgstr "Ezinezkoa joko bat $1 moduan instalatzea"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr ""
+msgstr "Ezinezkoa mod bat $1 moduan instalatzea"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr ""
+msgstr "Ezinezkoa mod pakete bat $1 moduan instalatzea"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "Lineako edukiak esploratu"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr ""
+msgstr "Edukia"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr ""
+msgstr "Desgaitu testura paketea"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr ""
+msgstr "Informazioa:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr ""
+msgstr "Instalaturiko paketeak:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr ""
+msgstr "Menpekotasunik gabe."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr ""
+msgstr "Paketearen deskribapena ez dago erabilgarri"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
-msgstr ""
+msgstr "Berrizendatu"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr ""
+msgstr "Paketea desinstalatu"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-msgstr ""
+msgstr "Testura paketea erabili"
#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
-msgstr ""
+msgstr "Laguntzaile aktiboak"
#: builtin/mainmenu/tab_credits.lua
msgid "Core Developers"
-msgstr ""
+msgstr "Garatzaile nagusiak"
#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
-msgstr ""
+msgstr "Kredituak"
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
-msgstr ""
+msgstr "Lehenagoko laguntzaileak"
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Core Developers"
-msgstr ""
+msgstr "Lehenagoko garatzaile nagusiak"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr ""
+msgstr "Zerbitzaria iragarri"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr ""
+msgstr "Helbidea lotu"
#: builtin/mainmenu/tab_local.lua
msgid "Configure"
-msgstr ""
+msgstr "Konfiguratu"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative Mode"
-msgstr ""
+msgstr "Sormen modua"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
msgid "Enable Damage"
-msgstr ""
+msgstr "Kalteak baimendu"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr ""
+msgstr "Joko ostalaria"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
+msgstr "Zerbitzari ostalaria"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
msgstr ""
#: builtin/mainmenu/tab_local.lua
@@ -619,6 +802,7 @@ msgstr ""
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
@@ -863,9 +1047,17 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr ""
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -897,6 +1089,7 @@ msgstr ""
msgid "- Public: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1169,6 +1362,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1200,7 +1401,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1321,6 +1522,7 @@ msgstr "Ezkerreko maius."
msgid "Left Windows"
msgstr "Ezkerreko leihoa"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1413,6 +1615,7 @@ msgstr ""
msgid "Play"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Inprimatu"
@@ -1449,6 +1652,7 @@ msgstr "Eskuineko leihoa"
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Hautatu"
@@ -1683,10 +1887,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "eu"
@@ -1770,6 +1979,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1780,6 +1993,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1828,7 +2049,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1873,6 +2094,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1886,10 +2117,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2060,8 +2287,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2139,10 +2366,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Txat tekla"
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2408,6 +2643,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2722,6 +2961,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2831,6 +3080,35 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Jokalariaren transferentzia distantzia"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Hegaz egin tekla"
@@ -2884,6 +3162,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4206,14 +4490,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4280,6 +4556,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4346,7 +4626,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4434,10 +4716,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4505,13 +4783,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4596,6 +4874,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4702,7 +4984,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4754,9 +5036,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4833,10 +5112,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4846,7 +5121,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4880,6 +5157,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4948,6 +5233,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5386,6 +5683,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5408,6 +5712,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5419,15 +5727,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5546,7 +5864,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5702,6 +6020,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6023,6 +6345,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6052,4 +6382,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL timeout"
-msgstr ""
+msgstr "cURL-en denbora muga"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "$1 deskargatu eta instalatzen, itxaron mesedez..."
+
+#~ msgid "Back"
+#~ msgstr "Atzera"
+
+#~ msgid "Ok"
+#~ msgstr "Ados"
diff --git a/po/fil/minetest.po b/po/fil/minetest.po
index ec99743d0..c78b043ed 100644
--- a/po/fil/minetest.po
+++ b/po/fil/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Filipino (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: 2020-01-11 18:26+0000\n"
"Last-Translator: rubenwardy <rubenwardy@gmail.com>\n"
"Language-Team: Filipino <https://hosted.weblate.org/projects/minetest/"
@@ -23,6 +23,10 @@ msgstr ""
msgid "You died"
msgstr ""
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr ""
@@ -36,10 +40,6 @@ msgid "Main menu"
msgstr ""
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr ""
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr ""
@@ -112,6 +112,10 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr ""
@@ -157,15 +161,15 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
+msgid "Back to Main Menu"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back to Main Menu"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
+msgid "Downloading..."
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
@@ -211,15 +215,51 @@ msgstr ""
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
@@ -227,25 +267,143 @@ msgstr ""
msgid "Download one from minetest.net"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -396,14 +554,25 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -545,6 +714,10 @@ msgid "Host Server"
msgstr ""
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr ""
@@ -612,6 +785,7 @@ msgstr ""
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
@@ -856,6 +1030,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -890,6 +1072,7 @@ msgstr ""
msgid "- Public: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1162,6 +1345,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1193,7 +1384,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1314,6 +1505,7 @@ msgstr ""
msgid "Left Windows"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1406,6 +1598,7 @@ msgstr ""
msgid "Play"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1442,6 +1635,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
@@ -1676,10 +1870,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "fil"
@@ -1763,6 +1962,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1773,6 +1976,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1821,7 +2032,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1866,6 +2077,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1879,10 +2100,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2053,8 +2270,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2132,10 +2349,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2401,6 +2626,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2709,6 +2938,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2818,6 +3057,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2871,6 +3138,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4166,14 +4439,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4237,6 +4502,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4303,7 +4572,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4391,10 +4662,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4462,13 +4729,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4553,6 +4820,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4659,7 +4930,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4711,9 +4982,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4790,10 +5058,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4803,7 +5067,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4837,6 +5103,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4905,6 +5179,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5343,6 +5629,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5365,6 +5658,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5376,15 +5673,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5501,7 +5808,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5654,6 +5961,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -5973,6 +6284,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
diff --git a/po/fr/minetest.po b/po/fr/minetest.po
index c91fb2905..34fcda843 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-11-13 16:04+0000\n"
-"Last-Translator: Julien Maulny <julien.maulny@protonmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-07-06 21:41+0000\n"
+"Last-Translator: Estébastien Robespi <estebastien@mailbox.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 3.10-dev\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr "Réapparaître"
msgid "You died"
msgstr "Vous êtes mort"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "OK"
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Une erreur est survenue dans un script Lua :"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "Menu principal"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Ok"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Se reconnecter"
@@ -116,6 +116,10 @@ msgstr ""
"Seuls les caractères alphanumériques [a-z0-9_] sont autorisés."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Rechercher des mods"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod :"
@@ -136,9 +140,8 @@ msgid "No modpack description provided."
msgstr "Aucune description fournie pour le pack de mods."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No optional dependencies"
-msgstr "Pas de dépendances optionnelles"
+msgstr "Pas de dépendances facultatives"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
@@ -162,16 +165,16 @@ msgid "All packages"
msgstr "Tous les paquets"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Retour"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Retour au menu principal"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Téléchargement et installation de $1, veuillez patienter..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "ContentDB n'est pas disponible quand Minetest est compilé sans cURL"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "Chargement..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -216,15 +219,51 @@ msgstr "Désinstaller"
msgid "Update"
msgstr "Mise à jour"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Affichage"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Le monde \"$1\" existe déjà"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "Terrain supplémentaire"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Refroidissement en altitude"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "Faible humidité d'altitude"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Mélange de biomes"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Biomes"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Cavernes"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "Grottes"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Créer"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "Décorations"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Téléchargez un jeu comme Minetest Game depuis minetest.net"
@@ -232,25 +271,147 @@ msgstr "Téléchargez un jeu comme Minetest Game depuis minetest.net"
msgid "Download one from minetest.net"
msgstr "Téléchargez-en un depuis minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "Donjons"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "Terrain plat"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "ÃŽles volantes"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "Îles volantes (expérimental)"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Jeu"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "Générer un terrain non fractal : océans et sous-sol"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Collines"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Rivières irrigantes"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Augmente l'humidité autour des rivières"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Lacs"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "L'air sec et chaud réduit le niveau d'eau ou assèche les rivières"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Générateur de terrain"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Drapeaux de génération de terrain"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Drapeaux indicateurs du générateur de carte"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "Montagnes"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "Coulée de boue"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Réseau souterrain"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Aucun jeu sélectionné"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Réduire la température avec l'altitude"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Réduire l'humidité avec l'altitude"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Rivières"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Rivière au niveau de mer"
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Graine"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr "Transition progressive entre les biomes"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+"Structures apparaissantes sur le sol (sans effets sur la création d'arbre et "
+"de jungle par v6)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+"Structures apparaissant sur le terrain, généralement des arbres et des "
+"plantes"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Tempéré, désertique"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Tempéré, désertique, tropical"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "Tempéré, désertique, tropical, de toundra, de taïga"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "Érosion du sol"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "Arbres et végétation de jungle"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Varier la profondeur fluviale"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "Très grande cavernes profondes"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
msgstr "Avertissement : le jeu minimal est fait pour les développeurs."
#: builtin/mainmenu/dlg_create_world.lua
@@ -403,17 +564,28 @@ msgstr "Z"
msgid "Z spread"
msgstr "Écart Z"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "Valeur absolue"
+#. ~ "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 "par défaut"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr "réaliste (easing)"
+msgstr "lissé"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
@@ -557,6 +729,10 @@ msgid "Host Server"
msgstr "Héberger un serveur"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "Installer à partir de ContentDB"
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Nom / Mot de passe"
@@ -624,9 +800,10 @@ msgstr "Nom / Mot de passe"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
-msgstr "Combat activé"
+msgstr "JcJ activé"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -738,7 +915,7 @@ msgstr "Réinitialiser le monde"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr "Ecran :"
+msgstr "Écran :"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
@@ -869,6 +1046,14 @@ msgstr "Le fichier de mot de passe fourni n'a pas pu être ouvert : "
msgid "Provided world path doesn't exist: "
msgstr "Le chemin du monde spécifié n'existe pas : "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -905,6 +1090,7 @@ msgstr "- Port : "
msgid "- Public: "
msgstr "- Public : "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- JcJ : "
@@ -1041,7 +1227,7 @@ msgstr "La limite de vue a été désactivée"
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr "Retour au menu principal"
+msgstr "Menu Principal"
#: src/client/game.cpp
msgid "Exit to OS"
@@ -1097,7 +1283,7 @@ msgstr "Définitions des items..."
#: src/client/game.cpp
msgid "KiB/s"
-msgstr "Ko/s"
+msgstr "Kio/s"
#: src/client/game.cpp
msgid "Media..."
@@ -1105,7 +1291,7 @@ msgstr "Média..."
#: src/client/game.cpp
msgid "MiB/s"
-msgstr "Mo/s"
+msgstr "Mio/s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
@@ -1200,6 +1386,14 @@ msgid "Sound muted"
msgstr "Son coupé"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "L'audio système est désactivé"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "Cette compilation ne gère pas l'audio du système"
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Son rétabli"
@@ -1231,17 +1425,17 @@ msgstr "Fils de fer affichés"
msgid "Zoom currently disabled by game or mod"
msgstr "Le zoom est actuellement désactivé par un jeu ou un mod"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "ok"
#: src/client/gameui.cpp
msgid "Chat hidden"
-msgstr "Chat caché"
+msgstr "Tchat caché"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr "Chat affiché"
+msgstr "Tchat affiché"
#: src/client/gameui.cpp
msgid "HUD hidden"
@@ -1346,12 +1540,13 @@ msgstr "Menu Gauche"
#: src/client/keycode.cpp
msgid "Left Shift"
-msgstr "Shift gauche"
+msgstr "Maj. gauche"
#: src/client/keycode.cpp
msgid "Left Windows"
msgstr "Windows gauche"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menu"
@@ -1444,9 +1639,10 @@ msgstr "Pause"
msgid "Play"
msgstr "Jouer"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
-msgstr "Imprimer"
+msgstr "Capture d'écran"
#: src/client/keycode.cpp
msgid "Return"
@@ -1480,13 +1676,14 @@ msgstr "Windows droite"
msgid "Scroll Lock"
msgstr "Verr. défilement"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Sélectionner"
#: src/client/keycode.cpp
msgid "Shift"
-msgstr "Shift"
+msgstr "Maj."
#: src/client/keycode.cpp
msgid "Sleep"
@@ -1537,13 +1734,13 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
-"Vous êtes sur le point de rejoindre ce serveur avec le nom \"%s\" pour la "
+"Vous êtes sur le point de rejoindre ce serveur avec le nom « %s » pour la "
"première fois.\n"
"Si vous continuez, un nouveau compte utilisant vos identifiants sera créé "
"sur ce serveur.\n"
-"Veuillez retaper votre mot de passe et cliquer sur \"S'enregistrer et "
-"rejoindre\" pour confirmer la création de votre compte, ou cliquez sur "
-"\"Annuler\"."
+"Veuillez retaper votre mot de passe et cliquer sur « S'enregistrer et "
+"rejoindre » pour confirmer la création de votre compte, ou cliquez sur "
+"« Annuler »."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
@@ -1571,7 +1768,7 @@ msgstr "Changer la caméra"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
-msgstr "Chatter"
+msgstr "Tchat"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Command"
@@ -1591,7 +1788,7 @@ msgstr "Réduire le volume"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
-msgstr "Double-appui sur \"saut\" pour voler"
+msgstr "Double-appui sur « saut » pour voler"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Drop"
@@ -1686,9 +1883,8 @@ msgid "Toggle noclip"
msgstr "Mode sans collision"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
-msgstr "Afficher/retirer le canal de discussion"
+msgstr "Activer/désactiver vol vertical"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -1722,10 +1918,15 @@ msgstr "Muet"
msgid "Sound Volume: "
msgstr "Volume du son : "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Entrer "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "fr"
@@ -1745,12 +1946,11 @@ msgid ""
"If enabled, virtual joystick will also tap \"aux\" button when out of main "
"circle."
msgstr ""
-"(Android) Utiliser le joystick vrituel pour déclencher le bouton \"aux\".\n"
-"Si activé, le joystick virtuel va également appuyer sur le bouton \"aux\" "
+"(Android) Utiliser le joystick vrituel pour déclencher le bouton « aux ».\n"
+"Si activé, le joystick virtuel va également appuyer sur le bouton « aux » "
"lorsqu'en dehors du cercle principal."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1761,17 +1961,17 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-"(X,Y,Z) de décalage fractal à partir du centre du monde en unités "
-"« échelle ».\n"
-"Peut être utilisé pour déplacer un point désiré en (0;0) pour créer une\n"
-"zone d'apparition convenable, ou pour autoriser à « zoomer » sur un\n"
-"point désiré en augmentant l'« échelle ».\n"
-"La valeur par défaut est adaptée pour créer un zone d'apparition convenable "
-"pour les ensembles\n"
-"de Mandelbrot avec des paramètres par défaut, elle peut nécessité une "
-"modification dans\n"
-"d'autres situations.\n"
-"Portée environ -2 à 2. Multiplier par « échelle » pour le décalage des nœuds."
+"(X ; Y ; Z) de décalage fractal à partir du centre du monde en \n"
+"unités « échelle ». Peut être utilisé pour déplacer un point\n"
+"désiré en (0 ; 0) pour créer un point d'apparition convenable,\n"
+"ou pour « zoomer » sur un point désiré en augmentant\n"
+"« l'échelle ».\n"
+"La valeur par défaut est réglée pour créer une zone\n"
+"d'apparition convenable pour les ensembles de Mandelbrot\n"
+"avec les paramètres par défaut, elle peut nécessité une \n"
+"modification dans d'autres situations.\n"
+"Interval environ de -2 à 2. Multiplier par « échelle » convertir\n"
+"le décalage en nœuds."
#: src/settings_translation_file.cpp
msgid ""
@@ -1825,9 +2025,8 @@ msgid "2D noise that controls the size/occurrence of step mountain ranges."
msgstr "Bruit 2D contrôlant la taille et la fréquence des plateaux montagneux."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "2D noise that locates the river valleys and channels."
-msgstr "Bruit 2D contrôlant la forme et la taille des collines arrondies."
+msgstr "Bruit 2D qui localise les vallées fluviales et les canaux"
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -1838,6 +2037,10 @@ msgid "3D mode"
msgstr "Mode écran 3D"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr "Paralaxe en mode 3D"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "Bruit 3D définissant les cavernes géantes."
@@ -1850,6 +2053,19 @@ msgstr ""
"Définit également la structure des montagnes flottantes."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+"Bruit 3D pour la structures des îles volantes.\n"
+"Si la valeur par défaut est changée, le bruit « d'échelle » (0,7 par défaut)"
+"\n"
+"doit peut-être être ajustée, parce que l'effilage des îles volantes\n"
+"fonctionne le mieux quand ce bruit est environ entre -2 et 2."
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "Bruit 3D définissant la structure des gorges."
@@ -1864,7 +2080,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "Bruit 3D qui détermine le nombre de donjons par mapchunk."
#: src/settings_translation_file.cpp
msgid ""
@@ -1914,8 +2130,8 @@ msgid "ABM interval"
msgstr "Intervalle des ABM"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
-msgstr "Limite absolue des files émergentes"
+msgid "Absolute limit of queued blocks to emerge"
+msgstr "Limite stricte de la file de blocs émergents"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -1965,6 +2181,22 @@ msgstr ""
"les écrans 4k."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+"Règle la densité de la couche de massifs volants.\n"
+"La densité augmente avec cette valeur. Peut être positive ou négative.\n"
+"Valeur égale à 0,0 implique 50 % du volume est du massif volant.\n"
+"Valeur égale à 2,0 implique une couche de massifs volants solide\n"
+"(peut dépendre de « mgv7_np_floatland », toujours vérifier pour\n"
+"être sûr)."
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avancé"
@@ -1976,10 +2208,12 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Refroidissement en altitude"
+"Il modifie la courbe de lumière en lui appliquant une \"correction gamma\".\n"
+"Des valeurs plus élevées rendent les niveaux de lumière moyens et inférieurs "
+"plus lumineux.\n"
+"La valeur \"1.0\" laisse la courbe de lumière intacte.\n"
+"Cela n'a d'effet significatif que sur la lumière du jour et les\n"
+"la lumière, et elle a très peu d'effet sur la lumière naturelle de la nuit."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2136,24 +2370,20 @@ msgid "Block send optimize distance"
msgstr "Distance d'optimisation d'envoi des blocs"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Chemin de la police Monospace"
+msgstr "Chemin de la police en gras et en italique"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
msgstr "Chemin de la police Monospace"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Chemin du fichier de police"
+msgstr "Chemin de police audacieux"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Chemin de la police Monospace"
+msgstr "Chemin de police monospace audacieux"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2168,17 +2398,17 @@ msgid "Bumpmapping"
msgstr "Bump mapping"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
-"Caméra à proximité de la distance plane en nœuds, entre 0 et 0,5\n"
-"La plupart des utilisateurs n'auront pas besoin de changer cela.\n"
-"Augmenter peut réduire les artefacts sur les GPU les plus faibles.\n"
-"0,1 = par défaut, 0,25 = bonne valeur pour les tablettes moins performantes."
+"Caméra « près de la coupure de distance » dans les nœuds, entre 0 et 0,25.\n"
+"Fonctionne uniquement sur plateformes GLES.\n"
+"La plupart des utilisateurs n’auront pas besoin de changer cela.\n"
+"L’augmentation peut réduire les anomalies sur des petites cartes graphique.\n"
+"0,1 par défaut, 0,25 bonne valeur pour des composants faibles."
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
@@ -2198,11 +2428,11 @@ msgstr "Bruit des caves"
#: src/settings_translation_file.cpp
msgid "Cave noise #1"
-msgstr "Bruit de cave #1"
+msgstr "Bruit de cave nº 1"
#: src/settings_translation_file.cpp
msgid "Cave noise #2"
-msgstr "Bruit de grotte #2"
+msgstr "Bruit de grotte nº 2"
#: src/settings_translation_file.cpp
msgid "Cave width"
@@ -2210,11 +2440,11 @@ msgstr "Largeur de la grotte"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
-msgstr "Bruit des cave #1"
+msgstr "Bruit des cave nº 1"
#: src/settings_translation_file.cpp
msgid "Cave2 noise"
-msgstr "Bruit des caves #2"
+msgstr "Bruit des caves nº 2"
#: src/settings_translation_file.cpp
msgid "Cavern limit"
@@ -2241,6 +2471,9 @@ msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Gamme de poussée de courbe de centre de lumière.\n"
+"Lorsque 0,0 est le niveau de lumière minimum, et 1,0 est le niveau de "
+"lumière maximum."
#: src/settings_translation_file.cpp
msgid ""
@@ -2260,8 +2493,16 @@ msgstr ""
"- Auto : Simple sur Android, complet pour le reste."
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr "Taille de police du chat"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
-msgstr "Chatter"
+msgstr "Tchatter"
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr "Verbosité logicielle"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
@@ -2285,7 +2526,7 @@ msgstr "Afficher le chat"
#: src/settings_translation_file.cpp
msgid "Chatcommands"
-msgstr "Commandes de chat"
+msgstr "Commandes de tchat"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2309,7 +2550,7 @@ msgstr "Client"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr "Client et Serveur"
+msgstr "Client et serveur"
#: src/settings_translation_file.cpp
msgid "Client modding"
@@ -2451,7 +2692,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
-msgstr ""
+msgstr "Contrôle la vitesse de descente dans un liquide."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2467,10 +2708,14 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Contrôle la largeur des tunnels, une valeur plus faible crée des tunnels "
+"plus large.\n"
+"Valeur >= 10,0 désactive complètement la génération de tunnel et évite le "
+"calcul intensif de bruit."
#: src/settings_translation_file.cpp
msgid "Crash message"
-msgstr "Message d'interruption du serveur"
+msgstr "Message de plantage"
#: src/settings_translation_file.cpp
msgid "Creative"
@@ -2506,7 +2751,7 @@ msgstr "Infos de débogage"
#: src/settings_translation_file.cpp
msgid "Debug log file size threshold"
-msgstr "Seuil de la taille du fichier de logs"
+msgstr "Seuil de la taille du fichier de journal"
#: src/settings_translation_file.cpp
msgid "Debug log level"
@@ -2517,10 +2762,8 @@ msgid "Dec. volume key"
msgstr "Touche pour diminuer le volume"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
-"Diminuer cette valeur pour augmenter la résistance du liquide au mouvement."
+msgstr "Diminuez ceci pour augmenter la résistance liquide au mouvement."
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -2555,6 +2798,10 @@ msgid "Default report format"
msgstr "Format de rapport par défaut"
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr "Taille d’empilement par défaut"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2606,9 +2853,8 @@ msgid "Defines the base ground level."
msgstr "Définit le niveau du sol de base."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the depth of the river channel."
-msgstr "Définit le niveau du sol de base."
+msgstr "Définit la profondeur du court de la rivière."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
@@ -2617,14 +2863,12 @@ msgstr ""
"illimité)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river channel."
-msgstr "Définit la structure des canaux fluviaux à grande échelle."
+msgstr "Définit la largeur des canaux fluviaux."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river valley."
-msgstr "Définit des zones où les arbres ont des pommes."
+msgstr "Définit la largeur de la vallée de la rivière."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
@@ -2671,13 +2915,13 @@ msgid "Desert noise threshold"
msgstr "Limite de bruit pour le désert"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Deserts occur when np_biome exceeds this value.\n"
"When the 'snowbiomes' flag is enabled, this is ignored."
msgstr ""
"Des déserts apparaissent lorsque np_biome dépasse cette valeur.\n"
-"Avec le nouveau système de biomes, ce paramètre est ignoré."
+"Quand le flag 'snowbiomes' est activé, (avec le nouveau système de biomes), "
+"ce paramètre est ignoré."
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
@@ -2701,11 +2945,11 @@ msgstr "Nom de domaine du serveur affichée sur la liste des serveurs publics."
#: src/settings_translation_file.cpp
msgid "Double tap jump for fly"
-msgstr "Double-appui sur \"saut\" pour voler"
+msgstr "Double-appui sur « saut » pour voler"
#: src/settings_translation_file.cpp
msgid "Double-tapping the jump key toggles fly mode."
-msgstr "Double-appui sur \"saut\" pour voler."
+msgstr "Double-appui sur « saut » pour voler."
#: src/settings_translation_file.cpp
msgid "Drop item key"
@@ -2732,6 +2976,8 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Activer la prise en charge IPv6 (pour le client et le serveur).\n"
+"Requis pour que les connexions IPv6 fonctionnent."
#: src/settings_translation_file.cpp
msgid ""
@@ -2822,6 +3068,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Active les vertex buffer objects.\n"
+"Cela devrait grandement augmenter les performances graphiques."
#: src/settings_translation_file.cpp
msgid ""
@@ -2832,14 +3080,14 @@ msgstr ""
"Par exemple : 0 = pas de mouvement, 1 = normal, 2 = double."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
"Active/désactive l'usage d'un serveur IPv6.\n"
-"Ignoré si bind_address est activé."
+"Ignoré si bind_address est activé.\n"
+"A besoin de enable_ipv6 pour être activé."
#: src/settings_translation_file.cpp
msgid ""
@@ -2848,6 +3096,11 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Permet à Hable 'Uncharted 2' de cartographier les tonalités du film.\n"
+"Simule la courbe des tons du film photographique, ce qui se rapproche de la\n"
+"l'apparition d'images à plage dynamique élevée. Le contraste de milieu de "
+"gamme est légèrement\n"
+"améliorées, les reflets et les ombres sont progressivement compressés."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -2897,6 +3150,11 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Active le système audio.\n"
+"S'il est désactivé, cela désactive complètement tous les sons partout et le "
+"jeu\n"
+"les commandes audio ne fonctionneront pas.\n"
+"La modification de ce paramètre nécessite un redémarrage."
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -2915,6 +3173,22 @@ msgstr ""
"quand paramétré avec un nombre supérieur à 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+"Exposant contrôlant la forme du bas des massifs volants.\n"
+"Une valeur égale à 1 donne une forme conique.\n"
+"Une valeur supérieure à 1 donne une longue base éfilée (concave),\n"
+"plus pour des îles volantes comme celles par défaut.\n"
+"Une valeur inférieure à 1 (disons 0,25) donne une surface bien\n"
+"définie en bas, plus pour une couche solide de massif volant."
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS maximum sur le menu pause"
@@ -2931,9 +3205,8 @@ msgid "Fall bobbing factor"
msgstr "Intensité du mouvement de tête en tombant"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Police alternative"
+msgstr "Chemin de police alternative"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -2999,7 +3272,7 @@ msgstr "Bruit de profondeur de remplissage"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
-msgstr "Mappage tonal cinématographique"
+msgstr "Cartographie des tonalités filmiques"
#: src/settings_translation_file.cpp
msgid ""
@@ -3008,7 +3281,7 @@ msgid ""
"light edge to transparent textures. Apply this filter to clean that up\n"
"at texture load time."
msgstr ""
-"Les textures filtrées peuvent mélanger des valeurs RGB avec des zones 100% "
+"Les textures filtrées peuvent mélanger des valeurs RGB avec des zones 100 % "
"transparentes.\n"
"aboutissant parfois à des bords foncés ou clairs sur les textures "
"transparentes.\n"
@@ -3037,6 +3310,34 @@ msgid "Fixed virtual joystick"
msgstr "Fixer le joystick virtuel"
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr "Densité des massifs volants"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr "Maximum Y de massifs volants"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr "Minimum Y des massifs volants"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr "Bruit des massifs volants"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr "Paramètre de forme des massifs volants"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr "Hauteur des bases des massifs volants"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr "Niveau d'eau des massifs volants"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Voler"
@@ -3058,11 +3359,11 @@ msgstr "Brume"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "La police est en gras par défaut"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "La police est en gras par défaut"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3078,15 +3379,23 @@ msgstr "Taille de la police"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "La taille de police par défaut en point (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "Taille de police secondaire au point (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "Taille de la police monospace en point (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 ""
+"Taille de police (en pt) des messages récents et du curseur.\n"
+"Une valeur nulle correspond à la taille par défaut."
#: src/settings_translation_file.cpp
msgid ""
@@ -3226,24 +3535,26 @@ msgid ""
"and junglegrass, in all other mapgens this flag controls all decorations."
msgstr ""
"Attributs de génération de terrain globaux.\n"
-"Dans le générateur de terrain v6, le signal ‹décorations› contrôle toutes "
+"Dans le générateur de terrain v6, le signal « décorations » contrôle toutes "
"les décorations sauf les arbres\n"
"et l’herbe de la jungle, dans tous les autres générateurs de terrain, ce "
"signal contrôle toutes les décorations."
#: 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 "Rampe de la courbe de lumière au niveau maximum."
+msgstr ""
+"Gradient de la courbe de lumière au niveau de lumière maximum. \n"
+"Contrôle le contraste de la lumière aux niveaux d'éclairage les plus élevés."
#: 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 "Rampe de la courbe de lumière au niveau minimum."
+msgstr ""
+"Gradient de la courbe de lumière au niveau de lumière maximum. \n"
+"Contrôle le contraste de la lumière aux niveaux d'éclairage les plus bas."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3274,7 +3585,6 @@ msgid "HUD toggle key"
msgstr "HUD"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- legacy: (try to) mimic old behaviour (default for release).\n"
@@ -3283,8 +3593,8 @@ msgid ""
msgstr ""
"Traitement des appels d'API Lua obsolètes :\n"
"- legacy : imite l'ancien comportement (par défaut en mode release).\n"
-"- log : imite et enregistre les appels obsolètes (par défaut en mode "
-"debug).\n"
+"- log : imite et enregistre les appels obsolètes (par défaut en mode debug)."
+"\n"
"- error : interruption à l'usage d'un appel obsolète (recommandé pour les "
"développeurs de mods)."
@@ -3376,6 +3686,8 @@ msgid ""
"Horizontal and vertical acceleration on ground or when climbing,\n"
"in nodes per second per second."
msgstr ""
+"Accélération horizontale et verticale au sol ou en montée,\n"
+"en blocs par seconde."
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
@@ -3523,6 +3835,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"La vitesse des vagues augmente avec cette valeur.\n"
+"Une valeur négative inverse leur mouvement.\n"
+"Nécessite que l'ondulation des liquides soit active."
#: src/settings_translation_file.cpp
msgid ""
@@ -3670,6 +3985,11 @@ msgid ""
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
+"Si la taille du fichier debug.txt dépasse le nombre de mégaoctets spécifié "
+"dans\n"
+"ce paramètre une fois ouvert, le fisher est déplacé vers debug.txt.1 et\n"
+"supprimera un ancien debug.txt.1 s'il existe.\n"
+"debug.txt n'est déplacé que si ce paramètre est positif."
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
@@ -3701,7 +4021,7 @@ msgstr "Touche d'augmentation de volume"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr ""
+msgstr "Vitesse verticale initiale lors du saut, en blocs par seconde."
#: src/settings_translation_file.cpp
msgid ""
@@ -3773,14 +4093,12 @@ msgid "Invert vertical mouse movement."
msgstr "Inverser les mouvements verticaux de la souris."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Chemin de la police Monospace"
+msgstr "Chemin de la police Italique"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Chemin de la police Monospace"
+msgstr "Chemin de la police Italique Monospace"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4614,15 +4932,15 @@ msgstr "Profondeur des grandes caves"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Grand nombre de grottes maximum"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Nombre minimum de grandes grottes"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Proportion de grandes grottes inondées"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4659,13 +4977,12 @@ msgstr ""
"réseau."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"Mettre sur \"true\" active les feuilles d'arbres mouvantes.\n"
-"Nécessite les shaders pour être activé."
+"Longueur des vagues.\n"
+"Nécessite que l'ondulation des liquides soit active."
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
@@ -4700,42 +5017,28 @@ msgstr ""
"- prolixe"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost"
-msgstr "Boost intermédiaire de la courbe de lumière"
+msgstr "Boost de courbe de lumière"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost center"
-msgstr "Centre du boost intermédiaire de la courbe de lumière"
+msgstr "Centre de boost de courbe de lumière"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost spread"
-msgstr "Étalement du boost intermédiaire de la courbe de lumière"
+msgstr "Étalement du boost de la courbe de lumière"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve gamma"
-msgstr "Boost intermédiaire de la courbe de lumière"
+msgstr "Courbe de lumière gamma"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve high gradient"
-msgstr "Boost intermédiaire de la courbe de lumière"
+msgstr "Fort gradient de la courbe de lumière"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve low gradient"
-msgstr "Centre du boost intermédiaire de la courbe de lumière"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Limite des files émergentes sur le disque"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Limite des files émergentes à générer"
+msgstr "Faible gradient de la courbe de lumière"
#: src/settings_translation_file.cpp
msgid ""
@@ -4779,9 +5082,8 @@ msgid "Liquid queue purge time"
msgstr "Délais de nettoyage d'une file de liquide"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Liquid sinking"
-msgstr "Vitesse d'écoulement du liquide"
+msgstr "Écoulement du liquide"
#: src/settings_translation_file.cpp
msgid "Liquid update interval in seconds."
@@ -4814,6 +5116,10 @@ msgid "Lower Y limit of dungeons."
msgstr "Limite basse Y des donjons."
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr "Borne inférieure Y des massifs volants."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Script du menu principal"
@@ -4847,23 +5153,22 @@ msgid "Map generation attributes specific to Mapgen Carpathian."
msgstr "Attributs spécifiques au Mapgen 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 ""
-"Attributs de terrain spécifiques au générateur plat.\n"
+"Attributs de terrain spécifiques au générateur de monde plat.\n"
"Des lacs et des collines occasionnels peuvent être ajoutés au monde plat."
#: 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 ""
-"Attributs spécifiques au Mapgen v7.\n"
-"'crêtes' activent les rivières."
+"Attributs de terrain spécifiques au générateur de monde fractal.\n"
+"'terrain' active la création de terrain non fractal,\n"
+"c-à-d un océan, des îles et du souterrain."
#: src/settings_translation_file.cpp
msgid ""
@@ -4887,7 +5192,6 @@ msgid "Map generation attributes specific to Mapgen v5."
msgstr "Attributs spécifiques au Mapgen v5."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v6.\n"
"The 'snowbiomes' flag enables the new 5 biome system.\n"
@@ -4895,18 +5199,21 @@ msgid ""
"the 'jungles' flag is ignored."
msgstr ""
"Attributs de génération du monde spécifiques au générateur v6.\n"
-"Le signal ‹snowbiomes› active le nouveau système de 5 biomes.\n"
-"Quand le nouveau système est activé les jungles sont automatiquement "
-"activées et\n"
-"le signal ‹jungles› est ignoré."
+"Le paramètre ‹snowbiomes› active le nouveau système à 5 biomes.\n"
+"Sous ce nouveau système, la création de jungles est automatique\n"
+"et le paramètre ‹jungles› est ignoré."
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
"Attributs spécifiques au Mapgen v7.\n"
-"'crêtes' activent les rivières."
+"- 'ridges', « crêtes » pour des rivières.\n"
+"- 'floatlands', « massifs volant » massifs de terres atmosphèrique.\n"
+"- 'caverns', « cavernes » pour des grottes immenses et profondes."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -4953,36 +5260,32 @@ msgid "Mapgen Fractal"
msgstr "Générateur de terrain Fractal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal specific flags"
-msgstr "Signaux spécifiques au générateur de terrain plat"
+msgstr "Drapeaux spécifiques au générateur Fractal"
#: src/settings_translation_file.cpp
msgid "Mapgen V5"
msgstr "Générateur de terrain V5"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V5 specific flags"
-msgstr "Signaux spécifiques au générateur v5"
+msgstr "Drapeaux spécifiques au générateur v5"
#: src/settings_translation_file.cpp
msgid "Mapgen V6"
msgstr "Générateur de terrain V6"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V6 specific flags"
-msgstr "Signaux spécifiques au générateur v6"
+msgstr "Drapeaux spécifiques au générateur V6"
#: src/settings_translation_file.cpp
msgid "Mapgen V7"
msgstr "Générateur de terrain v7"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V7 specific flags"
-msgstr "Signaux spécifiques au générateur v7"
+msgstr "Drapeaux spécifiques au générateur V7"
#: src/settings_translation_file.cpp
msgid "Mapgen Valleys"
@@ -4997,10 +5300,6 @@ msgid "Mapgen debug"
msgstr "Débogage de la génération du terrain"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Drapeaux de génération de terrain"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Nom du générateur de carte"
@@ -5043,16 +5342,20 @@ msgstr "Largeur maximale de la barre d'inventaire"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
msgstr ""
+"Limite maximale pour le nombre aléatoire de grandes grottes par mapchunk."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Limite maximale du nombre aléatoire de petites grottes par mapchunk."
#: src/settings_translation_file.cpp
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
+"Résistance maximale aux liquides. Contrôle la décélération lorsqu'un joueur "
+"entre dans un liquide à\n"
+"haute vitesse."
#: src/settings_translation_file.cpp
msgid ""
@@ -5071,7 +5374,7 @@ msgstr "Nombre maximum de mapblocks qui peuvent être listés pour chargement."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Nombre maximum de mapblocks à lister qui doivent être générés.\n"
"Laisser ce champ vide pour un montant approprié défini automatiquement."
@@ -5079,7 +5382,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Nombre maximum de mapblocks à lister qui doivent être générés depuis un "
"fichier.\n"
@@ -5180,6 +5483,10 @@ msgid "Method used to highlight selected object."
msgstr "Méthodes utilisées pour l'éclairage des objets."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr "Verbosité minimale du log dans le chat."
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Mini-carte"
@@ -5193,11 +5500,11 @@ msgstr "Hauteur de scannage de la mini-carte"
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Minimum pour le nombre de grandes grottes par mapchunk tiré au hasard."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Minimum pour le nombre de petites grottes par mapchunk tiré au hasard."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
@@ -5268,7 +5575,6 @@ msgid "Mute sound"
msgstr "Couper le son"
#: 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"
@@ -5277,13 +5583,9 @@ msgid ""
msgstr ""
"Nom du générateur de terrain qui sera utilisé à la création d’un nouveau "
"monde.\n"
-"Créer un nouveau monde depuis le menu principal ignorera ceci.\n"
-"Les générateurs actuellement stables sont :\n"
-"v5, v6, v7 (sauf îles flottantes), bloc unique.\n"
-"‹stable› signifie que la génération d’un monde préexistant ne sera pas "
-"changée\n"
-"dans le futur. Notez cependant que les biomes sont définis par les jeux et "
-"peuvent être sujets à changement."
+"Cela sera perdu à la création d'un monde depuis le menu principal.\n"
+"Les générateurs actuellement très instables sont :\n"
+"- Les massifs volants du générateur v7 (option inactive par défaut)."
#: src/settings_translation_file.cpp
msgid ""
@@ -5303,8 +5605,7 @@ msgstr ""
"joueurs se connectent."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr "Plan à proximité"
#: src/settings_translation_file.cpp
@@ -5356,12 +5657,8 @@ msgid "Number of emerge threads"
msgstr "Nombre de tâches en cours"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5372,19 +5669,17 @@ msgid ""
"processes, especially in singleplayer and/or when running Lua code in\n"
"'on_generated'. For many users the optimum setting may be '1'."
msgstr ""
-"Nombre de threads à utiliser.\n"
-"Rien ou 0 :\n"
-"— Sélection automatique. Le nombre de threads sera\n"
-"« nombre de processeurs − 2 », avec une limite inférieure de 1.\n"
+"Nombre de threads « emerge » à utiliser.\n"
+"Valeur nulle :\n"
+"— Sélection automatique. Le nombre de threads sera le\n"
+"« nombre de processeurs moins 2 », avec un minimum de 1.\n"
"Toute autre valeur :\n"
-"— Spécifie le nombre de threads, avec une limite inférieure de 1.\n"
-"Avertissement : Augmenter le nombre de threads augmente la génération du "
-"terrain du moteur\n"
-"mais cela peut nuire à la performance du jeu en interférant avec d’autres.\n"
-"processus, en particulier en mode solo ou lors de l’exécution du code Lua en "
-"mode\n"
-"« on_generated ».\n"
-"Pour de nombreux utilisateurs, le réglage optimal peut être « 1 »."
+"— Spécifie le nombre de threads, avec un minimum de 1.\n"
+"ATTENTION : augmenter le nombre de threads accélère bien la création\n"
+"de terrain, mais cela peut nuire à la performance du jeu en interférant\n"
+"avec d’autres processus, en particulier en mode solo ou lors de \n"
+"l’exécution du code Lua en mode « on_generated ».\n"
+"Pour beaucoup, le réglage optimal peut être « 1 »."
#: src/settings_translation_file.cpp
msgid ""
@@ -5414,11 +5709,13 @@ msgstr "Liquides opaques"
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
msgstr ""
+"Opacité (alpha) de l'ombre derrière la police par défaut, entre 0 et 255."
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
msgstr ""
+"Opacité (alpha) de l'ombre derrière la police secondaire, entre 0 et 255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5458,10 +5755,6 @@ msgid "Parallax occlusion scale"
msgstr "Echelle de l'occlusion parallaxe"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Force de l'occlusion parallaxe"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5469,10 +5762,20 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Chemin de la police de repli.\n"
+"Si le paramètre \"freetype\" est activé : doit être une police TrueType.\n"
+"Si le paramètre \"freetype\" est désactivé : doit être une police de "
+"vecteurs bitmap ou XML.\n"
+"Cette police sera utilisée pour certaines langues ou si la police par défaut "
+"n’est pas disponible."
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Chemin où les captures d'écran sont sauvegardées."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+"Chemin d'accès pour les captures d'écran (absolu ou relatif).\n"
+"La création du dossier sera faite si besoin."
#: src/settings_translation_file.cpp
msgid ""
@@ -5495,6 +5798,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 ""
+"Chemin vers la police par défaut.\n"
+"Si le paramètre \"freetype\" est activé : doit être une police TrueType.\n"
+"Si le paramètre \"freetype\" est désactivé : doit être une police de "
+"vecteurs bitmap ou XML.\n"
+"La police de rentrée sera utilisée si la police ne peut pas être chargée."
#: src/settings_translation_file.cpp
msgid ""
@@ -5503,12 +5811,26 @@ 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 ""
+"Chemin vers la police monospace.\n"
+"Si \"freetype\" est activé : doit être une police TrueType.\n"
+"Si \"freetype\" est désactivé : doit être une police de vecteurs bitmap ou "
+"XML.\n"
+"Cette police est utilisée par exemple pour la console et l’écran du "
+"profileur."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
msgstr "Mettre en pause sur perte du focus de la fenêtre"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr "Limite par joueur de blocs en attente à charger depuis le disque"
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Limite par joueur des blocs émergents à créer"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Physique"
@@ -5591,8 +5913,24 @@ msgid "Profiling"
msgstr "Profilage"
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "Prometheus listener address"
+msgstr "Adresse d'écoute pour Prometheus"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
msgstr ""
+"Adresse d'écoute pour Prometheus.\n"
+"Lorsque Minetest est compilé avec l'option ENABLE_PROMETHEUS,\n"
+"cette adresse est utilisée pour l'écoute de données pour Prometheus.\n"
+"Les données sont sur http://127.0.0.1:30000/metrics"
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr "Proportion de grandes grottes qui contiennent du liquide."
#: src/settings_translation_file.cpp
msgid ""
@@ -5621,9 +5959,8 @@ msgid "Recent Chat Messages"
msgstr "Messages de discussion récents"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Chemin du rapport"
+msgstr "Chemin d'accès pour la police normale"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5651,7 +5988,6 @@ msgid "Report path"
msgstr "Chemin du rapport"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Restricts the access of certain client-side functions on servers.\n"
"Combine the byteflags below to restrict client-side features, or set to 0\n"
@@ -5665,12 +6001,13 @@ msgid ""
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
"Limite l'accès de certaines fonctions côté client sur les serveurs\n"
-"Combine these byteflags below to restrict client-side features:\n"
-"LOAD_CLIENT_MODS: 1 (désactive le chargement des mods du client)\n"
-"CHAT_MESSAGES: 2 (désactivez l'appel send_chat_message côté client)\n"
-"READ_ITEMDEFS: 4 (désactivez l'appel get_item_def côté client)\n"
-"READ_NODEDEFS: 8 (désactiver l'appel côté client de get_node_def)\n"
-"LOOKUP_NODES_LIMIT: 16 (limite les appels get_node côté client à\n"
+"Combiner les byteflags si dessous pour restraindre ou mettre 0\n"
+"pour laisser sans restriction.\n"
+"LOAD_CLIENT_MODS : 1 (désactive le chargement des mods du client)\n"
+"CHAT_MESSAGES : 2 (désactivez l'appel send_chat_message côté client)\n"
+"READ_ITEMDEFS : 4 (désactivez l'appel get_item_def côté client)\n"
+"READ_NODEDEFS : 8 (désactiver l'appel côté client de get_node_def)\n"
+"LOOKUP_NODES_LIMIT : 16 (limite les appels get_node côté client à\n"
"csm_restriction_noderange)"
#: src/settings_translation_file.cpp
@@ -5698,14 +6035,12 @@ msgid "Rightclick repetition interval"
msgstr "Intervalle de répétition du clic droit"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel depth"
msgstr "Profondeur des rivières"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel width"
-msgstr "Profondeur des rivières"
+msgstr "Largeur des rivières"
#: src/settings_translation_file.cpp
msgid "River depth"
@@ -5720,9 +6055,8 @@ msgid "River size"
msgstr "Taille des rivières"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River valley width"
-msgstr "Profondeur des rivières"
+msgstr "Largeur des vallées fluviales"
#: src/settings_translation_file.cpp
msgid "Rollback recording"
@@ -5843,7 +6177,6 @@ msgid "Selection box width"
msgstr "Epaisseur des bords de sélection"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -5936,30 +6269,29 @@ msgstr ""
"par les clients."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
-"Mettre sur \"true\" active les feuilles d'arbres mouvantes.\n"
-"Nécessite les shaders pour être activé."
+"Mettre sur « true » active le mouvement des\n"
+"feuilles d'arbres mouvantes. Nécessite les\n"
+"shaders pour être activé."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"Mettre sur \"true\" active les vagues.\n"
+"Mettre sur « true » active les vagues.\n"
"Nécessite les shaders pour être activé."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
-"Mettre sur \"true\" active les plantes mouvantes.\n"
+"Mettre sur « true » active le mouvement\n"
+"des végétaux.\n"
"Nécessite les shaders pour être activé."
#: src/settings_translation_file.cpp
@@ -5978,22 +6310,20 @@ msgstr ""
"Fonctionne seulement avec 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 ""
-"Décalage de l'ombre de la police, si 0 est choisi alors l'ombre ne "
-"s'affichera pas."
+"Décalage de l'ombre de la police par défaut (en pixel). Aucune ombre si la "
+"valeur est 0."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
"be drawn."
msgstr ""
-"Décalage de l'ombre de la police, si 0 est choisi alors l'ombre ne "
-"s'affichera pas."
+"Décalage de l'ombre de la police de secours (en pixel). Aucune ombre si la "
+"valeur est 0."
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6050,11 +6380,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Nombre maximum de petites grottes"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Nombre maximum de petites grottes"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6097,7 +6427,7 @@ msgstr "Vitesse d'accroupissement"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
-msgstr ""
+msgstr "Vitesse furtive, en blocs par seconde."
#: src/settings_translation_file.cpp
msgid "Sound"
@@ -6127,14 +6457,25 @@ msgstr ""
"habituelle."
#: 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 ""
+"Donne les valeurs par défaut de la taille des piles de nœuds, d'items et "
+"d'outils.\n"
+"Les mods ou les parties peuvent fixer explicitement une pile pour certains "
+"items."
+
+#: src/settings_translation_file.cpp
msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
msgstr ""
-"Propagation de la courbe de lumière mi-boost.\n"
-"Écart-type du gaussien moyennement boosté."
+"Longueur d'intervalle de l'amplification de la courbe de lumière.\n"
+"Contrôle la largeur de l'intervalle d'amplification.\n"
+"Écart type de la gaussienne d'amplification de courbe de lumière."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6153,6 +6494,10 @@ msgid "Step mountain spread noise"
msgstr "Bruit pour l’étalement des montagnes en escalier"
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr "Intensité de parallaxe en mode 3D."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Force des normalmaps autogénérés."
@@ -6162,10 +6507,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Force de l'occlusion parallaxe."
+"Niveau d'amplification de la courbure de la lumière.\n"
+"Les trois paramètres « d'amplification » définissent un intervalle\n"
+"de la courbe de lumière pour lequel la luminosité est amplifiée."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6176,6 +6520,20 @@ msgid "Strip color codes"
msgstr "Echapper les codes de couleur"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "SQLite synchronisé"
@@ -6291,6 +6649,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"La hauteur maximale de la surface des liquides ondulants.\n"
+"4.0 - La hauteur des vagues est de deux nœuds.\n"
+"0.0 - La vague ne bouge pas du tout.\n"
+"Par défaut est de 1,0 (1/2 nœud).\n"
+"Nécessite d’activer les liquides ondulants."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6305,6 +6668,7 @@ msgstr ""
"Entrer /privs dans le jeu pour voir une liste complète des privilèges."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The radius of the volume of blocks around every player that is subject to "
"the\n"
@@ -6312,7 +6676,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
"Le rayon du volume de blocs autour de chaque joueur soumis à la\n"
"truc de bloc actif, indiqué dans mapblocks (16 noeuds).\n"
@@ -6523,6 +6887,11 @@ msgid "Upper Y limit of dungeons."
msgstr "Limite haute Y des donjons."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Limite haute Y des donjons."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Activer les nuages 3D au lieu des nuages 2D (plats)."
@@ -6619,7 +6988,7 @@ msgstr "Contrôle l'élévation/hauteur des falaises."
#: src/settings_translation_file.cpp
msgid "Vertical climbing speed, in nodes per second."
-msgstr ""
+msgstr "Vitesse d’escalade verticale, en nœuds par seconde."
#: src/settings_translation_file.cpp
msgid "Vertical screen synchronization."
@@ -6686,7 +7055,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
-msgstr ""
+msgstr "Vitesse de marche et de vol, en nœuds par seconde."
#: src/settings_translation_file.cpp
msgid "Walking speed"
@@ -6695,6 +7064,7 @@ msgstr "Vitesse de marche"
#: src/settings_translation_file.cpp
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
msgstr ""
+"Vitesse de marche, de vol et de montée en mode rapide, en nœuds par seconde."
#: src/settings_translation_file.cpp
msgid "Water level"
@@ -6826,12 +7196,19 @@ msgid "Whether to fog out the end of the visible area."
msgstr "Détermine la visibilité de la brume au bout de l'aire visible."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Whether to mute sounds. You can unmute sounds at any time, unless the\n"
"sound system is disabled (enable_sound=false).\n"
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"S'il faut mettre les sons en sourdine. Vous pouvez désactiver les sons à "
+"tout moment, sauf si le\n"
+"le système de sonorisation est désactivé (enable_sound=false).\n"
+"Dans le jeu, vous pouvez passer en mode silencieux avec la touche de mise en "
+"sourdine ou en utilisant la\n"
+"menu pause."
#: src/settings_translation_file.cpp
msgid ""
@@ -6916,6 +7293,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr "La distance Y jusqu'à laquelle la caverne peut s'étendre."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Hauteur (Y) moyenne de la surface du terrain."
@@ -7017,18 +7402,6 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "Floatland mountain height"
#~ msgstr "Hauteur des montagnes flottantes"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Densité des montagnes flottantes"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Densité des montagnes flottantes"
-
-#~ msgid "Floatland level"
-#~ msgstr "Hauteur des terrains flottants"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Le bruit de base des terres flottantes"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Le bruit de hauteur de base des terres flottantes"
@@ -7075,3 +7448,21 @@ msgstr "Délais d'interruption de cURL"
#~ msgstr ""
#~ "Ajuster la correction gamma. Les valeurs plus basses sont plus claires.\n"
#~ "Ce paramètre s'applique au client seulement et est ignoré par le serveur."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Chemin où les captures d'écran sont sauvegardées."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Force de l'occlusion parallaxe"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Limite des files émergentes sur le disque"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Téléchargement et installation de $1, veuillez patienter..."
+
+#~ msgid "Back"
+#~ msgstr "Retour"
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
diff --git a/po/gd/minetest.po b/po/gd/minetest.po
new file mode 100644
index 000000000..c3347ecda
--- /dev/null
+++ b/po/gd/minetest.po
@@ -0,0 +1,6635 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\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/"
+"gd/>\n"
+"Language: gd\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
+"(n > 2 && n < 20) ? 2 : 3;\n"
+"X-Generator: Weblate 4.2-dev\n"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr ""
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr ""
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Prìomh chlàr-taice"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr ""
+
+#: builtin/mainmenu/common.lua src/client/game.cpp
+msgid "Loading..."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr " "
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Server enforces protocol version $1. "
+msgstr " "
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+#, fuzzy
+msgid "Protocol version mismatch. "
+msgstr " "
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr "Gun eisimeileachd chruaidh"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"characters [a-z0-9_] are allowed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Aibhnean air àirde na mara"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Aibhnean"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Tìr air fhleòd san speur"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Aibhnean boga"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Nì seo an tìr nas buige faisg air aibhnean"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Caochail doimhne nan aibhnean"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "Adhbharaichidh saoghal tioram is teth aibhnean tana no tioram"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no games installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Brataich gineadair nam mapa"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Brataich shònraichte do ghineadair nam mapa"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a game, such as Minetest Game, from minetest.net"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Gineadair nam mapa"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
+#: src/client/keycode.cpp
+msgid "Delete"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid ""
+"This modpack has an explicit name given in its modpack.conf which will "
+"override any renaming here."
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistance"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr ""
+
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "defaults"
+msgstr ""
+
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "eased"
+msgstr ""
+
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "absvalue"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: file: \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: Unsupported file type \"$1\" or broken archive"
+msgstr ""
+"Stàladh: Faidhle dhen t-seòrsa “$1†ris nach eil taic no tasglann bhriste"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Installed Packages:"
+msgstr "Pacaidean air an stàladh:"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Browse online content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No package description available"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Rename"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No dependencies."
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Disable Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Use Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Information:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Uninstall Package"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Content"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "Stàlaich geamannan o ContentDB"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Configure"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "New"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select World:"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative Mode"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Enable Damage"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Announce Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Name/Password"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Bind Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Server Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Play Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Start Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Address / Port"
+msgstr "Seòladh / Port"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Ping"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Join Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "None"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr "Sgrìn:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (unavailable)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Reset singleplayer world"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
+msgid "Change Keys"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "All Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold: (px)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Generate Normal Maps"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Liquids"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr ""
+"Airson sgàileadairean a chur an comas, feumaidh tu draibhear OpenGL a "
+"chleachdadh."
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr ""
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr ""
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Connection timed out."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Loading textures..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Rebuilding shaders..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+#, fuzzy
+msgid "Provided password file failed to open: "
+msgstr " "
+
+#: src/client/clientlauncher.cpp
+msgid "Please choose a name!"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+#, fuzzy
+msgid "Provided world path doesn't exist: "
+msgstr " "
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr ""
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
+#: src/client/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "no"
+
+#: src/client/game.cpp
+msgid "Shutting down..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating client..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Resolving address..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connecting to server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Item definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Node definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Media..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "KiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "MiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client side scripting is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound muted"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound unmuted"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Volume changed to %d%%"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "ok"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled"
+msgstr "Tha am modh sgiathaidh an comas"
+
+#: src/client/game.cpp
+msgid "Fly mode enabled (note: no 'fly' privilege)"
+msgstr "Tha am modh sgiathaidh an comas (an aire: gun sochair “flyâ€)"
+
+#: src/client/game.cpp
+msgid "Fly mode disabled"
+msgstr "Tha am modh sgiathaidh à comas"
+
+#: src/client/game.cpp
+msgid "Pitch move mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled (note: no 'fast' privilege)"
+msgstr "Tha am modh luath an comas (an aire: gun sochair “fastâ€)"
+
+#: src/client/game.cpp
+msgid "Fast mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled"
+msgstr "Tha am modh gun bhearradh an comas"
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled (note: no 'noclip' privilege)"
+msgstr "Tha am modh gun bhearradh an comas (an aire: gun sochair “noclipâ€)"
+
+#: src/client/game.cpp
+msgid "Noclip mode disabled"
+msgstr "Tha am modh gun bhearradh à comas"
+
+#: src/client/game.cpp
+msgid "Cinematic mode enabled"
+msgstr "Tha am modh film an comas"
+
+#: src/client/game.cpp
+msgid "Cinematic mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x1"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x2"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x4"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x1"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x2"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x4"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Profiler graph shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Wireframe shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info, profiler graph, and wireframe hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info and profiler graph hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update enabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at maximum: %d"
+msgstr "Tha astar na faicsinn cho mòr sa ghabhas: %d"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range changed to %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at minimum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Enabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Disabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Zoom currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid ""
+"Controls:\n"
+"- %s: move forwards\n"
+"- %s: move backwards\n"
+"- %s: move left\n"
+"- %s: move right\n"
+"- %s: jump/climb\n"
+"- %s: sneak/go down\n"
+"- %s: drop item\n"
+"- %s: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- %s: chat\n"
+msgstr ""
+"Stiùireadh:\n"
+"- %s: gluais an comhair a’ bheòil\n"
+"- %s: gluais an comhair a’ chùil\n"
+"- %s: gluais dhan taobh clì\n"
+"- %s: gluais dhan taobh deas\n"
+"- %s: leum/sreap\n"
+"- %s: tàislich/dìrich\n"
+"- %s: leig às nì\n"
+"- %s: an tasgadh\n"
+"- Luchag: tionndaidh/coimhead\n"
+"- Putan clì na luchaige: geàrr/buail\n"
+"- Putan deas na luchaige: cuir ann/cleachd\n"
+"- Cuibhle na luchaige: tagh nì\n"
+"- %s: cabadaich\n"
+
+#: src/client/game.cpp
+msgid "Continue"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Change Password"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game paused"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound Volume"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to Menu"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to OS"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game info:"
+msgstr "Fiosrachadh mun gheama:"
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "- Mode: "
+msgstr " "
+
+#: src/client/game.cpp
+msgid "Remote server"
+msgstr ""
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "- Address: "
+msgstr " "
+
+#: src/client/game.cpp
+msgid "Hosting server"
+msgstr ""
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "- Port: "
+msgstr " "
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "On"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Off"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Damage: "
+msgstr "– Dochann: "
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "- Creative Mode: "
+msgstr " "
+
+#. ~ PvP = Player versus Player
+#: src/client/game.cpp
+#, fuzzy
+msgid "- PvP: "
+msgstr " "
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "- Public: "
+msgstr " "
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "- Server Name: "
+msgstr " "
+
+#: src/client/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat shown"
+msgstr "Tha a’ chabadaich ’ga shealltainn"
+
+#: src/client/gameui.cpp
+msgid "Chat hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+#, c-format
+msgid "Profiler shown (page %d of %d)"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Profiler hidden"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 2"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Backspace"
+msgstr "Backspace"
+
+#: src/client/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Return"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Control"
+msgstr ""
+
+#. ~ Key name, common on Windows keyboards
+#: src/client/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Pause"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Caps Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "End"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Left"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Up"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Right"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Down"
+msgstr ""
+
+#. ~ Key name
+#: src/client/keycode.cpp
+msgid "Select"
+msgstr ""
+
+#. ~ "Print screen" key
+#: src/client/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 0"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 2"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 3"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 4"
+msgstr "4 air pada nan àireamhan"
+
+#: src/client/keycode.cpp
+msgid "Numpad 5"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 6"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 7"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 8"
+msgstr "8 air pada nan àireamhan"
+
+#: src/client/keycode.cpp
+msgid "Numpad 9"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad *"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad +"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad ."
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad -"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad /"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Num Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Control"
+msgstr "Control clì"
+
+#: src/client/keycode.cpp
+msgid "Right Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Escape"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Convert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Nonconvert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Accept"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Mode Change"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Apps"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Erase EOF"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Play"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Zoom"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "OEM Clear"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+#, c-format
+msgid ""
+"You are about to join this server with the name \"%s\" for the first time.\n"
+"If you proceed, a new account using your credentials will be created on this "
+"server.\n"
+"Please retype your password and click 'Register and Join' to confirm account "
+"creation, or click 'Cancel' to abort."
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+msgid "Register and Join"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ""
+
+#: src/gui/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "\"Special\" = climb down"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Thoir gnogag dhùbailte air “leum†airson sgiathadh a thoglachadh"
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Automatic jumping"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "brùth air iuchair"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Special"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Tàislich"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Prev. item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Next item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Change camera"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle minimap"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Toglaich sgiathadh"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle pitchmove"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr "Toglaich am modh gun bhearradh"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Mute"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Autoforward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. range"
+msgstr "Meudaich an t-astar"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Local command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle HUD"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle chat log"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fog"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "New Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Change"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+#, fuzzy
+msgid "Sound Volume: "
+msgstr " "
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Exit"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Muted"
+msgstr ""
+
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
+#: src/gui/modalMenu.cpp
+msgid "Enter "
+msgstr "Cuir a-steach "
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
+#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
+msgid "LANG_CODE"
+msgstr "gd"
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+"Ma tha seo an comas, ’s urrainn dhut blocaichean a chur ann far a bheil thu ’"
+"nad sheasamh (co chois + àirde do shùil).\n"
+"Bidh seo feumail nuair a bhios tu ag obair le bogsaichean nòd ann an "
+"raointean beaga."
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Sgiathadh"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+"’S urrainn dhan chluicheadair sgiathadh gun bhuaidh na iom-tharraing air.\n"
+"Bidh feum air sochair “fly†air an fhrithealaiche."
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, makes move directions relative to the player's pitch when flying "
+"or swimming."
+msgstr ""
+"Ma tha seo an comas, bidh an gluasad a-rèir pids a’ chluicheadair rè "
+"sgiathaidh no snàimh."
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via the \"special\" key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"Gluasad luath (leis an iuchair “shònraichteâ€).\n"
+"Bidh feum air sochair “fast†air an fhrithealaiche."
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr "Gun bhearradh"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled together with fly mode, player is able to fly through solid "
+"nodes.\n"
+"This requires the \"noclip\" privilege on the server."
+msgstr ""
+"Ma tha seo an comas còmhla ris a’ mhodh sgiathaidh, ’s urrainn dhan "
+"chluicheadair sgiathadh tro nòdan soladach.\n"
+"Bidh feum air sochair “noclip†on fhrithealaiche."
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when looking around. Also called look or mouse smoothing.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Special key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
+"down and\n"
+"descending."
+msgstr ""
+"Ma tha seo an comas, thèid iuchair “shònraichte†seach “tàisleachaidh†a "
+"chleachdadh\n"
+"airson dìreadh."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "Thoir gnogag dhùbailte airson leum no sgiathadh"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "Toglaichidh gnogag dhùbailte air iuchair an leuma am modh sgiathaidh."
+
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "Sgiathaich an-còmhnaidh ’s gu luath"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
+"are\n"
+"enabled."
+msgstr ""
+"Ma tha seo à comas, thèid iuchair “shònraichte†a chleachdadh airson "
+"sgiathadh\n"
+"ma tha an dà chuid am modh sgiathaidh ’s am modh luadh an comas."
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right\n"
+"mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically jump up single-node obstacles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Safe digging and placing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prevent digging and placing from repeating when holding the mouse buttons.\n"
+"Enable this when you dig or place too often by accident."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Continuous forward movement, toggled by autoforward key.\n"
+"Press the autoforward key again or the backwards movement to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Touch screen threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The length in pixels it takes for touch screen interaction to start."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed virtual joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Fixes the position of virtual joystick.\n"
+"If disabled, virtual joystick will center to first-touch's position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Virtual joystick triggers aux button"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Use virtual joystick to trigger \"aux\" button.\n"
+"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"circle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick ID"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The identifier of the joystick to use"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The type of joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick button repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated events\n"
+"when holding down a joystick button combination."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick frustum sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The sensitivity of the joystick axes for moving the\n"
+"ingame view frustum around."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"Will also disable autoforward, when active.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a ghluaiseas an cluicheadair dhan taobh chlì.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a ghluaiseas an cluicheadair dhan taobh deas.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr "Iuchair an tàisleachaidh"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair airson tàisleachadh.\n"
+"Tha i ‘ga cleachdadh airson dìreadh agus dìreadh san uisge ma bhios "
+"aux1_descends à comas.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Special key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a ghluaiseas gu luath sa mhodh luath.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type local commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "Iuchair an sgiathaidh"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thoglaicheas an sgiathadh.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr "Iuchair modha gun bhearradh"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thoglaicheas am modh gun bhearradh.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar next key"
+msgstr "Iuchair air adhart a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the next item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an ath-nì air a’ ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar previous key"
+msgstr "Iuchair air ais a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the previous item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an nì roimhe air a’ ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Mute key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for muting the game.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inc. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling autoforward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View zoom key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key to use view zoom when possible.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 1 key"
+msgstr "Iuchair air slot 1 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas a’ chiad slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 2 key"
+msgstr "Iuchair air slot 2 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the second hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an dàrna slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 3 key"
+msgstr "Iuchair air slot 3 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the third hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an treas slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 4 key"
+msgstr "Iuchair air slot 4 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fourth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an ceathramh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 5 key"
+msgstr "Iuchair air slot 5 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an còigeamh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 6 key"
+msgstr "Iuchair air slot 6 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the sixth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an siathamh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 7 key"
+msgstr "Iuchair air slot 7 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the seventh hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an seachdamh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 8 key"
+msgstr "Iuchair air slot 8 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the eighth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an t-ochdamh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 9 key"
+msgstr "Iuchair air slot 9 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an naoidheamh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 10 key"
+msgstr "Iuchair air slot 10 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an deicheamh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 11 key"
+msgstr "Iuchair air slot 11 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an 11mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
+msgstr "Iuchair air slot 12 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an 12mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
+msgstr "Iuchair air slot 13 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an 13mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 14 key"
+msgstr "Iuchair air slot 14 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an 14mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 15 key"
+msgstr "Iuchair air slot 15 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an 15mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 16 key"
+msgstr "Iuchair air slot 16 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an 16mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 17 key"
+msgstr "Iuchair air slot 17 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an 17mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 18 key"
+msgstr "Iuchair air slot 18 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an 18mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 19 key"
+msgstr "Iuchair air slot 19 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 19th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas an 19mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 20 key"
+msgstr "Iuchair air slot 20 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 20th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 20mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 21 key"
+msgstr "Iuchair air slot 21 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 21mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
+msgstr "Iuchair air slot 22 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 22mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 23 key"
+msgstr "Iuchair air slot 23 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 23rd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 23mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 24 key"
+msgstr "Iuchair air slot 24 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 24th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 24mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 25 key"
+msgstr "Iuchair air slot 25 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 25th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 25mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 26 key"
+msgstr "Iuchair air slot 26 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 26th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 26mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 27 key"
+msgstr "Iuchair air slot 27 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 27th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 27mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 28 key"
+msgstr "Iuchair air slot 28 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 28th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 28mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 29 key"
+msgstr "Iuchair air slot 29 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 29th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 29mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 30 key"
+msgstr "Iuchair air slot 30 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 30th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 30mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 31 key"
+msgstr "Iuchair air slot 31 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 31st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 31mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 32 key"
+msgstr "Iuchair air slot 32 a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 32nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"An iuchair a thaghas am 32mh slot dhen ghrad-bhàr.\n"
+"Faic http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large chat console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the large chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camera update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr "Iuchair toglachadh an fhiosrachaidh dì-bhugachaidh"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable vertex buffer objects.\n"
+"This should greatly improve graphics performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Digging particles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Adds particles when digging a node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Use mip mapping to scale textures. May slightly increase performance,\n"
+"especially when using a high resolution texture pack.\n"
+"Gamma correct downscaling is not supported."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled.\n"
+"This is also used as the base node texture size for world-aligned\n"
+"texture autoscaling."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Undersampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Undersampling is similar to using a lower screen resolution, but it applies\n"
+"to the game world only, keeping the GUI intact.\n"
+"It should give a significant performance boost at the cost of less detailed "
+"image.\n"
+"Higher values result in a less detailed image."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visual effects and may increase performance on some "
+"video\n"
+"cards.\n"
+"This only works with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shader path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to shader directory. If no path is defined, default location will be "
+"used."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr "Mapadh tòna film"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
+"Simulates the tone curve of photographic film and how this approximates the\n"
+"appearance of high dynamic range images. Mid-range contrast is slightly\n"
+"enhanced, highlights and shadows are gradually compressed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables bumpmapping for textures. Normalmaps need to be supplied by the "
+"texture pack\n"
+"or need to be auto-generated.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps sampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+"Claonadh na h-èifeachd occlusion na paraileig air fheadh, seo sgèile/2 mar "
+"as àbhaist."
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The maximum height of the surface of waving liquids.\n"
+"4.0 = Wave height is two nodes.\n"
+"0.0 = Wave doesn't move at all.\n"
+"Default is 1.0 (1/2 node).\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wavelength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How fast liquid waves will move. Higher = faster.\n"
+"If negative, liquid waves will move backwards.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr "Crathadh duillich"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pause on lost window focus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Open the pause menu when the window's focus is lost. Does not pause if a "
+"formspec is\n"
+"open."
+msgstr ""
+"Fosgail clàr-taice a’ chuir ’na stad nuair a chailleas an uinneag am fòcas.\n"
+"Cha dèid a chur ’na stad nuair a bhios formspec fosgailte."
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View distance in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Near plane"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n"
+"Only works on GLES platforms. Most users will not need to change this.\n"
+"Increasing can reduce artifacting on weaker GPUs.\n"
+"0.1 = Default, 0.25 = Good value for weaker tablets."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autosave screen size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save window size automatically when modified."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VSync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Alters the light curve by applying 'gamma correction' to it.\n"
+"Higher values make middle and lower light levels brighter.\n"
+"Value '1.0' leaves the light curve unaltered.\n"
+"This only has significant effect on daylight and artificial\n"
+"light, it has very little effect on natural night light."
+msgstr ""
+"Atharraichidh seo lùb an t-solais a’ cur “gamma correction†air.\n"
+"Nì luachan nas àirde an solas meadhanach no fann nas soilleire.\n"
+"Fàgaidh luach “1.0†lùb an t-solais mar a tha i.\n"
+"Chan eil buaidh mhòr aige ach air solas an latha is na h-oidhche fuadaine,\n"
+"agus cha mhòr nach bi buaidh air solas oidhche nàdarra idir."
+
+#: src/settings_translation_file.cpp
+msgid "Light curve low gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
+msgstr ""
+"Caisead lùb an t-solais aig an ìre as fainne.\n"
+"Stiùirichidh seo iomsgaradh an t-solais fhainn."
+
+#: src/settings_translation_file.cpp
+msgid "Light curve high gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at maximum light level.\n"
+"Controls the contrast of the highest light levels."
+msgstr ""
+"Caisead lùb an t-solais aig an ìre as soilleire.\n"
+"Stiùirichidh seo iomsgaradh an t-solais shoilleir."
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Strength of light curve boost.\n"
+"The 3 'boost' parameters define a range of the light\n"
+"curve that is boosted in brightness."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost center"
+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 ""
+"Meadhan rainse meudachadh lùb an t-solais.\n"
+"Is 0.0 an ìre as fhainne agus 1.0 an ìre as soilleire air an solas."
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost spread"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread of light curve boost range.\n"
+"Controls the width of the range to be boosted.\n"
+"Standard deviation of the light curve boost Gaussian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr "Dràibhear video"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The rendering back-end for Irrlicht.\n"
+"A restart is required after changing this.\n"
+"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
+"otherwise.\n"
+"On other platforms, OpenGL is recommended, and it’s the only driver with\n"
+"shader support currently."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable view bobbing and amount of view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing factor"
+msgstr "Factar bogadaich an tuiteim"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D support.\n"
+"Currently supported:\n"
+"- none: no 3d output.\n"
+"- anaglyph: cyan/magenta color 3d.\n"
+"- interlaced: odd/even line based polarisation screen support.\n"
+"- topbottom: split screen top/bottom.\n"
+"- sidebyside: split screen side by side.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer based 3d.\n"
+"Note that the interlaced mode requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selection box lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Recent Chat Messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of recent chat messages to show"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr "Leud as motha a’ ghrad-bhàr"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+"A’ chuid as motha dhen uinneag làithreach a thèid a chleachdadh airson a’ "
+"ghrad-bhàr.\n"
+"Tha seo feumail ma dh’fheumas tu rudeigin a shealltainn taobh deas no clì "
+"air a’ ghrad-bhàr."
+
+#: src/settings_translation_file.cpp
+msgid "HUD scale factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the hudbar elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generation delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Delay between mesh updates on the client in ms. Increasing this will slow\n"
+"down the rate of mesh updates, thus reducing jitter on slower clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of the MapBlock cache of the mesh generator. Increasing this will\n"
+"increase the cache hit %, reducing the data being copied from the main\n"
+"thread, thus reducing jitter."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Usable to make minimap smoother on slower machines."
+msgstr ""
+"True = 256\n"
+"False = 128\n"
+"Gabhaidh a chleachdadh airson am meanbh-mhapa a dhèanamh nas rèidhe air "
+"uidheaman slaodach."
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog start"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fraction of the visible distance at which fog starts to be rendered"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Opaque liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes all liquids opaque"
+msgstr "Dèan gach lionn trìd-dhoilleir"
+
+#: src/settings_translation_file.cpp
+msgid "World-aligned textures mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Textures on a node may be aligned either to the node or to the world.\n"
+"The former mode suits better things like machines, furniture, etc., while\n"
+"the latter makes stairs and microblocks fit surroundings better.\n"
+"However, as this possibility is new, thus may not be used by older servers,\n"
+"this option allows enforcing it for certain node types. Note though that\n"
+"that is considered EXPERIMENTAL and may not work properly."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autoscaling mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World-aligned textures may be scaled to span several nodes. However,\n"
+"the server may not send the scale you want, especially if you use\n"
+"a specially-designed texture pack; with this option, the client tries\n"
+"to determine the scale automatically basing on the texture size.\n"
+"See also texture_min_size.\n"
+"Warning: This option is EXPERIMENTAL!"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale GUI by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"properly support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name to tooltip."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FreeType fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether FreeType fonts are used, requires FreeType support to be compiled "
+"in.\n"
+"If disabled, bitmap and XML vectors fonts are used instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font bold by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font italic by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the default font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Regular font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the default font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"The fallback font will be used if the font cannot be loaded."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the monospace font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr "Slighe dhan chlò aon-leud"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the monospace font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font is used for e.g. the console and profiler screen."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the fallback font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
+"be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path of the fallback font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font will be used for certain languages or if the default font is "
+"unavailable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Screenshot quality. Only used for JPEG format.\n"
+"1 means worst quality; 100 means best quality.\n"
+"Use 0 for default quality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Windows systems only: Start Minetest with the command line window in the "
+"background.\n"
+"Contains the same information as the file debug.txt (default name)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables the sound system.\n"
+"If disabled, this completely disables all sounds everywhere and the in-game\n"
+"sound controls will be non-functional.\n"
+"Changing this setting requires a restart."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to mute sounds. You can unmute sounds at any time, unless the\n"
+"sound system is disabled (enable_sound=false).\n"
+"In-game, you can toggle the mute state with the mute key or by using the\n"
+"pause menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Address to connect to.\n"
+"Leave this blank to start a local server.\n"
+"Note that the address field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Port to connect to (UDP).\n"
+"Note that the port field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the\n"
+"Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum size of the out chat queue"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum size of the out chat queue.\n"
+"0 to disable queueing and -1 to make the queue size unlimited."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable register confirmation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable register confirmation when connecting to server.\n"
+"If disabled, new account will be registered automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr "Ainmich am frithealaiche"
+
+#: src/settings_translation_file.cpp
+msgid "Automatically report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce to this serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strip color codes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Remove color codes from incoming chat messages\n"
+"Use this to stop players from being able to use color in their messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server.\n"
+"Ignored if bind_address is set.\n"
+"Needs enable_ipv6 to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneous block sends per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks that are simultaneously sent per client.\n"
+"The maximum total count is calculated dynamically:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay in sending blocks after building"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can be connected simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Creative"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for new created maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr "Sochairean tùsail"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+"Na sochairean a gheibh cleachdaichean ùra gu fèin-obrachail.\n"
+"Faic /privs sa gheama airson liosta slàn air rèiteachadh an fhrithealaiche ’"
+"s nan tuilleadan agad."
+
+#: src/settings_translation_file.cpp
+msgid "Basic privileges"
+msgstr "Sochairean bunasach"
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr "Sochairean as urrainn do chluicheadairean le basic_privs a cheadachadh"
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr "Astar tar-chur nan cluicheadairean gun chuingeachadh"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+"Mìnichidh seo an t-astar as motha airson tar-chur chluicheadairean ann am "
+"bloca (0 = gun chuingeachadh)."
+
+#: src/settings_translation_file.cpp
+msgid "Player versus player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+"Co-dhiù am faod cluicheadairean càch a chèile a leòn ’s a mharbhadh gus nach "
+"fhaod."
+
+#: src/settings_translation_file.cpp
+msgid "Mod channels"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod channels support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes).\n"
+"\n"
+"Setting this larger than active_block_range will also cause the server\n"
+"to maintain active objects up to this distance in the direction the\n"
+"player is looking. (This can avoid mobs suddenly disappearing from view)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The radius of the volume of blocks around every player that is subject to "
+"the\n"
+"active block stuff, stated in mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run.\n"
+"This is also the minimum range in which active objects (mobs) are "
+"maintained.\n"
+"This should be configured together with active_object_send_range_blocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World start time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time of day when a new world is started, in millihours (0-23999)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message max length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Set the maximum character length of a chat message sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message count limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amount of messages a player may send per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message kick threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking and flying speed, in nodes per second."
+msgstr "Luaths na coiseachd is sgiathaidh, ann an nòd gach diog."
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed"
+msgstr "Luaths an tàisleachaidh"
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed, in nodes per second."
+msgstr "Luaths an tàisleachaidh ann an nòd gach diog."
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+msgstr ""
+"Luaths na coiseachd, sgiathaidh is sreap sa mhodh luath, ann an nòd gach "
+"diog."
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical climbing speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Initial vertical speed when jumping, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sinking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls sinking speed in liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration of gravity, in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated Lua API calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over\n"
+"network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ABM interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr "Leig seachad mearachdan an t-saoghail"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, invalid world data won't cause the server to shut down.\n"
+"Only enable this if you know what you are doing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr "Eadaramh nan ùrachaidhean air an lionn ann an diog."
+
+#: src/settings_translation_file.cpp
+msgid "Block send optimize distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"At this distance the server will aggressively optimize which blocks are sent "
+"to\n"
+"clients.\n"
+"Small values potentially improve performance a lot, at the expense of "
+"visible\n"
+"rendering glitches (some blocks will not be rendered under water and in "
+"caves,\n"
+"as well as sometimes on land).\n"
+"Setting this to a value greater than max_block_send_distance disables this\n"
+"optimization.\n"
+"Stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server side occlusion culling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled the server will perform map block occlusion culling based on\n"
+"on the eye position of the player. This can reduce the number of blocks\n"
+"sent to the client 50-80%. The client will not longer receive most "
+"invisible\n"
+"so that the utility of noclip mode is reduced."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
+msgstr "Cuingeachadh tuilleadain air a’ chliant"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Restricts the access of certain client-side functions on servers.\n"
+"Combine the byteflags below to restrict client-side features, or set to 0\n"
+"for no restrictions:\n"
+"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n"
+"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n"
+"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n"
+"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n"
+"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side node lookup range restriction"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the CSM restriction for node range is enabled, get_node calls are "
+"limited\n"
+"to this distance from the player to the node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Load the game profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Load the game profiler to collect game profiling data.\n"
+"Provides a /profiler command to access the compiled profile.\n"
+"Useful for mod developers and server operators."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default report format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Report path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The file path relative to your worldpath in which profiles will be saved to."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrumentation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Active Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Loading Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chatcommands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument chatcommands on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Global callbacks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Builtin"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Have the profiler instrument itself:\n"
+"* Instrument an empty function.\n"
+"This estimates the overhead, that instrumentation is adding (+1 function "
+"call).\n"
+"* Instrument the sampler being used to update the statistics."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr "Ìre an loga dì-bhugachaidh"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Level of logging to be written to debug.txt:\n"
+"- <nothing> (no logging)\n"
+"- none (messages with no level)\n"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose"
+msgstr ""
+"Ìre an loga a thèid a sgrìobhadh gu debug.txt:\n"
+"- <bàn> (gun logadh)\n"
+"- none (teachdaireachdan gun ìre)\n"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose"
+
+#: src/settings_translation_file.cpp
+msgid "Debug log file size threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the file size of debug.txt exceeds the number of megabytes specified in\n"
+"this setting when it is opened, the file is moved to debug.txt.1,\n"
+"deleting an older debug.txt.1 if it exists.\n"
+"debug.txt is only moved if this setting is positive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr "ÃŒre loga na cabadaich"
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr "An ìre as lugha dhen loga a thèid a sgrìobhadh dhan chabadaich."
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable IPv6 support (for both client and server).\n"
+"Required for IPv6 connections to work at all."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+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 ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Print the engine's profiling data in regular intervals (in seconds).\n"
+"0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr "Ainm gineadair nam mapa"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this.\n"
+"Current mapgens in a highly unstable state:\n"
+"- The optional floatlands of v7 (disabled by default)."
+msgstr ""
+"Ainm air gineadair nam mapa a thèid a chleachdadh airson saoghal ùr a "
+"chruthachadh.\n"
+"Tar-aithnidh cruthachadh saoghail ùir sa phrìomh chlàr-taice seo.\n"
+"Seo gineadairean nam mapa a tha glè neo-sheasmhach aig an àm seo:\n"
+"- floatlands roghainneil aig v7 (à comas o thùs)."
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr "Àirde an uisge"
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr "Àirde uachdar an uisge air an t-saoghal."
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+"An t-astar on a thèid blocaichean a ghintinn dha na cliantan, ann am bloca "
+"mapa (16 nòdan)."
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr "Cuingeachadh gintinn mapa"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
+"Only mapchunks completely within the mapgen limit are generated.\n"
+"Value is stored per-world."
+msgstr ""
+"Cuingeachadh gintinn mapa, ann an nòd, sa h-uile 6 comhair o (0, 0, 0).\n"
+"Cha dèid ach cnapan mapa a tha am broinn cuingeachadh gineadair nam mapa a "
+"ghintinn.\n"
+"Thèid luach fa leth a stòradh air gach saoghal."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations."
+msgstr ""
+"Buadhan gintinn mapa uile-choitcheann.\n"
+"Ann an gineadair nam mapa v6, stiùirichidh bratach “decorations†sgeadachadh "
+"seach craobhan is feur dlùth-choille\n"
+"agus ann an gineadairean nam mapa eile, stiùirichidh a’ bhratach seo a h-"
+"uile sgeadachadh."
+
+#: src/settings_translation_file.cpp
+msgid "Biome API temperature and humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Temperature variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale temperature variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale humidity variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5"
+msgstr "Gineadair nam mapa V5"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5 specific flags"
+msgstr "Brataich shònraichte do ghineadair nam mapa V5"
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen v5."
+msgstr "Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa v5."
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls width of tunnels, a smaller value creates wider tunnels.\n"
+"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
+"intensive noise calculations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of small caves per mapchunk."
+msgstr ""
+"An àireamh as lugha de dh’uamhan beaga air thuaiream anns gach cnap mapa."
+
+#: src/settings_translation_file.cpp
+msgid "Small cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of small caves per mapchunk."
+msgstr ""
+"An àireamh as motha de dh’uamhan beaga air thuaiream anns gach cnap mapa."
+
+#: src/settings_translation_file.cpp
+msgid "Large cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of large caves per mapchunk."
+msgstr ""
+"An àireamh as lugha de dh’uamhan mòra air thuaiream anns gach cnap mapa."
+
+#: src/settings_translation_file.cpp
+msgid "Large cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of large caves per mapchunk."
+msgstr ""
+"An àireamh as motha de dh’uamhan mòra air thuaiream anns gach cnap mapa."
+
+#: src/settings_translation_file.cpp
+msgid "Large cave proportion flooded"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of cavern upper limit."
+msgstr "Àirde-Y aig crìoch àrd nan uamhan."
+
+#: src/settings_translation_file.cpp
+msgid "Cavern taper"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-distance over which caverns expand to full size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines full size of caverns, smaller values create larger caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of biome filler depth."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Factor noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr "Àirde-Y aig uachdar cuibheasach a’ chrutha-thìre."
+
+#: src/settings_translation_file.cpp
+msgid "Cave1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise that determines number of dungeons per mapchunk."
+msgstr ""
+"Riasladh 3D a mhìnicheas an àireamh dhe thuill-dhubha anns gach cnap mapa."
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6"
+msgstr "Gineadair nam mapa V6"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6 specific flags"
+msgstr "Brataich shònraichte do ghineadair nam mapa V6"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"The 'snowbiomes' flag enables the new 5 biome system.\n"
+"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
+"the 'jungles' flag is ignored."
+msgstr ""
+"Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa v6.\n"
+"Cuiridh a’ bhratach “snowbiomes†siostam 5 ùr nam bitheom an comas.\n"
+"Nuair a bhios a’ bhratach “snowbiomes†an comas, thèid dlùth-choilltean a "
+"chur an comas gu fèin-obrachail \n"
+"agus a’ bhratach “jungles†a leigeil seachad."
+
+#: src/settings_translation_file.cpp
+msgid "Desert noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Deserts occur when np_biome exceeds this value.\n"
+"When the 'snowbiomes' flag is enabled, this is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sandy beaches occur when np_beach exceeds this value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain base noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of lower terrain and seabed."
+msgstr "Àirde-Y a’ chrutha-thìre ìosal agus grunnd na mara."
+
+#: src/settings_translation_file.cpp
+msgid "Terrain higher noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of higher terrain that creates cliffs."
+msgstr "Àirde-Y a’ chrutha-thìre nas àirde a chruthaicheas creagan."
+
+#: src/settings_translation_file.cpp
+msgid "Steepness noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height select noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mud noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies depth of biome surface nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas with sandy beaches."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of number of caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines tree areas and tree density."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Apple trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas where trees have apples."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7"
+msgstr "Gineadair nam mapa V7"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7 specific flags"
+msgstr "Brataich shònraichte do ghineadair nam mapa V7"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
+msgstr ""
+"Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa v7.\n"
+"“ridgesâ€: Aibhnean.\n"
+"“floatlandsâ€: Tìr air fhleòd san àile.\n"
+"“cavernsâ€: Uamhan mòra domhainn fon talamh."
+
+#: src/settings_translation_file.cpp
+msgid "Mountain zero level"
+msgstr "Àirde neoini nam beanntan"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
+msgstr ""
+"Y air àirde neoini air caisead dùmhlachd nam beanntan. Thèid seo a "
+"chleachdadh airson beanntan a thogail gu h-inghearach."
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr "Astar cinn-chaoil air tìr air fhleòd"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+"Seo an t-astar-Y eadar an dùbhlachd làn ’s an òir air cinn-chaoil na tìre "
+"air fhleòd.\n"
+"Tòsichidh na cinn-chaoil aig an astar seo on chrìoch Y.\n"
+"Airson breath tìre air fhleòd sholadach, stiùirichidh seo àirde nan cnoc/nam "
+"beanntan.\n"
+"Feumaidh e a bhith nas lugha na no co-ionnann ris an dàrna leth dhen astar "
+"eadar na crìochan Y."
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr "Easponant cinn-chaoil air tìr air fhleòd"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+"An t-easponant aig cinn-chaoil na tìre air fhleòd. Atharraichidh seo giùlnan "
+"nan ceann-caol.\n"
+"Cruthaichidh luach = 1.0 cinn-chaoil aon-fhillte loidhneach.\n"
+"Cruthaichidh luachan > 1.0 cinn-chaoil rèidhe\n"
+"a bhios freagarrach dha na cinn-chaoill sgaraichte thùsail.\n"
+"Cruthaichidh luachan < 1.0 (can 0.25) uachdar nas mionaidiche le tìr-ìosal "
+"nas rèidhe a bhios freagarrach\n"
+"do bhreath tìre air fhleòd sholadach."
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr "Dùmhlachd na tìre air fhleòd"
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr "Àirde an uisge air tìr air fhleòd"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+"Àirde uachdar an uisge roghainneil a thèid a chur air breath tìre air fhleòd "
+"soladaiche.\n"
+"Tha uisge à comas o thùs agus cha dèid gin a chur ach\n"
+"ma tha an luach seo nas àirde na “mgv7_floatland_ymax†− "
+"“mgv7_floatland_taperâ€\n"
+"(seo toiseach a’ chinn-chaoil).\n"
+"***RABHADH, CUNNART AIR SAOGHLAN IS DÈANADAS AN FHRITHEALAICHE***:\n"
+"Ma chuireas tu cur ann uisge an comas, feumaidh tu an tìr air fhleòd a "
+"rèiteachadh ’s a chur fo dheuchainn a dhèanamh cinnteach gu bheil e ’na "
+"breath sholadach\n"
+"’s tu a’ cur 2.0 air “mgv7_floatland_densityâ€\n"
+"(no luach riatanach eile a-rèir “mgv7_np_floatlandâ€)\n"
+"ach an seachnaich thu sruthadh uisge anabarrach a chuireas ealach air an "
+"fhrithealaiche ’s ach an seachnaich thu tuil mhòr air uachdar na tìre "
+"foidhpe."
+
+#: src/settings_translation_file.cpp
+msgid "Terrain alternative noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain persistence noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of maximum mountain height (in nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge underwater noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines large-scale river channel structure."
+msgstr "Mìnichidh seo structar sruth nan aibhnean mòra."
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
+msgstr ""
+"Riasladh 3D a mhìnicheas structar is àirde nam beanntan.\n"
+"Mìnichidh e cruth-tìre nam beanntan air tìr air fhleòd cuideachd."
+
+#: src/settings_translation_file.cpp
+msgid "Ridge noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr "Riasladh 3D a mhìnicheas structar ballachan sgoltaidhean-aibhne."
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr "Riasladh na tìre air fhleòd"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+"Riasladh 3D a mhìnicheas structar na tìre air fhleòd.\n"
+"Mura cleachd thu an luach tùsail, dh’fhaoidte gum fheàirrde thu gleus a chur "
+"air “scale†an riaslaidh (0.7 o thùs)\n"
+", on a dh’obraicheas foincseanan cinn-chaoil as fheàrr\n"
+"nuair a bhios an riasladh seo eadar mu -2.0 agus 2.0."
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian"
+msgstr "Gineadair nam mapa Carpathian"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian specific flags"
+msgstr "Brataich shònraichte do ghineadair nam mapa Carpathian"
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen Carpathian."
+msgstr ""
+"Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa Carpathian."
+
+#: src/settings_translation_file.cpp
+msgid "Base ground level"
+msgstr "Àirde bhunasach a’ ghrunnda"
+
+#: src/settings_translation_file.cpp
+msgid "Defines the base ground level."
+msgstr "Mìnichidh seo àirde bhunasach a’ ghrunnda."
+
+#: src/settings_translation_file.cpp
+msgid "River channel width"
+msgstr "Leud sruth nan aibhnean"
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river channel."
+msgstr "Mìnichidh seo leud sruth nan aibhnean."
+
+#: src/settings_translation_file.cpp
+msgid "River channel depth"
+msgstr "Doimhne sruth nan aibhnean"
+
+#: src/settings_translation_file.cpp
+msgid "Defines the depth of the river channel."
+msgstr "Mìnichidh seo doimhne sruth nan aibhnean."
+
+#: src/settings_translation_file.cpp
+msgid "River valley width"
+msgstr "Leud gleanntan aibhne"
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river valley."
+msgstr "Mìnichidh seo leud gleanntan nan aibhnean."
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness3 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Third of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness4 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hills spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hill size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of rolling hills."
+msgstr "Riasladh 2D a stiùiricheas cruth/meud nan cnoc."
+
+#: src/settings_translation_file.cpp
+msgid "Ridged mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of ridged mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of step mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise"
+msgstr "Riasladh aibhnean"
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that locates the river valleys and channels."
+msgstr "Riasladh 2D a shuidhicheas glinn is sruthan nan aibhnean."
+
+#: src/settings_translation_file.cpp
+msgid "Mountain variation noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat"
+msgstr "Gineadair nam mapa Flat"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat specific flags"
+msgstr "Brataich shònraichte do ghineadair nam mapa Flat"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Flat.\n"
+"Occasional lakes and hills can be added to the flat world."
+msgstr ""
+"Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa Flat.\n"
+"’S urrainn dhut lochan is cnuic ghanna a chur ris an t-saoghal rèidh."
+
+#: src/settings_translation_file.cpp
+msgid "Ground level"
+msgstr "Àirde a’ ghrunnda"
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for lakes.\n"
+"Controls proportion of world area covered by lakes.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for hills.\n"
+"Controls proportion of world area covered by hills.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines location and terrain of optional hills and lakes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal"
+msgstr "Gineadair nam mapa Fractal"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal specific flags"
+msgstr "Brataich shònraichte do ghineadair nam mapa Fractal"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Fractal.\n"
+"'terrain' enables the generation of non-fractal terrain:\n"
+"ocean, islands and underground."
+msgstr ""
+"Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa Fractal.\n"
+"Cuiridh “terrain†gintinn crutha-tìre nach eil fractalach an comas:\n"
+"cuan, eileanan is fon talamh."
+
+#: src/settings_translation_file.cpp
+msgid "Fractal type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Selects one of 18 fractal types.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Increasing this increases the amount of fine detail, but also\n"
+"increases processing load.\n"
+"At iterations = 20 this mapgen has a similar load to mapgen V7."
+msgstr ""
+"Ath-thriall an fhoincsein ath-chùrsaiche.\n"
+"Ma mheudaicheas tu seo, bidh barrachd mion-chruthan air\n"
+"ach bi barrachd eallaich air a’ phròiseasadh cuideachd.\n"
+"Ma tha ath-thriall = 20, bidh an t-eallach aig gineadair nam mapa seo "
+"coltach ri eallach gineadair nam mapa V7."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) scale of fractal in nodes.\n"
+"Actual fractal size will be 2 to 3 times larger.\n"
+"These numbers can be made very large, the fractal does\n"
+"not have to fit inside the world.\n"
+"Increase these to 'zoom' into the detail of the fractal.\n"
+"Default is for a vertically-squashed shape suitable for\n"
+"an island, set all 3 numbers equal for the raw shape."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Can be used to move a desired point to (0, 0) to create a\n"
+"suitable spawn point, or to allow 'zooming in' on a desired\n"
+"point by increasing 'scale'.\n"
+"The default is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W coordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"X component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Y component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Z component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"W component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Seabed noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of seabed."
+msgstr "Àirde-Y aig grunnd na mara."
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr "Gineadair nam mapa Valleys"
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
+msgstr "Brataich shònraichte do ghineadair nam mapa Valleys"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill': Reduces heat with altitude.\n"
+"'humid_rivers': Increases humidity around rivers.\n"
+"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n"
+"to become shallower and occasionally dry.\n"
+"'altitude_dry': Reduces humidity with altitude."
+msgstr ""
+"Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa Valleys.\n"
+"“altitude_chillâ€: Bidh tìr àrd nas fhuaire.\n"
+"“humid_riversâ€: Bidh an tìr nas buige faisg air aibhnean.\n"
+"“vary_river_depthâ€: Ma tha seo an comas, bidh aibhnean nas tana agus tioram "
+"aig amannan ma tha an saoghal tioram no teth.\n"
+"’“altitude_dryâ€: Bidh tìr àrd nas tiorma."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
+"enabled. Also the vertical distance over which humidity drops by 10 if\n"
+"'altitude_dry' is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern upper limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River depth"
+msgstr "Doimhne nan aibhnean"
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers."
+msgstr "Dè cho domhainn ’s a bhios aibhnean."
+
+#: src/settings_translation_file.cpp
+msgid "River size"
+msgstr "Meud nan aibhnean"
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers."
+msgstr "Dè cho leathann ’s a bhios aibhnean."
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other biome filler node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers."
+msgstr ""
+"Àrdaichidh seo an cruth-tìre airson glinn a chruthachadh timcheall air na "
+"h-aibhnean."
+
+#: src/settings_translation_file.cpp
+msgid "Valley fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley profile"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys."
+msgstr "Meudaichidh seo na glinn."
+
+#: src/settings_translation_file.cpp
+msgid "Valley slope"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr "Meud nan cnapan"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n"
+"WARNING!: There is no benefit, and there are several dangers, in\n"
+"increasing this value above 5.\n"
+"Reducing this value increases cave and dungeon density.\n"
+"Altering this value is for special usage, leaving it unchanged is\n"
+"recommended."
+msgstr ""
+"Meud nan cnapan mapa a thèid a ghintinn le gineadair nam mapa, ann am bloca "
+"mapa (16 nòd).\n"
+"RABHADH: Chan fhaigh thu buannachd ach cunnartan à luach nas àirde na 5.\n"
+"Le luach nas lugha, gheibh thu barrachd uamhan is thuill-dubha.\n"
+"Chan fhiach atharrachadh an luach seo ach air adhbhar sònraichte ’s "
+"mholamaid\n"
+"nach atharraich thu e."
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr "Dì-bhugachadh gineadair nam mapa"
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug information."
+msgstr "Dumpaich fiosrachadh dì-bhugachaidh aig gineadair nam mapa."
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of queued blocks to emerge"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use.\n"
+"Value 0:\n"
+"- Automatic selection. The number of emerge threads will be\n"
+"- 'number of processors - 2', with a lower limit of 1.\n"
+"Any other value:\n"
+"- Specifies the number of emerge threads, with a lower limit of 1.\n"
+"WARNING: Increasing the number of emerge threads increases engine mapgen\n"
+"speed, but this may harm game performance by interfering with other\n"
+"processes, especially in singleplayer and/or when running Lua code in\n"
+"'on_generated'. For many users the optimum setting may be '1'."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Online Content Repository"
+msgstr "Ionad-tasgaidh susbaint air loidhne"
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The URL for the content repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Flag Blacklist"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of flags to hide in the content repository.\n"
+"\"nonfree\" can be used to hide packages which do not qualify as 'free "
+"software',\n"
+"as defined by the Free Software Foundation.\n"
+"You can also specify content ratings.\n"
+"These flags are independent from Minetest versions,\n"
+"so see a full list at https://content.minetest.net/help/content_flags/"
+msgstr ""
diff --git a/po/gl/minetest.po b/po/gl/minetest.po
new file mode 100644
index 000000000..115597bf8
--- /dev/null
+++ b/po/gl/minetest.po
@@ -0,0 +1,6328 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\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/"
+"minetest/gl/>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.2-dev\n"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr "Morreches"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr "Reaparecer"
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "Vale"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "O servidor solicitou que reconectes:"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Reconectar"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Menu principal"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr ""
+
+#: builtin/mainmenu/common.lua src/client/game.cpp
+msgid "Loading..."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr ""
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"characters [a-z0-9_] are allowed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no games installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a game, such as Minetest Game, from minetest.net"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
+#: src/client/keycode.cpp
+msgid "Delete"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid ""
+"This modpack has an explicit name given in its modpack.conf which will "
+"override any renaming here."
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistance"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr ""
+
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "defaults"
+msgstr ""
+
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "eased"
+msgstr ""
+
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "absvalue"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: file: \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: Unsupported file type \"$1\" or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Installed Packages:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Browse online content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No package description available"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Rename"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No dependencies."
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Disable Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Use Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Information:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Uninstall Package"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Content"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Configure"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "New"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select World:"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative Mode"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Enable Damage"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Announce Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Name/Password"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Bind Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Server Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Play Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Start Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Address / Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Ping"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Join Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "None"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (unavailable)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Reset singleplayer world"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
+msgid "Change Keys"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "All Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold: (px)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Generate Normal Maps"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Liquids"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr ""
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr ""
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Connection timed out."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Loading textures..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Rebuilding shaders..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided password file failed to open: "
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Please choose a name!"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr ""
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
+#: src/client/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "no"
+
+#: src/client/game.cpp
+msgid "Shutting down..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating client..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Resolving address..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connecting to server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Item definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Node definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Media..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "KiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "MiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client side scripting is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound muted"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound unmuted"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Volume changed to %d%%"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "ok"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled (note: no 'fly' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled (note: no 'fast' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled (note: no 'noclip' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x1"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x2"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x4"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x1"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x2"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x4"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Profiler graph shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Wireframe shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info, profiler graph, and wireframe hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info and profiler graph hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update enabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at maximum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range changed to %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at minimum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Enabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Disabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Zoom currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid ""
+"Controls:\n"
+"- %s: move forwards\n"
+"- %s: move backwards\n"
+"- %s: move left\n"
+"- %s: move right\n"
+"- %s: jump/climb\n"
+"- %s: sneak/go down\n"
+"- %s: drop item\n"
+"- %s: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- %s: chat\n"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Continue"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Change Password"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game paused"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound Volume"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to Menu"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to OS"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game info:"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Mode: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Remote server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Address: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Hosting server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Port: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "On"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Off"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Damage: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Creative Mode: "
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: src/client/game.cpp
+msgid "- PvP: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Public: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Server Name: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+#, c-format
+msgid "Profiler shown (page %d of %d)"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Profiler hidden"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 2"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Backspace"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Return"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Control"
+msgstr ""
+
+#. ~ Key name, common on Windows keyboards
+#: src/client/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Pause"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Caps Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "End"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Left"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Up"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Right"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Down"
+msgstr ""
+
+#. ~ Key name
+#: src/client/keycode.cpp
+msgid "Select"
+msgstr ""
+
+#. ~ "Print screen" key
+#: src/client/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 0"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 2"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 3"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 4"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 5"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 6"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 7"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 8"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 9"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad *"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad +"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad ."
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad -"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad /"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Num Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Escape"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Convert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Nonconvert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Accept"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Mode Change"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Apps"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Erase EOF"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Play"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Zoom"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "OEM Clear"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+#, c-format
+msgid ""
+"You are about to join this server with the name \"%s\" for the first time.\n"
+"If you proceed, a new account using your credentials will be created on this "
+"server.\n"
+"Please retype your password and click 'Register and Join' to confirm account "
+"creation, or click 'Cancel' to abort."
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+msgid "Register and Join"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ""
+
+#: src/gui/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "\"Special\" = climb down"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Automatic jumping"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Special"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Prev. item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Next item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Change camera"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle minimap"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle pitchmove"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Mute"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Autoforward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Local command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle HUD"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle chat log"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fog"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "New Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Change"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Exit"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Muted"
+msgstr ""
+
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
+#: src/gui/modalMenu.cpp
+msgid "Enter "
+msgstr ""
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
+#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
+msgid "LANG_CODE"
+msgstr "gl"
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, makes move directions relative to the player's pitch when flying "
+"or swimming."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via the \"special\" key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled together with fly mode, player is able to fly through solid "
+"nodes.\n"
+"This requires the \"noclip\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when looking around. Also called look or mouse smoothing.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Special key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
+"down and\n"
+"descending."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
+"are\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right\n"
+"mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically jump up single-node obstacles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Safe digging and placing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prevent digging and placing from repeating when holding the mouse buttons.\n"
+"Enable this when you dig or place too often by accident."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Continuous forward movement, toggled by autoforward key.\n"
+"Press the autoforward key again or the backwards movement to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Touch screen threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The length in pixels it takes for touch screen interaction to start."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed virtual joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Fixes the position of virtual joystick.\n"
+"If disabled, virtual joystick will center to first-touch's position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Virtual joystick triggers aux button"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Use virtual joystick to trigger \"aux\" button.\n"
+"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"circle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick ID"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The identifier of the joystick to use"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The type of joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick button repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated events\n"
+"when holding down a joystick button combination."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick frustum sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The sensitivity of the joystick axes for moving the\n"
+"ingame view frustum around."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"Will also disable autoforward, when active.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Special key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type local commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar next key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the next item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar previous key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the previous item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for muting the game.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inc. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling autoforward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View zoom key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key to use view zoom when possible.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 2 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the second hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 3 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the third hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 4 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fourth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 5 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 6 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the sixth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 7 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the seventh hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 8 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the eighth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 9 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 10 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 11 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 14 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 15 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 16 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 17 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 18 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 19 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 19th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 20 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 20th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 21 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 23 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 23rd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 24 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 24th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 25 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 25th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 26 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 26th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 27 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 27th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 28 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 28th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 29 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 29th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 30 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 30th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 31 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 31st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 32 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 32nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large chat console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the large chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camera update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable vertex buffer objects.\n"
+"This should greatly improve graphics performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Digging particles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Adds particles when digging a node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Use mip mapping to scale textures. May slightly increase performance,\n"
+"especially when using a high resolution texture pack.\n"
+"Gamma correct downscaling is not supported."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled.\n"
+"This is also used as the base node texture size for world-aligned\n"
+"texture autoscaling."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Undersampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Undersampling is similar to using a lower screen resolution, but it applies\n"
+"to the game world only, keeping the GUI intact.\n"
+"It should give a significant performance boost at the cost of less detailed "
+"image.\n"
+"Higher values result in a less detailed image."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visual effects and may increase performance on some "
+"video\n"
+"cards.\n"
+"This only works with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shader path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to shader directory. If no path is defined, default location will be "
+"used."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
+"Simulates the tone curve of photographic film and how this approximates the\n"
+"appearance of high dynamic range images. Mid-range contrast is slightly\n"
+"enhanced, highlights and shadows are gradually compressed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables bumpmapping for textures. Normalmaps need to be supplied by the "
+"texture pack\n"
+"or need to be auto-generated.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps sampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The maximum height of the surface of waving liquids.\n"
+"4.0 = Wave height is two nodes.\n"
+"0.0 = Wave doesn't move at all.\n"
+"Default is 1.0 (1/2 node).\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wavelength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How fast liquid waves will move. Higher = faster.\n"
+"If negative, liquid waves will move backwards.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pause on lost window focus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Open the pause menu when the window's focus is lost. Does not pause if a "
+"formspec is\n"
+"open."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View distance in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Near plane"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n"
+"Only works on GLES platforms. Most users will not need to change this.\n"
+"Increasing can reduce artifacting on weaker GPUs.\n"
+"0.1 = Default, 0.25 = Good value for weaker tablets."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autosave screen size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save window size automatically when modified."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VSync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Alters the light curve by applying 'gamma correction' to it.\n"
+"Higher values make middle and lower light levels brighter.\n"
+"Value '1.0' leaves the light curve unaltered.\n"
+"This only has significant effect on daylight and artificial\n"
+"light, it has very little effect on natural night light."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve low gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve high gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at maximum light level.\n"
+"Controls the contrast of the highest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Strength of light curve boost.\n"
+"The 3 'boost' parameters define a range of the light\n"
+"curve that is boosted in brightness."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost center"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Center of light curve boost range.\n"
+"Where 0.0 is minimum light level, 1.0 is maximum light level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost spread"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread of light curve boost range.\n"
+"Controls the width of the range to be boosted.\n"
+"Standard deviation of the light curve boost Gaussian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The rendering back-end for Irrlicht.\n"
+"A restart is required after changing this.\n"
+"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
+"otherwise.\n"
+"On other platforms, OpenGL is recommended, and it’s the only driver with\n"
+"shader support currently."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable view bobbing and amount of view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D support.\n"
+"Currently supported:\n"
+"- none: no 3d output.\n"
+"- anaglyph: cyan/magenta color 3d.\n"
+"- interlaced: odd/even line based polarisation screen support.\n"
+"- topbottom: split screen top/bottom.\n"
+"- sidebyside: split screen side by side.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer based 3d.\n"
+"Note that the interlaced mode requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selection box lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Recent Chat Messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of recent chat messages to show"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scale factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the hudbar elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generation delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Delay between mesh updates on the client in ms. Increasing this will slow\n"
+"down the rate of mesh updates, thus reducing jitter on slower clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of the MapBlock cache of the mesh generator. Increasing this will\n"
+"increase the cache hit %, reducing the data being copied from the main\n"
+"thread, thus reducing jitter."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Usable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog start"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fraction of the visible distance at which fog starts to be rendered"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Opaque liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes all liquids opaque"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World-aligned textures mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Textures on a node may be aligned either to the node or to the world.\n"
+"The former mode suits better things like machines, furniture, etc., while\n"
+"the latter makes stairs and microblocks fit surroundings better.\n"
+"However, as this possibility is new, thus may not be used by older servers,\n"
+"this option allows enforcing it for certain node types. Note though that\n"
+"that is considered EXPERIMENTAL and may not work properly."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autoscaling mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World-aligned textures may be scaled to span several nodes. However,\n"
+"the server may not send the scale you want, especially if you use\n"
+"a specially-designed texture pack; with this option, the client tries\n"
+"to determine the scale automatically basing on the texture size.\n"
+"See also texture_min_size.\n"
+"Warning: This option is EXPERIMENTAL!"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale GUI by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"properly support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name to tooltip."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FreeType fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether FreeType fonts are used, requires FreeType support to be compiled "
+"in.\n"
+"If disabled, bitmap and XML vectors fonts are used instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font bold by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font italic by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the default font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Regular font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the default font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"The fallback font will be used if the font cannot be loaded."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the monospace font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the monospace font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font is used for e.g. the console and profiler screen."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the fallback font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
+"be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path of the fallback font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font will be used for certain languages or if the default font is "
+"unavailable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Screenshot quality. Only used for JPEG format.\n"
+"1 means worst quality; 100 means best quality.\n"
+"Use 0 for default quality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Windows systems only: Start Minetest with the command line window in the "
+"background.\n"
+"Contains the same information as the file debug.txt (default name)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables the sound system.\n"
+"If disabled, this completely disables all sounds everywhere and the in-game\n"
+"sound controls will be non-functional.\n"
+"Changing this setting requires a restart."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to mute sounds. You can unmute sounds at any time, unless the\n"
+"sound system is disabled (enable_sound=false).\n"
+"In-game, you can toggle the mute state with the mute key or by using the\n"
+"pause menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Address to connect to.\n"
+"Leave this blank to start a local server.\n"
+"Note that the address field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Port to connect to (UDP).\n"
+"Note that the port field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the\n"
+"Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum size of the out chat queue"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum size of the out chat queue.\n"
+"0 to disable queueing and -1 to make the queue size unlimited."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable register confirmation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable register confirmation when connecting to server.\n"
+"If disabled, new account will be registered automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce to this serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strip color codes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Remove color codes from incoming chat messages\n"
+"Use this to stop players from being able to use color in their messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server.\n"
+"Ignored if bind_address is set.\n"
+"Needs enable_ipv6 to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneous block sends per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks that are simultaneously sent per client.\n"
+"The maximum total count is calculated dynamically:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay in sending blocks after building"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can be connected simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Creative"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for new created maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod channels"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod channels support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes).\n"
+"\n"
+"Setting this larger than active_block_range will also cause the server\n"
+"to maintain active objects up to this distance in the direction the\n"
+"player is looking. (This can avoid mobs suddenly disappearing from view)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The radius of the volume of blocks around every player that is subject to "
+"the\n"
+"active block stuff, stated in mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run.\n"
+"This is also the minimum range in which active objects (mobs) are "
+"maintained.\n"
+"This should be configured together with active_object_send_range_blocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World start time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time of day when a new world is started, in millihours (0-23999)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message max length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Set the maximum character length of a chat message sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message count limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amount of messages a player may send per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message kick threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking and flying speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical climbing speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Initial vertical speed when jumping, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sinking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls sinking speed in liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration of gravity, in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated Lua API calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over\n"
+"network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ABM interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, invalid world data won't cause the server to shut down.\n"
+"Only enable this if you know what you are doing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Block send optimize distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"At this distance the server will aggressively optimize which blocks are sent "
+"to\n"
+"clients.\n"
+"Small values potentially improve performance a lot, at the expense of "
+"visible\n"
+"rendering glitches (some blocks will not be rendered under water and in "
+"caves,\n"
+"as well as sometimes on land).\n"
+"Setting this to a value greater than max_block_send_distance disables this\n"
+"optimization.\n"
+"Stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server side occlusion culling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled the server will perform map block occlusion culling based on\n"
+"on the eye position of the player. This can reduce the number of blocks\n"
+"sent to the client 50-80%. The client will not longer receive most "
+"invisible\n"
+"so that the utility of noclip mode is reduced."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Restricts the access of certain client-side functions on servers.\n"
+"Combine the byteflags below to restrict client-side features, or set to 0\n"
+"for no restrictions:\n"
+"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n"
+"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n"
+"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n"
+"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n"
+"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side node lookup range restriction"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the CSM restriction for node range is enabled, get_node calls are "
+"limited\n"
+"to this distance from the player to the node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Load the game profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Load the game profiler to collect game profiling data.\n"
+"Provides a /profiler command to access the compiled profile.\n"
+"Useful for mod developers and server operators."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default report format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Report path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The file path relative to your worldpath in which profiles will be saved to."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrumentation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Active Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Loading Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chatcommands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument chatcommands on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Global callbacks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Builtin"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Have the profiler instrument itself:\n"
+"* Instrument an empty function.\n"
+"This estimates the overhead, that instrumentation is adding (+1 function "
+"call).\n"
+"* Instrument the sampler being used to update the statistics."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Level of logging to be written to debug.txt:\n"
+"- <nothing> (no logging)\n"
+"- none (messages with no level)\n"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log file size threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the file size of debug.txt exceeds the number of megabytes specified in\n"
+"this setting when it is opened, the file is moved to debug.txt.1,\n"
+"deleting an older debug.txt.1 if it exists.\n"
+"debug.txt is only moved if this setting is positive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable IPv6 support (for both client and server).\n"
+"Required for IPv6 connections to work at all."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+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 ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Print the engine's profiling data in regular intervals (in seconds).\n"
+"0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this.\n"
+"Current mapgens in a highly unstable state:\n"
+"- The optional floatlands of v7 (disabled by default)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
+"Only mapchunks completely within the mapgen limit are generated.\n"
+"Value is stored per-world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome API temperature and humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Temperature variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale temperature variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale humidity variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen v5."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls width of tunnels, a smaller value creates wider tunnels.\n"
+"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
+"intensive noise calculations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave proportion flooded"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of cavern upper limit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern taper"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-distance over which caverns expand to full size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines full size of caverns, smaller values create larger caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of biome filler depth."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Factor noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise that determines number of dungeons per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"The 'snowbiomes' flag enables the new 5 biome system.\n"
+"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
+"the 'jungles' flag is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desert noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Deserts occur when np_biome exceeds this value.\n"
+"When the 'snowbiomes' flag is enabled, this is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sandy beaches occur when np_beach exceeds this value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain base noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of lower terrain and seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain higher noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of higher terrain that creates cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Steepness noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height select noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mud noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies depth of biome surface nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas with sandy beaches."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of number of caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines tree areas and tree density."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Apple trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas where trees have apples."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain zero level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain alternative noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain persistence noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of maximum mountain height (in nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge underwater noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines large-scale river channel structure."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen Carpathian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the base ground level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the depth of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River valley width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river valley."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness3 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Third of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness4 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hills spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hill size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridged mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of ridged mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of step mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that locates the river valleys and channels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain variation noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Flat.\n"
+"Occasional lakes and hills can be added to the flat world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for lakes.\n"
+"Controls proportion of world area covered by lakes.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for hills.\n"
+"Controls proportion of world area covered by hills.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines location and terrain of optional hills and lakes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Fractal.\n"
+"'terrain' enables the generation of non-fractal terrain:\n"
+"ocean, islands and underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fractal type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Selects one of 18 fractal types.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Increasing this increases the amount of fine detail, but also\n"
+"increases processing load.\n"
+"At iterations = 20 this mapgen has a similar load to mapgen V7."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) scale of fractal in nodes.\n"
+"Actual fractal size will be 2 to 3 times larger.\n"
+"These numbers can be made very large, the fractal does\n"
+"not have to fit inside the world.\n"
+"Increase these to 'zoom' into the detail of the fractal.\n"
+"Default is for a vertically-squashed shape suitable for\n"
+"an island, set all 3 numbers equal for the raw shape."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Can be used to move a desired point to (0, 0) to create a\n"
+"suitable spawn point, or to allow 'zooming in' on a desired\n"
+"point by increasing 'scale'.\n"
+"The default is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W coordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"X component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Y component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Z component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"W component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Seabed noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill': Reduces heat with altitude.\n"
+"'humid_rivers': Increases humidity around rivers.\n"
+"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n"
+"to become shallower and occasionally dry.\n"
+"'altitude_dry': Reduces humidity with altitude."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
+"enabled. Also the vertical distance over which humidity drops by 10 if\n"
+"'altitude_dry' is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern upper limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other biome filler node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley profile"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley slope"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n"
+"WARNING!: There is no benefit, and there are several dangers, in\n"
+"increasing this value above 5.\n"
+"Reducing this value increases cave and dungeon density.\n"
+"Altering this value is for special usage, leaving it unchanged is\n"
+"recommended."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug information."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of queued blocks to emerge"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use.\n"
+"Value 0:\n"
+"- Automatic selection. The number of emerge threads will be\n"
+"- 'number of processors - 2', with a lower limit of 1.\n"
+"Any other value:\n"
+"- Specifies the number of emerge threads, with a lower limit of 1.\n"
+"WARNING: Increasing the number of emerge threads increases engine mapgen\n"
+"speed, but this may harm game performance by interfering with other\n"
+"processes, especially in singleplayer and/or when running Lua code in\n"
+"'on_generated'. For many users the optimum setting may be '1'."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Online Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The URL for the content repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Flag Blacklist"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of flags to hide in the content repository.\n"
+"\"nonfree\" can be used to hide packages which do not qualify as 'free "
+"software',\n"
+"as defined by the Free Software Foundation.\n"
+"You can also specify content ratings.\n"
+"These flags are independent from Minetest versions,\n"
+"so see a full list at https://content.minetest.net/help/content_flags/"
+msgstr ""
diff --git a/po/he/minetest.po b/po/he/minetest.po
index bfff0f466..f0a49f82e 100644
--- a/po/he/minetest.po
+++ b/po/he/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Hebrew (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: 2019-11-10 15:04+0000\n"
"Last-Translator: Krock <mk939@ymail.com>\n"
"Language-Team: Hebrew <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -23,6 +23,10 @@ msgstr ""
msgid "You died"
msgstr ""
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -38,10 +42,6 @@ msgid "Main menu"
msgstr "תפריט ר×שי"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "×ישור"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "התחבר מחדש"
@@ -121,6 +121,10 @@ msgstr ""
"z0-9_] מותרי×."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "מוד:"
@@ -167,19 +171,20 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr ""
-
-#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
msgid "Back to Main Menu"
msgstr "תפריט ר×שי"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "טוען..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
msgstr ""
@@ -224,15 +229,51 @@ msgstr "החקן"
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "×¢×•×œ× ×‘×©× \"1$\" כבר ×§×™×™×"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "ליצור"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "הורד מפעיל משחק, למשל \"minetest_game\", מה×תר: minetest.net"
@@ -241,26 +282,146 @@ msgstr "הורד מפעיל משחק, למשל \"minetest_game\", מה×תר: mi
msgid "Download one from minetest.net"
msgstr "הורד ×חד מ-\"minetest.net\""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "משחק"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "מנוע מפות"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "מנוע מפות"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "No game selected"
msgstr "×ין ×¢×•×œ× × ×•×¦×¨ ×ו נבחר!"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "×זהרה: מצב ×”×ž×¤×ª×—×™× × ×•×¢×“ למפתחי×!."
#: builtin/mainmenu/dlg_create_world.lua
@@ -414,14 +575,25 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -569,6 +741,10 @@ msgid "Host Server"
msgstr "שרת"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "ש×/סיסמה"
@@ -639,6 +815,7 @@ msgstr "ש×/סיסמה"
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP ×פשר"
@@ -886,6 +1063,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -925,6 +1110,7 @@ msgstr "פורט"
msgid "- Public: "
msgstr "ציבורי"
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1200,6 +1386,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1231,7 +1425,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1353,6 +1547,7 @@ msgstr ""
msgid "Left Windows"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1445,6 +1640,7 @@ msgstr ""
msgid "Play"
msgstr "שחק"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1481,6 +1677,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
@@ -1715,10 +1912,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "he"
@@ -1802,6 +2004,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1812,6 +2018,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1860,7 +2074,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1905,6 +2119,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1918,10 +2142,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2092,8 +2312,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2171,10 +2391,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2443,6 +2671,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2752,6 +2984,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2861,6 +3103,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2914,6 +3184,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4210,14 +4486,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4281,6 +4549,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4348,7 +4620,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4442,10 +4716,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4513,13 +4783,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4604,6 +4874,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4710,7 +4984,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4762,9 +5036,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4841,10 +5112,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4854,7 +5121,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4888,6 +5157,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4956,6 +5233,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5394,6 +5683,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5416,6 +5712,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5427,15 +5727,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5552,7 +5862,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5705,6 +6015,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6025,6 +6339,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6059,3 +6381,6 @@ msgstr ""
#, fuzzy
#~ msgid "Enable VBO"
#~ msgstr "×פשר בכל"
+
+#~ msgid "Ok"
+#~ msgstr "×ישור"
diff --git a/po/hi/minetest.po b/po/hi/minetest.po
new file mode 100644
index 000000000..a45a5ae89
--- /dev/null
+++ b/po/hi/minetest.po
@@ -0,0 +1,6390 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-29 07:53+0000\n"
+"Last-Translator: Agastya <acagastya@outlook.com>\n"
+"Language-Team: Hindi <https://hosted.weblate.org/projects/minetest/minetest/"
+"hi/>\n"
+"Language: hi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.2-dev\n"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr "वापस ज़िंदा होà¤à¤‚"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr "आपकी मौत हो गयी"
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "Okay"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr "Lua कोड में यह परेशानी हà¥à¤ˆ :"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr "à¤à¤• खराबी हो गयी :"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "मà¥à¤–à¥à¤¯ पृषà¥à¤ "
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "वापस कनेकà¥à¤Ÿ करें"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "सरà¥à¤µà¤° वापस कनेकà¥à¤Ÿ करना चाहता है :"
+
+#: builtin/mainmenu/common.lua src/client/game.cpp
+msgid "Loading..."
+msgstr "लोड हो रहा है ..."
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल संखà¥à¤¯à¤¾ à¤à¤• नहीं है। "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "सरà¥à¤µà¤° केवल पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल $1 लेता है। "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "सरà¥à¤µà¤° केवल पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल $1 से $2 ही लेता है। "
+
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr "सारà¥à¤µà¤œà¤¨à¤¿à¤• सरà¥à¤µà¤° शृंखला (सरà¥à¤µà¤° लिसà¥à¤Ÿ) को 'हां' करें और इंटरनेट कनेकà¥à¤¶à¤¨ जांचें।"
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "हम केवल पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल $1 ही लेते हैं।"
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "हम पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल $1 से $2 ही लेते हैं।"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr "रोकें"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr "निरà¥à¤­à¤°à¤¤à¤¾à¤à¤‚ :"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr "पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• रोकें"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr "माॅडपैक रोकें"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• चालू करें"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr "माॅडपैक चालू करें"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"characters [a-z0-9_] are allowed."
+msgstr ""
+"मना किठगठवरà¥à¤£à¥‹à¤‚ के कारण माॅड \"$1\" चालू नहीं हो सका। कृपया [a-z0-9] अंगà¥à¤°à¥‡à¤œà¥€ वरà¥à¤£ का "
+"ही पà¥à¤°à¤¯à¥‹à¤— करें।"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "और मोड खोजें"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "माॅड :"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr "कोई (अनावशà¥à¤¯à¤•) निरà¥à¤­à¤°à¤¤à¤¾à¤à¤‚ नहीं हैं"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr "खेल ने अपने बारे में कà¥à¤› नहीं बताया।"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr "कोई आवशà¥à¤¯à¤• निरà¥à¤­à¤°à¤¤à¤¾à¤à¤‚ नहीं"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr "माॅडपैक ने अपने बारे में कà¥à¤› नहीं बताया।"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr "कोई अनावशà¥à¤¯à¤• निरà¥à¤­à¤°à¤¤à¤¾à¤à¤‚ नहीं"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr "अनावशà¥à¤¯à¤• निरà¥à¤­à¤°à¤¤à¤¾à¤à¤‚ :"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "सेव करें"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "दà¥à¤¨à¤¿à¤¯à¤¾ :"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "चालू"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr "सभी पैकेज"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr "वापस मà¥à¤–à¥à¤¯ पृषà¥à¤  पर जाà¤à¤‚"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "लोड हो रहा है ..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr "$1 का डाऊनलोड असफल हà¥à¤†"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "अनेक खेल"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² करें"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Mods"
+msgstr "माॅड"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr "कोई पैकेज नहीं ला पाया गया"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr "कà¥à¤› नहीं मिला"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr "ढूंढें"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr "कला संकà¥à¤²"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr "हटाà¤à¤‚"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr "नया संसà¥à¤•रण इनà¥à¤¸à¥à¤Ÿà¤¾à¤² करें"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "दृशà¥à¤¯"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "\"$1\" नामक दà¥à¤¨à¤¿à¤¯à¤¾ पहले से ही है"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "सपà¥à¤Ÿà¤• (आकà¥à¤Ÿà¥‡à¤µ)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "बनाइà¤"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "सजावट"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a game, such as Minetest Game, from minetest.net"
+msgstr "मैनटेसà¥à¤Ÿ खेल जैसे अनà¥à¤¯ खेल minetest.net से डाऊनलोड किठजा सकते हैं"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "आप किसी भी खेल को minetest.net से डाऊनलोड कर सकते हैं"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "खेल"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "नम नदियाà¤"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "नदियों के आसपास नमी बढ़ाता है"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "à¤à¥€à¤²à¥‡à¤‚"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "कम आरà¥à¤¦à¥à¤°à¤¤à¤¾ और उचà¥à¤š गरà¥à¤®à¥€ की वजह से नदियाठउथली या सूखी हो जाती है"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "नकà¥à¤¶à¤¾ सà¥à¤°à¥‹à¤¤"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "पहाड़ों"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "कीचड़ का बहाव"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "सà¥à¤°à¤‚गों और गà¥à¤«à¤¾à¤“ं का नेटवरà¥à¤•"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr "कोई खेल चूना नहीं गया है"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "ऊंचाई के साथ गरà¥à¤®à¥€ कम करता है"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "ऊंचाई के साथ नमी कम करता है"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "नदियाà¤"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "समà¥à¤¦à¥à¤° तल की नदियाà¤"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr "बीज"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "इलाके में दिखने वाली संरचनाà¤à¤‚, आमतौर पर पेड़-पौधे"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "शीतोषà¥à¤£, रेगिसà¥à¤¤à¤¾à¤¨"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "शीतोषà¥à¤£, रेगिसà¥à¤¤à¤¾à¤¨, जंगल"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "शीतोषà¥à¤£, रेगिसà¥à¤¤à¤¾à¤¨, जंगल, टà¥à¤‚डà¥à¤°à¤¾, तायगा"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "इलाके की सतह का कटाव"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "पेड़ और जंगल की घास"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
+msgstr ""
+"चेतावनी : नà¥à¤¯à¥‚नतम विकास खेल (Minimal development test) खेल बनाने वालों के लिठहै।"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "दà¥à¤¨à¤¿à¤¯à¤¾ का नाम"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no games installed."
+msgstr "आपने कोई खेल इनà¥à¤¸à¥à¤Ÿà¤¾à¤² नहीं किया है।"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "कà¥à¤¯à¤¾ आप सचमà¥à¤š \"$1\" को रदà¥à¤¦ करना चाहते हैं?"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
+#: src/client/keycode.cpp
+msgid "Delete"
+msgstr "रदà¥à¤¦ करें"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr "pkgmgr: \"$1\" रदà¥à¤¦ नहीं किया जा सका"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr "pkgmgr: \"$1\" फाईल पार गलत है"
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "दà¥à¤¨à¤¿à¤¯à¤¾ रदà¥à¤¦ करें?"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr "हां"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr "माॅडपैक का नाम बदलें :"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid ""
+"This modpack has an explicit name given in its modpack.conf which will "
+"override any renaming here."
+msgstr "modpack.conf फाईल में इस माॅडपैक को जो नाम दिया गया है वही माना जाà¤à¤—ा।"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(सेटिंग के बारे में कà¥à¤› नहीं बताया गया है)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr "दà¥à¤µà¤¿ आयामी नॉइस"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "वापस सेटिंग पृषà¥à¤  पर जाà¤à¤‚"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "ढूंढें"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "रà¥à¤•ा हà¥à¤†"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "बदलें"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "चालू"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr "लैकà¥à¤¨à¤¾à¤°à¤¿à¤Ÿà¥€"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr "सपà¥à¤Ÿà¤• (आकà¥à¤Ÿà¥‡à¤µ)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr "आफसेट"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistance"
+msgstr "हठ (परà¥à¤¸à¤¿à¤¸à¥à¤Ÿà¥‡à¤¨à¥à¤¸)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "कृपया à¤à¤• पूरà¥à¤£à¤¾à¤‚क (integer) भरें।"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "कृपया à¤à¤• अंक भरें।"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "मूल चà¥à¤¨à¥‡à¤‚"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr "सà¥à¤•ेल"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr "फाईल पाथ चà¥à¤¨à¥‡à¤‚"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr "फाईल चà¥à¤¨à¥‡à¤‚"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "तकनीकी नाम देखें"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr "इसका मूलà¥à¤¯ कम-से-कम $1 होना चाहिà¤à¥¤"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr "इसका मूलà¥à¤¯ $1 से अधिक नहीं होना चाहिà¤à¥¤"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr "à¤à¤•à¥à¤¸"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr "X सà¥à¤ªà¥à¤°à¥‡à¤¡"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr "वाई"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr "Y सà¥à¤ªà¥à¤°à¥‡à¤¡"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr "जेड"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr "Z सà¥à¤ªà¥à¤°à¥‡à¤¡"
+
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "absvalue"
+msgstr "à¤à¤¬à¥à¤¸à¥‹à¤²à¥à¤¯à¥‚ट वैलà¥à¤¯à¥‚"
+
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "defaults"
+msgstr "डीफालà¥à¤Ÿ"
+
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "eased"
+msgstr "आरामदायक (ईज़à¥à¤¡)"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr "($1) चालू"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr "$1 यह सब मॉड"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr "$2 में $1 को इनà¥à¤¸à¥à¤Ÿà¤¾à¤² नहीं किया जा सका"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² मॉड: $1 का असल नाम नहीं जान पाया गया"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr "माॅड इनà¥à¤¸à¥à¤Ÿà¤¾à¤²: माॅडपैक $1 के लिठसही फोलà¥à¤¡à¤° नहीं ढूंढा जा सका"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: Unsupported file type \"$1\" or broken archive"
+msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² : \"$1\" का फाईल टाईप अंजान है याफिर आरकाइव खराब है"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: file: \"$1\""
+msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² : फाईल : \"$1\""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr "सही माॅड या माॅडपैक नहीं ढूंढ पाया गया"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr "$1 कला संकà¥à¤² के रूप में इनà¥à¤¸à¥à¤Ÿà¤¾à¤² नहीं किया जा सका"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr "खेल को $1 के रूप में इनà¥à¤¸à¥à¤Ÿà¤¾à¤² नहीं किया जा सका"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr "मॉड को $1 के रूप में इनà¥à¤¸à¥à¤Ÿà¤¾à¤² नहीं किया जा सका"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr "माॅडपैक को $1 के रूप में इनà¥à¤¸à¥à¤Ÿà¤¾à¤² नहीं किया जा सका"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Browse online content"
+msgstr "नेट पर वसà¥à¤¤à¥à¤à¤‚ ढूंढें"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Content"
+msgstr "वसà¥à¤¤à¥à¤à¤‚"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Disable Texture Pack"
+msgstr "कला संकà¥à¤² रोकें"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Information:"
+msgstr "जानकारी :"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Installed Packages:"
+msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² किये गये पैकेज :"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No dependencies."
+msgstr "कोई निरà¥à¤­à¤°à¥à¤¤à¤¾à¤à¤‚ नहीं हैं|"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No package description available"
+msgstr "पैकेज के बारे में कà¥à¤› नहीं बताया गया है"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Rename"
+msgstr "नाम बदलें"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Uninstall Package"
+msgstr "पैकेज हटाà¤à¤‚"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Use Texture Pack"
+msgstr "कला संकà¥à¤² चालू करें"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "सकà¥à¤°à¤¿à¤¯ सहायक"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "मà¥à¤–à¥à¤¯ डेवेलपर"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "आभार सूची"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr "पूरà¥à¤µ सहायक"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "पूरà¥à¤µ मà¥à¤–à¥à¤¯ डेवेलपर"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Announce Server"
+msgstr "सरà¥à¤µà¤° सारà¥à¤µà¤œà¤¨à¤¿à¤• सरà¥à¤µà¤° सूची (server list) में दिखे"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Bind Address"
+msgstr "बाईंड à¤à¤¡à¥à¤°à¥‡à¤¸"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Configure"
+msgstr "सेटिंग बदलें"
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative Mode"
+msgstr "असीमित संसाधन"
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Enable Damage"
+msgstr "हानि व मृतà¥à¤¯à¥ हो सकती है"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Game"
+msgstr "खेल चलाà¤à¤‚"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Server"
+msgstr "सरà¥à¤µà¤° चलाà¤à¤‚"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Name/Password"
+msgstr "नाम/पासवरà¥à¤¡"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "New"
+msgstr "नया"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+msgstr "कोई दà¥à¤¨à¤¿à¤¯à¤¾ उपसà¥à¤¥à¤¿à¤¤ या चà¥à¤¨à¥€ गयी नहीं है !"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Play Game"
+msgstr "खेल खेलें"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Port"
+msgstr "पोरà¥à¤Ÿ"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select World:"
+msgstr "दà¥à¤¨à¤¿à¤¯à¤¾ चà¥à¤¨à¥à¤¹à¥‡à¤‚ :"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Server Port"
+msgstr "सरà¥à¤µà¤° पोरà¥à¤Ÿ"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Start Game"
+msgstr "खेल शà¥à¤°à¥‚ करें"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Address / Port"
+msgstr "à¤à¤¡à¤°à¥‡à¤¸ / पोरà¥à¤Ÿ"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr "कनेकà¥à¤Ÿ करें"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr "असीमित संसाधन"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr "हानि व मृतà¥à¤¯à¥ हो सकती है"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr "पसंद हटाà¤à¤‚"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr "पसंद"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Join Game"
+msgstr "खेल में शामिल होà¤à¤‚"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr "नाम/पासवरà¥à¤¡"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Ping"
+msgstr "पिंग"
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "खिलाडियों में मारा-पीटी की अनà¥à¤®à¤¤à¥€ है"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "दà¥à¤—à¥à¤¨à¤¾"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "तà¥à¤°à¤¿à¤µà¤¿à¤® दृशà¥à¤¯à¤¨ बादल"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "चार गà¥à¤¨à¤¾"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "आठ गà¥à¤¨à¤¾"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "All Settings"
+msgstr "सभी सेटिंग देखें"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "à¤à¤¨à¥à¤Ÿà¥€ à¤à¤²à¤¿à¤¯à¤¾à¤¸à¤¿à¤‚ग :"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "कà¥à¤¯à¤¾ आप सचमà¥à¤š अपने à¤à¤•-खिलाडी दà¥à¤¨à¤¿à¤¯à¤¾ रदà¥à¤¦ करना चाहते हैं?"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
+msgstr "सà¥à¤•à¥à¤°à¥€à¤¨ परिमाण सà¥à¤µà¤¯à¤‚ सेव हो"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr "दà¥à¤µà¤¿à¤°à¥‡à¤–िय फिलà¥à¤Ÿà¤°"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr "टकराव मैपिंग"
+
+#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
+msgid "Change Keys"
+msgstr "की बदलें"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "जà¥à¤¡à¥‡ शिशे"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "रोचक पतà¥à¤¤à¥‡"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Generate Normal Maps"
+msgstr "मामूली नकà¥à¤¶à¥‡ बनाà¤à¤‚"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr "मिपमैप"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr "मिपमैप व अनीसो. फिलà¥à¤Ÿà¤°"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "नहीं"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "कोई फिलà¥à¤Ÿà¤° नहीं"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "मिपमैप नहीं हो"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "डिबà¥à¤¬à¥‡à¤‚ उजाले हों"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr "डिबà¥à¤¬à¥‹à¤‚ की रूपरेखा"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "None"
+msgstr "कà¥à¤› नहीं"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "अपारदरà¥à¤¶à¥€ पतà¥à¤¤à¥‡"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "अपारदरà¥à¤¶à¥€ पानी"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "पेरलेकà¥à¤¸ ऑकà¥à¤²à¥‚जन"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr "कण"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Reset singleplayer world"
+msgstr "à¤à¤•-खिलाडी दà¥à¤¨à¤¿à¤¯à¤¾ रीसेट करें"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr "सà¥à¤•à¥à¤°à¥€à¤¨ :"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "सेटिंग"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr "छाया बनावट"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (unavailable)"
+msgstr "छाया बनावट (अनà¥à¤ªà¤²à¤¬à¥à¤§)"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "मामूली पतà¥à¤¤à¥‡"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "चिकना उजाला"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "कला बनावट :"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "छाया बनावट कॆ लिये OpenGL डà¥à¤°à¤¾à¤ˆà¤µà¤° आवशà¥à¤¯à¤• हैं|"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "टोन मैपिंग"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold: (px)"
+msgstr "छूने की तà¥à¤°à¤¿à¤œà¥à¤¯à¤¾ : (px)"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "तà¥à¤°à¤¿à¤°à¥‡à¤–ीय फिलà¥à¤Ÿà¤°"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr "पतà¥à¤¤à¥‡ लहराà¤à¤‚"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Liquids"
+msgstr "पानी में लहरें बनें"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr "पाैधे लहराà¤à¤‚"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "हां"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr "मॉड कॆ सेटिंग बदलें"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr "मà¥à¤–à¥à¤¯"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "à¤à¤•-खिलाडी शà¥à¤°à¥‚ करें"
+
+#: src/client/client.cpp
+msgid "Connection timed out."
+msgstr "कनेकà¥à¤¶à¤¨ समय अंत|"
+
+#: src/client/client.cpp
+msgid "Done!"
+msgstr "हो गया !"
+
+#: src/client/client.cpp
+msgid "Initializing nodes"
+msgstr "डीबà¥à¤¬à¥‡ बन रहे हें"
+
+#: src/client/client.cpp
+msgid "Initializing nodes..."
+msgstr "डिबà¥à¤¬à¥‡ बन रहें हैं ..."
+
+#: src/client/client.cpp
+msgid "Loading textures..."
+msgstr "कला लोड हो रही है ..."
+
+#: src/client/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "छायाà¤à¤‚ वापस बन रहीं हैं ..."
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "कनेकà¥à¤¶à¤¨ खराबी (समय अंत?)"
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "खेल ढूंढा ना जा सका या लोड नहीं किया जा सका \""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "गलत गेमसà¥à¤ªà¥‡à¤• कोड।"
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "मà¥à¤–à¥à¤¯ पृ़षà¥à¤ "
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "कोई दà¥à¤¨à¤¿à¤¯à¤¾ नहीं चà¥à¤¨à¥€ गयी है, ना ही पता दिया गया है। कà¥à¤› नहीं करना।"
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "खिलाडी का नाम अधिक लंबा है|"
+
+#: src/client/clientlauncher.cpp
+msgid "Please choose a name!"
+msgstr "कृपया à¤à¤• नाम चà¥à¤¨à¥‡à¤‚!"
+
+#: src/client/clientlauncher.cpp
+msgid "Provided password file failed to open: "
+msgstr "पासवरà¥à¤¡ फाईल नहीं खà¥à¤²à¤¾ :- "
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "दà¥à¤¨à¤¿à¤¯à¤¾ का फाईल पाथ नहीं है : "
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
+#: src/client/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "yes"
+
+#: src/client/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"अधिक जानकारी के लिठdebug.txt देखें।"
+
+#: src/client/game.cpp
+msgid "- Address: "
+msgstr "- à¤à¤¡à¥à¤°à¥‡à¤¸ : "
+
+#: src/client/game.cpp
+msgid "- Creative Mode: "
+msgstr "- असीमित साधन "
+
+#: src/client/game.cpp
+msgid "- Damage: "
+msgstr "- हानि : "
+
+#: src/client/game.cpp
+msgid "- Mode: "
+msgstr "- तकनीक : "
+
+#: src/client/game.cpp
+msgid "- Port: "
+msgstr "- पोरà¥à¤Ÿ : "
+
+#: src/client/game.cpp
+msgid "- Public: "
+msgstr "- सारà¥à¤µà¤œà¤¨à¤¿à¤• : "
+
+#. ~ PvP = Player versus Player
+#: src/client/game.cpp
+msgid "- PvP: "
+msgstr "- खिलाड़ियों में मारा-पीटी : "
+
+#: src/client/game.cpp
+msgid "- Server Name: "
+msgstr "- सरà¥à¤µà¤° का नाम : "
+
+#: src/client/game.cpp
+msgid "Automatic forward disabled"
+msgstr "सà¥à¤µà¤šà¤¾à¤² रà¥à¤•ा हà¥à¤†"
+
+#: src/client/game.cpp
+msgid "Automatic forward enabled"
+msgstr "सà¥à¤µà¤šà¤¾à¤² चालू"
+
+#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr "कैमरा रà¥à¤•ा हà¥à¤†"
+
+#: src/client/game.cpp
+msgid "Camera update enabled"
+msgstr "कैमरा चालू"
+
+#: src/client/game.cpp
+msgid "Change Password"
+msgstr "पासवरà¥à¤¡ बदलें"
+
+#: src/client/game.cpp
+msgid "Cinematic mode disabled"
+msgstr "सिनेमा चाल रà¥à¤•ा हà¥à¤†"
+
+#: src/client/game.cpp
+msgid "Cinematic mode enabled"
+msgstr "सिनेमा चाल चालू"
+
+#: src/client/game.cpp
+msgid "Client side scripting is disabled"
+msgstr "कà¥à¤²à¤¾à¤‡à¤‚ट की तरफ से सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ लगाना मना है"
+
+#: src/client/game.cpp
+msgid "Connecting to server..."
+msgstr "सरà¥à¤µà¤° से कनेकà¥à¤Ÿ हà¥à¤† जा रहा है ..."
+
+#: src/client/game.cpp
+msgid "Continue"
+msgstr "आगे बढ़ें"
+
+#: src/client/game.cpp
+#, c-format
+msgid ""
+"Controls:\n"
+"- %s: move forwards\n"
+"- %s: move backwards\n"
+"- %s: move left\n"
+"- %s: move right\n"
+"- %s: jump/climb\n"
+"- %s: sneak/go down\n"
+"- %s: drop item\n"
+"- %s: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- %s: chat\n"
+msgstr ""
+"कंटà¥à¤°à¥‹à¤²à¥à¤¸:\n"
+"- %s : आगे बढ़ने के लिà¤\n"
+"- %s : पीछे जाने के लिà¤\n"
+"- %s : बाय की ओर चलें\n"
+"- %s : दाà¤à¤‚ की ओर चलें\n"
+"- %s : कूदे या चढ़े\n"
+"- %s : उतरे / संभल के चलें\n"
+"- %s : वसà¥à¤¤à¥ गिराà¤à¤‚\n"
+"- %s : वसà¥à¤¤à¥ सूची खोलें\n"
+"- : माउस मà¥à¤¡à¤¼à¥‡ देखें\n"
+"- : माउस बाय : खोदें / मà¥à¤•à¥à¤•ा मारें\n"
+"- : माउस दाहिने : डाले / इसà¥à¤¤à¥‡à¤®à¤¾à¤² करें\n"
+"- : माउस पहिया : वसà¥à¤¤à¥ चà¥à¤¨à¥‡à¤‚\n"
+"- %s : बात करने के लिà¤\n"
+
+#: src/client/game.cpp
+msgid "Creating client..."
+msgstr "कà¥à¤²à¤¾à¤‡à¤‚ट बनाया जा रहा है ..."
+
+#: src/client/game.cpp
+msgid "Creating server..."
+msgstr "सरà¥à¤µà¤° बनाया जा रहा है ..."
+
+#: src/client/game.cpp
+msgid "Debug info and profiler graph hidden"
+msgstr "डीबग जानकारी व पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² गायब"
+
+#: src/client/game.cpp
+msgid "Debug info shown"
+msgstr "डीबग जानकारी दिखाई दे रही है"
+
+#: src/client/game.cpp
+msgid "Debug info, profiler graph, and wireframe hidden"
+msgstr "डीबग जानकारी, पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤° व रूपरेखा गायब"
+
+#: src/client/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"आम कंटà¥à¤°à¥‹à¤²à¥à¤¸ :\n"
+"कोई मेनू खà¥à¤²à¤¾ नहीं है :\n"
+"-à¤à¤• बार टैप : बटन दबेगा\n"
+"-दो टॉप: डालना/ इसà¥à¤¤à¥‡à¤®à¤¾à¤² करना\n"
+"-उंगली फिसलाना : मà¥à¤¡à¤¼à¤¨à¤¾\n"
+"कोई मेनू या वसà¥à¤¤à¥ सूची खà¥à¤²à¥€ है :\n"
+"-बाहर दो बार टैप :\n"
+"--> बंद\n"
+"- ढेर छूà¤à¤‚, सà¥à¤¥à¤¾à¤¨ छूà¤à¤‚\n"
+"--> ढेर का सà¥à¤¥à¤¾à¤¨ बदलने के लिà¤\n"
+"- छà¥à¤ व खींचे, दूसरी उंगली से टैप करें\n"
+"--> à¤à¤• वसà¥à¤¤à¥ सà¥à¤¥à¤¾à¤¨ में डालें\n"
+
+#: src/client/game.cpp
+msgid "Disabled unlimited viewing range"
+msgstr "दृषà¥à¤Ÿà¤¿ सीमित"
+
+#: src/client/game.cpp
+msgid "Enabled unlimited viewing range"
+msgstr "दृषà¥à¤Ÿà¤¿ असीमित"
+
+#: src/client/game.cpp
+msgid "Exit to Menu"
+msgstr "बंद करके मेनू पर जाà¤à¤‚"
+
+#: src/client/game.cpp
+msgid "Exit to OS"
+msgstr "बंद करके ओ॰ à¤à¤¸à¥° में जाà¤à¤‚"
+
+#: src/client/game.cpp
+msgid "Fast mode disabled"
+msgstr "तेज चलन रà¥à¤•ा हà¥à¤†"
+
+#: src/client/game.cpp
+msgid "Fast mode enabled"
+msgstr "तेज जलन चालू"
+
+#: src/client/game.cpp
+msgid "Fast mode enabled (note: no 'fast' privilege)"
+msgstr "तेज चैनल चालू (सूचना: आपके पास 'तेज' विशेषाधिकार नहीं है)"
+
+#: src/client/game.cpp
+msgid "Fly mode disabled"
+msgstr "उड़ान अनà¥à¤ªà¤²à¤¬à¥à¤§ है"
+
+#: src/client/game.cpp
+msgid "Fly mode enabled"
+msgstr "उड़ान उपलबà¥à¤§ है"
+
+#: src/client/game.cpp
+msgid "Fly mode enabled (note: no 'fly' privilege)"
+msgstr "उड़ान उपलबà¥à¤§ है (सूचना: आपके पास 'उड़ान' विशेषाधिकार नहीं है)"
+
+#: src/client/game.cpp
+msgid "Fog disabled"
+msgstr "कोहरा रà¥à¤•ा हà¥à¤†"
+
+#: src/client/game.cpp
+msgid "Fog enabled"
+msgstr "कोहरा चालू"
+
+#: src/client/game.cpp
+msgid "Game info:"
+msgstr "खेल की जानकारी :"
+
+#: src/client/game.cpp
+msgid "Game paused"
+msgstr "खेल रà¥à¤•ा हà¥à¤† है"
+
+#: src/client/game.cpp
+msgid "Hosting server"
+msgstr "सरà¥à¤µà¤° चलन"
+
+#: src/client/game.cpp
+msgid "Item definitions..."
+msgstr "वसà¥à¤¤à¥à¤“ं के अरà¥à¤¥ ..."
+
+#: src/client/game.cpp
+msgid "KiB/s"
+msgstr "कि॰बी॰/à¤à¤¸à¥°"
+
+#: src/client/game.cpp
+msgid "Media..."
+msgstr "कला à¤à¤µà¤‚ आवाज़ें ..."
+
+#: src/client/game.cpp
+msgid "MiB/s"
+msgstr "à¤à¤®à¥° आई॰ बी॰/ à¤à¤¸à¥°"
+
+#: src/client/game.cpp
+msgid "Minimap currently disabled by game or mod"
+msgstr "खेल या मॉड़ के वजह से छोटा नकà¥à¤¶à¤¾ मना है"
+
+#: src/client/game.cpp
+msgid "Minimap hidden"
+msgstr "छोटा नकà¥à¤¶à¤¾ गायब"
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x1"
+msgstr "छोटा नकà¥à¤¶à¤¾ रेडार मोड, 1 गà¥à¤¨à¤¾ ज़ूम"
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x2"
+msgstr "छोटा नकà¥à¤¶à¤¾ रेडर मोड, दोगà¥à¤¨à¤¾ जूम"
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x4"
+msgstr "छोटा नकà¥à¤¶à¤¾ रेडार मोड, 4 गà¥à¤¨à¤¾ ज़ूम"
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x1"
+msgstr "छोटा नकà¥à¤¶à¤¾ जमीन मोड, 1 गà¥à¤¨à¤¾ ज़ूम"
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x2"
+msgstr "छोटा नकà¥à¤¶à¤¾ जमीन मोड, दोगà¥à¤¨à¤¾ जूम"
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x4"
+msgstr "छोटा नकà¥à¤¶à¤¾ जमीन मोड, 4 गà¥à¤¨à¤¾ जून"
+
+#: src/client/game.cpp
+msgid "Noclip mode disabled"
+msgstr "तरल चाल रà¥à¤•ा हà¥à¤†"
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled"
+msgstr "तरल चाल चालू"
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled (note: no 'noclip' privilege)"
+msgstr "तरल चाल चालू (सूचना: आपके पास तरल विशेषाधिकार नहीं है)"
+
+#: src/client/game.cpp
+msgid "Node definitions..."
+msgstr "डिबà¥à¤¬à¥‹à¤‚ का अरà¥à¤¥ ..."
+
+#: src/client/game.cpp
+msgid "Off"
+msgstr "ऑफ"
+
+#: src/client/game.cpp
+msgid "On"
+msgstr "ऑन"
+
+#: src/client/game.cpp
+msgid "Pitch move mode disabled"
+msgstr "पिच चलन रà¥à¤•ा हà¥à¤†"
+
+#: src/client/game.cpp
+msgid "Pitch move mode enabled"
+msgstr "पिच चलन चालू"
+
+#: src/client/game.cpp
+msgid "Profiler graph shown"
+msgstr "पà¥à¤°à¥‹à¤«à¤¾à¤ˆà¤²à¤° दिखाई दे रहा है"
+
+#: src/client/game.cpp
+msgid "Remote server"
+msgstr "बाहर का सरà¥à¤µà¤°"
+
+#: src/client/game.cpp
+msgid "Resolving address..."
+msgstr "à¤à¤¡à¥à¤°à¥‡à¤¸ समà¤à¤¾ जा रहा है ..."
+
+#: src/client/game.cpp
+msgid "Shutting down..."
+msgstr "शट डाउन हो रहा है ..."
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr "à¤à¤•-खिलाडी"
+
+#: src/client/game.cpp
+msgid "Sound Volume"
+msgstr "आवाज़ वॉलà¥à¤¯à¥‚म"
+
+#: src/client/game.cpp
+msgid "Sound muted"
+msgstr "आवाज़ बंद"
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound unmuted"
+msgstr "आवाज चालू"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range changed to %d"
+msgstr "दृषà¥à¤Ÿà¤¿ सीमा बदलकर %d है"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at maximum: %d"
+msgstr "दृषà¥à¤Ÿà¤¿ सीमा अधिकतम : %d"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at minimum: %d"
+msgstr "दृषà¥à¤Ÿà¤¿ सीमा नà¥à¤¯à¥‚नतम : %d"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Volume changed to %d%%"
+msgstr "वॉलà¥à¤¯à¥‚म को बदलकर %d%%"
+
+#: src/client/game.cpp
+msgid "Wireframe shown"
+msgstr "डिबà¥à¤¬à¥‡ रेखांकित"
+
+#: src/client/game.cpp
+msgid "Zoom currently disabled by game or mod"
+msgstr "खेल या मॉड़ के वजह से इस समय ज़ूम मना है"
+
+#: src/client/game.cpp
+msgid "ok"
+msgstr "ठीक है"
+
+#: src/client/gameui.cpp
+msgid "Chat hidden"
+msgstr "बातें दिखाई नहीं देंगी"
+
+#: src/client/gameui.cpp
+msgid "Chat shown"
+msgstr "बातें दिखाई देंगी"
+
+#: src/client/gameui.cpp
+msgid "HUD hidden"
+msgstr "हे॰अ॰डि॰ दिखाई नहीं देंगी"
+
+#: src/client/gameui.cpp
+msgid "HUD shown"
+msgstr "हे॰अ॰डि॰ दिखाई देंगी"
+
+#: src/client/gameui.cpp
+msgid "Profiler hidden"
+msgstr "पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤° नहीं दिखाई देगा"
+
+#: src/client/gameui.cpp
+#, c-format
+msgid "Profiler shown (page %d of %d)"
+msgstr "पà¥à¤°à¥‹à¤«à¤¾à¤ˆà¤²à¤° दिखाई दे रही है (पृषà¥à¤  %d %d पृषà¥à¤ à¥‹à¤‚ में से)"
+
+#: src/client/keycode.cpp
+msgid "Apps"
+msgstr "à¤à¤ªà¥à¤¸"
+
+#: src/client/keycode.cpp
+msgid "Backspace"
+msgstr "बैकसà¥à¤ªà¥‡à¤¸"
+
+#: src/client/keycode.cpp
+msgid "Caps Lock"
+msgstr "कैपà¥à¤¸ लाक"
+
+#: src/client/keycode.cpp
+msgid "Clear"
+msgstr "खाली करें"
+
+#: src/client/keycode.cpp
+msgid "Control"
+msgstr "कंटà¥à¤°à¥‹à¤²"
+
+#: src/client/keycode.cpp
+msgid "Down"
+msgstr "नीचे"
+
+#: src/client/keycode.cpp
+msgid "End"
+msgstr "à¤à¤‚ड"
+
+#: src/client/keycode.cpp
+msgid "Erase EOF"
+msgstr "ई.ओ.à¤à¤« खाली करें"
+
+#: src/client/keycode.cpp
+msgid "Execute"
+msgstr "à¤à¤—à¥à¤¸à¥€à¤•à¥à¤¯à¥‚ट"
+
+#: src/client/keycode.cpp
+msgid "Help"
+msgstr "हेलà¥à¤ª"
+
+#: src/client/keycode.cpp
+msgid "Home"
+msgstr "होम"
+
+#: src/client/keycode.cpp
+msgid "IME Accept"
+msgstr "आई à¤à¤® ई à¤à¤•à¥à¤¸à¥‡à¤ªà¥à¤Ÿ"
+
+#: src/client/keycode.cpp
+msgid "IME Convert"
+msgstr "आई à¤à¤® ई कनà¥à¤µà¤°à¥à¤Ÿ"
+
+#: src/client/keycode.cpp
+msgid "IME Escape"
+msgstr "आई à¤à¤® ई à¤à¤¸à¥à¤•ेप"
+
+#: src/client/keycode.cpp
+msgid "IME Mode Change"
+msgstr "आई à¤à¤® ई मोड चेंज"
+
+#: src/client/keycode.cpp
+msgid "IME Nonconvert"
+msgstr "आई à¤à¤® ई नानकनà¥à¤µà¤°à¥à¤Ÿ"
+
+#: src/client/keycode.cpp
+msgid "Insert"
+msgstr "इनà¥à¤¸à¤°à¥à¤Ÿ"
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Left"
+msgstr "बायां"
+
+#: src/client/keycode.cpp
+msgid "Left Button"
+msgstr "बायां बटन"
+
+#: src/client/keycode.cpp
+msgid "Left Control"
+msgstr "बायां कंटà¥à¤°à¥‹à¤²"
+
+#: src/client/keycode.cpp
+msgid "Left Menu"
+msgstr "बायां मेनू"
+
+#: src/client/keycode.cpp
+msgid "Left Shift"
+msgstr "लेफà¥à¤Ÿ शिफà¥à¤Ÿ"
+
+#: src/client/keycode.cpp
+msgid "Left Windows"
+msgstr "लेफà¥à¤Ÿ विंडोज"
+
+#. ~ Key name, common on Windows keyboards
+#: src/client/keycode.cpp
+msgid "Menu"
+msgstr "मेनू (कीबोरà¥à¤¡)"
+
+#: src/client/keycode.cpp
+msgid "Middle Button"
+msgstr "बीच का बटन"
+
+#: src/client/keycode.cpp
+msgid "Num Lock"
+msgstr "नम लाक"
+
+#: src/client/keycode.cpp
+msgid "Numpad *"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ *"
+
+#: src/client/keycode.cpp
+msgid "Numpad +"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ +"
+
+#: src/client/keycode.cpp
+msgid "Numpad -"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ -"
+
+#: src/client/keycode.cpp
+msgid "Numpad ."
+msgstr "नमà¥à¤ªà¥ˆà¤¡ ."
+
+#: src/client/keycode.cpp
+msgid "Numpad /"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ /"
+
+#: src/client/keycode.cpp
+msgid "Numpad 0"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ ०"
+
+#: src/client/keycode.cpp
+msgid "Numpad 1"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ १"
+
+#: src/client/keycode.cpp
+msgid "Numpad 2"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ २"
+
+#: src/client/keycode.cpp
+msgid "Numpad 3"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ ३"
+
+#: src/client/keycode.cpp
+msgid "Numpad 4"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ ४"
+
+#: src/client/keycode.cpp
+msgid "Numpad 5"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ ५"
+
+#: src/client/keycode.cpp
+msgid "Numpad 6"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ ६"
+
+#: src/client/keycode.cpp
+msgid "Numpad 7"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ ७"
+
+#: src/client/keycode.cpp
+msgid "Numpad 8"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ ८"
+
+#: src/client/keycode.cpp
+msgid "Numpad 9"
+msgstr "नमà¥à¤ªà¥ˆà¤¡ ९"
+
+#: src/client/keycode.cpp
+msgid "OEM Clear"
+msgstr "ओ ई à¤à¤® कà¥à¤²à¥€à¤¯à¤°"
+
+#: src/client/keycode.cpp
+msgid "Page down"
+msgstr "पेज डाऊन"
+
+#: src/client/keycode.cpp
+msgid "Page up"
+msgstr "पेज अप"
+
+#: src/client/keycode.cpp
+msgid "Pause"
+msgstr "पॉज़"
+
+#: src/client/keycode.cpp
+msgid "Play"
+msgstr "खेलें"
+
+#. ~ "Print screen" key
+#: src/client/keycode.cpp
+msgid "Print"
+msgstr "पà¥à¤°à¤¿à¤¨à¥à¤Ÿ बटन"
+
+#: src/client/keycode.cpp
+msgid "Return"
+msgstr "रिटरà¥à¤¨ बटन"
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Right"
+msgstr "दाहिना"
+
+#: src/client/keycode.cpp
+msgid "Right Button"
+msgstr "दाहिना बटन"
+
+#: src/client/keycode.cpp
+msgid "Right Control"
+msgstr "दाहिना"
+
+#: src/client/keycode.cpp
+msgid "Right Menu"
+msgstr "दाहिना मेनू"
+
+#: src/client/keycode.cpp
+msgid "Right Shift"
+msgstr "राईट शिफà¥à¤Ÿ"
+
+#: src/client/keycode.cpp
+msgid "Right Windows"
+msgstr "राईट विंडोज"
+
+#: src/client/keycode.cpp
+msgid "Scroll Lock"
+msgstr "सà¥à¤•à¥à¤°à¥‹à¤² लाक"
+
+#. ~ Key name
+#: src/client/keycode.cpp
+msgid "Select"
+msgstr "सिलेकà¥à¤Ÿ"
+
+#: src/client/keycode.cpp
+msgid "Shift"
+msgstr "शिफà¥à¤Ÿ"
+
+#: src/client/keycode.cpp
+msgid "Sleep"
+msgstr "सà¥à¤²à¥€à¤ª"
+
+#: src/client/keycode.cpp
+msgid "Snapshot"
+msgstr "सà¥à¤¨à¥ˆà¤ªà¤¶à¥‰à¤Ÿ"
+
+#: src/client/keycode.cpp
+msgid "Space"
+msgstr "सà¥à¤ªà¥‡à¤¸à¤¬à¤¾à¤°"
+
+#: src/client/keycode.cpp
+msgid "Tab"
+msgstr "टैब बटन"
+
+#: src/client/keycode.cpp
+msgid "Up"
+msgstr "ऊपर"
+
+#: src/client/keycode.cpp
+msgid "X Button 1"
+msgstr "X बटन १"
+
+#: src/client/keycode.cpp
+msgid "X Button 2"
+msgstr "X बटन २"
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Zoom"
+msgstr "ज़ूम"
+
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "पासवरà¥à¤¡ अलग अलग हैं!"
+
+#: src/gui/guiConfirmRegistration.cpp
+msgid "Register and Join"
+msgstr "पंजीकरण व खेलें"
+
+#: src/gui/guiConfirmRegistration.cpp
+#, c-format
+msgid ""
+"You are about to join this server with the name \"%s\" for the first time.\n"
+"If you proceed, a new account using your credentials will be created on this "
+"server.\n"
+"Please retype your password and click 'Register and Join' to confirm account "
+"creation, or click 'Cancel' to abort."
+msgstr ""
+"आप \"%s\" नाम से इस सरवर में पहली बार आने वाले हैं। अगर आप आगे बढ़ते हैं तो आपके लिठइस "
+"सरà¥à¤µà¤° पर à¤à¤• अकाउंट बनाया जाà¤à¤—ा।\n"
+"\n"
+"आगे बढ़ने ठलिखें कृपया अपने पासवरà¥à¤¡ को वापस लिखें और फिर 'पंजीकरण व खेलें' दबाà¤à¤‚, अथवा "
+"'रोकें' दबाà¤à¤‚।"
+
+#: src/gui/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "आगे बढ़े"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "\"Special\" = climb down"
+msgstr "\"सà¥à¤ªà¥‡à¤¶à¤²\" = नीचे उतरना"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Autoforward"
+msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¨"
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Automatic jumping"
+msgstr "कूदने के लिठबटन दबाना अनावशà¥à¤¯à¤•"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "पीछे जाà¤à¤‚"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Change camera"
+msgstr "कैमरा बदलना"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "बातें"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "आजà¥à¤žà¤¾"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "कनà¥à¤¸à¥‹à¤²"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. range"
+msgstr "दृषà¥à¤Ÿà¤¿ सीमा कम"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. volume"
+msgstr "आवाज़ कम"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "उड़ने के लिठदो बार कूदें"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "वसà¥à¤¤à¥ गिराना"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "आगे जाà¤à¤‚"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. range"
+msgstr "दृषà¥à¤Ÿà¤¿ सीमा अधिक"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. volume"
+msgstr "आवाज अधिक"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "वसà¥à¤¤à¥ सूची"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "कूदना"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "की पहले से इसà¥à¤¤à¥‡à¤®à¤¾à¤² में है"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr "कीबोरà¥à¤¡ सेटिंग (अगर यह मेनू खराब हो जाठतो minetest.conf से सब कà¥à¤› खाली कर दें)"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Local command"
+msgstr "लोकल कमांड"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Mute"
+msgstr "आवाज बंद"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Next item"
+msgstr "अगला वसà¥à¤¤à¥"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Prev. item"
+msgstr "पिछली वसà¥à¤¤à¥"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "दृषà¥à¤Ÿà¤¿ सीमा चà¥à¤¨à¤¨à¤¾"
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "सà¥à¤•à¥à¤°à¥€à¤¨à¤¶à¥‰à¤Ÿ"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "संभल के चलना"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Special"
+msgstr "सà¥à¤ªà¥‡à¤¶à¤²"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle HUD"
+msgstr "हे. अ. डि"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle chat log"
+msgstr "बातें दिखना"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "तेज चलन"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "उड़ना"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fog"
+msgstr "कोहरा"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle minimap"
+msgstr "छोटा नकà¥à¤¶à¤¾"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr "तरल चाल"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle pitchmove"
+msgstr "पिच चलन"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "की दबाà¤à¤‚"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Change"
+msgstr "बदलें"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "पासवरà¥à¤¡ दोबारा लिखें"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "नया पासवरà¥à¤¡"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "पà¥à¤°à¤¾à¤¨à¤¾ पासवरà¥à¤¡"
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Exit"
+msgstr "निकास"
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Muted"
+msgstr "चà¥à¤ª"
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "आवाज "
+
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
+#: src/gui/modalMenu.cpp
+msgid "Enter "
+msgstr "डालें "
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
+#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
+msgid "LANG_CODE"
+msgstr "hi"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Fixes the position of virtual joystick.\n"
+"If disabled, virtual joystick will center to first-touch's position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Use virtual joystick to trigger \"aux\" button.\n"
+"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"circle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Can be used to move a desired point to (0, 0) to create a\n"
+"suitable spawn point, or to allow 'zooming in' on a desired\n"
+"point by increasing 'scale'.\n"
+"The default is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) scale of fractal in nodes.\n"
+"Actual fractal size will be 2 to 3 times larger.\n"
+"These numbers can be made very large, the fractal does\n"
+"not have to fit inside the world.\n"
+"Increase these to 'zoom' into the detail of the fractal.\n"
+"Default is for a vertically-squashed shape suitable for\n"
+"an island, set all 3 numbers equal for the raw shape."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of ridged mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of step mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that locates the river valleys and channels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise that determines number of dungeons per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D support.\n"
+"Currently supported:\n"
+"- none: no 3d output.\n"
+"- anaglyph: cyan/magenta color 3d.\n"
+"- interlaced: odd/even line based polarisation screen support.\n"
+"- topbottom: split screen top/bottom.\n"
+"- sidebyside: split screen side by side.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer based 3d.\n"
+"Note that the interlaced mode requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ABM interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of queued blocks to emerge"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration of gravity, in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Address to connect to.\n"
+"Leave this blank to start a local server.\n"
+"Note that the address field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Adds particles when digging a node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Alters the light curve by applying 'gamma correction' to it.\n"
+"Higher values make middle and lower light levels brighter.\n"
+"Value '1.0' leaves the light curve unaltered.\n"
+"This only has significant effect on daylight and artificial\n"
+"light, it has very little effect on natural night light."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "हमेशा उड़ान और तेज"
+
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amount of messages a player may send per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce to this serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name to tooltip."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Apple trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"At this distance the server will aggressively optimize which blocks are sent "
+"to\n"
+"clients.\n"
+"Small values potentially improve performance a lot, at the expense of "
+"visible\n"
+"rendering glitches (some blocks will not be rendered under water and in "
+"caves,\n"
+"as well as sometimes on land).\n"
+"Setting this to a value greater than max_block_send_distance disables this\n"
+"optimization.\n"
+"Stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically jump up single-node obstacles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autosave screen size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autoscaling mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome API temperature and humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Block send optimize distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "खिलाडी पर डिबà¥à¤¬à¥‡ डालना"
+
+#: src/settings_translation_file.cpp
+msgid "Builtin"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n"
+"Only works on GLES platforms. Most users will not need to change this.\n"
+"Increasing can reduce artifacting on weaker GPUs.\n"
+"0.1 = Default, 0.25 = Good value for weaker tablets."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "केमरा चिकनाई"
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "सिनेमा मोड में केमरा चिकनाई"
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern taper"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern upper limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Center of light curve boost range.\n"
+"Where 0.0 is minimum light level, 1.0 is maximum light level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message count limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message kick threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message max length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chatcommands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "सिनेमा मोड"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side node lookup range restriction"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of flags to hide in the content repository.\n"
+"\"nonfree\" can be used to hide packages which do not qualify as 'free "
+"software',\n"
+"as defined by the Free Software Foundation.\n"
+"You can also specify content ratings.\n"
+"These flags are independent from Minetest versions,\n"
+"so see a full list at https://content.minetest.net/help/content_flags/"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Flag Blacklist"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Continuous forward movement, toggled by autoforward key.\n"
+"Press the autoforward key again or the backwards movement to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "कंटà¥à¤°à¥‹à¤²à¥à¤¸"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls sinking speed in liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls width of tunnels, a smaller value creates wider tunnels.\n"
+"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
+"intensive noise calculations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Creative"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log file size threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default report format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas where trees have apples."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas with sandy beaches."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines full size of caverns, smaller values create larger caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines large-scale river channel structure."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines location and terrain of optional hills and lakes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the base ground level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the depth of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river valley."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines tree areas and tree density."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Delay between mesh updates on the client in ms. Increasing this will slow\n"
+"down the rate of mesh updates, thus reducing jitter on slower clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay in sending blocks after building"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desert noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Deserts occur when np_biome exceeds this value.\n"
+"When the 'snowbiomes' flag is enabled, this is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Digging particles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "उड़ने के लिठदो बार कूदें"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "दो बार कूदने से उड़ान चलन चालू हो जाता है।"
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug information."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable IPv6 support (for both client and server).\n"
+"Required for IPv6 connections to work at all."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for new created maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod channels support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable register confirmation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable register confirmation when connecting to server.\n"
+"If disabled, new account will be registered automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable vertex buffer objects.\n"
+"This should greatly improve graphics performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable view bobbing and amount of view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server.\n"
+"Ignored if bind_address is set.\n"
+"Needs enable_ipv6 to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
+"Simulates the tone curve of photographic film and how this approximates the\n"
+"appearance of high dynamic range images. Mid-range contrast is slightly\n"
+"enhanced, highlights and shadows are gradually compressed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables bumpmapping for textures. Normalmaps need to be supplied by the "
+"texture pack\n"
+"or need to be auto-generated.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables the sound system.\n"
+"If disabled, this completely disables all sounds everywhere and the in-game\n"
+"sound controls will be non-functional.\n"
+"Changing this setting requires a restart."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Factor noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "तेज चलन"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via the \"special\" key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"सà¥à¤ªà¥‡à¤¶à¤² की दबाने पर आप बहà¥à¤¤ तॆज चलने लगेंगे |\n"
+"इसके लिये \"तेज\" विषेशाधिकार आवशà¥à¤¯à¤• है |"
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the\n"
+"Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed virtual joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "उडना"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog start"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font bold by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font italic by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the default font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the fallback font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the monospace font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fractal type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fraction of the visible distance at which fog starts to be rendered"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FreeType fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes).\n"
+"\n"
+"Setting this larger than active_block_range will also cause the server\n"
+"to maintain active objects up to this distance in the direction the\n"
+"player is looking. (This can avoid mobs suddenly disappearing from view)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Global callbacks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at maximum light level.\n"
+"Controls the contrast of the highest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scale factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated Lua API calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Have the profiler instrument itself:\n"
+"* Instrument an empty function.\n"
+"This estimates the overhead, that instrumentation is adding (+1 function "
+"call).\n"
+"* Instrument the sampler being used to update the statistics."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height select noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness3 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness4 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar next key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar previous key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 10 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 11 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 14 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 15 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 16 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 17 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 18 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 19 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 2 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 20 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 21 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 23 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 24 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 25 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 26 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 27 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 28 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 29 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 3 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 30 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 31 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 32 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 4 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 5 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 6 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 7 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 8 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 9 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How fast liquid waves will move. Higher = faster.\n"
+"If negative, liquid waves will move backwards.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
+"are\n"
+"enabled."
+msgstr ""
+"अगर यह रà¥à¤•ा हà¥à¤† हà¥à¤† तो तेज उड़ने के लिà¤\n"
+"सà¥à¤ªà¥‡à¤¶à¤² की दबानी पड़ेगी |"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled the server will perform map block occlusion culling based on\n"
+"on the eye position of the player. This can reduce the number of blocks\n"
+"sent to the client 50-80%. The client will not longer receive most "
+"invisible\n"
+"so that the utility of noclip mode is reduced."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled together with fly mode, player is able to fly through solid "
+"nodes.\n"
+"This requires the \"noclip\" privilege on the server."
+msgstr ""
+"अगर यह उडान के साथ चालू होगा तो आप हर चीज़ के आर-पार उड पाà¤à¤‚गे |\n"
+"इसके लिये \"तरल चाल\" विषेशाधिकार आवशà¥à¤¯à¤• है |"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
+"down and\n"
+"descending."
+msgstr ""
+"अगर यहां चालू हà¥à¤† तो नीचे उतरने के लिठसà¥à¤ªà¥‡à¤¶à¤²\n"
+"की का इसà¥à¤¤à¥‡à¤®à¤¾à¤² होगा।"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, invalid world data won't cause the server to shut down.\n"
+"Only enable this if you know what you are doing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, makes move directions relative to the player's pitch when flying "
+"or swimming."
+msgstr "चालू होने पर आप जहां देखेंगे उस दिशा को सामने माना जाà¤à¤—ा (पिच चलन)|"
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+"अगर यह चालू होगा तो आप जिस सà¥à¤¥à¤¾à¤¨ मैं खडें हैं वही पर डिबà¥à¤¬à¥‡ डाल सकेंगे |\n"
+"यह छोटी जगहों में काम करते वख़à¥à¤¤ काम आ सकता है |"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the CSM restriction for node range is enabled, get_node calls are "
+"limited\n"
+"to this distance from the player to the node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the file size of debug.txt exceeds the number of megabytes specified in\n"
+"this setting when it is opened, the file is moved to debug.txt.1,\n"
+"deleting an older debug.txt.1 if it exists.\n"
+"debug.txt is only moved if this setting is positive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inc. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Initial vertical speed when jumping, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument chatcommands on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Active Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrumentation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr "माउस उलà¥à¤Ÿà¤¾"
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr "माउस ऊपर करने पर केमरा नीचे जाà¤à¤—ा, और नीचे करने पर ऊपर |"
+
+#: src/settings_translation_file.cpp
+msgid "Italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Increasing this increases the amount of fine detail, but also\n"
+"increases processing load.\n"
+"At iterations = 20 this mapgen has a similar load to mapgen V7."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick ID"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick button repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick frustum sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"W component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"X component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Y component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Z component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"Will also disable autoforward, when active.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for muting the game.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type local commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 19th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 20th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 23rd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 24th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 25th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 26th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 27th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 28th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 29th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 30th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 31st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 32nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the eighth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fourth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the next item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the previous item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the second hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the seventh hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the sixth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the third hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling autoforward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camera update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the large chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key to use view zoom when possible.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave proportion flooded"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large chat console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over\n"
+"network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Level of logging to be written to debug.txt:\n"
+"- <nothing> (no logging)\n"
+"- none (messages with no level)\n"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost center"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost spread"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve high gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve low gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
+"Only mapchunks completely within the mapgen limit are generated.\n"
+"Value is stored per-world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sinking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Load the game profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Load the game profiler to collect game profiling data.\n"
+"Provides a /profiler command to access the compiled profile.\n"
+"Useful for mod developers and server operators."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Loading Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes all liquids opaque"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen Carpathian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Flat.\n"
+"Occasional lakes and hills can be added to the flat world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Fractal.\n"
+"'terrain' enables the generation of non-fractal terrain:\n"
+"ocean, islands and underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill': Reduces heat with altitude.\n"
+"'humid_rivers': Increases humidity around rivers.\n"
+"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n"
+"to become shallower and occasionally dry.\n"
+"'altitude_dry': Reduces humidity with altitude."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen v5."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"The 'snowbiomes' flag enables the new 5 biome system.\n"
+"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
+"the 'jungles' flag is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generation delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks that are simultaneously sent per client.\n"
+"The maximum total count is calculated dynamically:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can be connected simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of recent chat messages to show"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneous block sends per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum size of the out chat queue"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum size of the out chat queue.\n"
+"0 to disable queueing and -1 to make the queue size unlimited."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod channels"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the hudbar elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain variation noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain zero level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr "माउस संवेदनशीलता"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr "माउस संवेदनशीलता गà¥à¤£à¤•।"
+
+#: src/settings_translation_file.cpp
+msgid "Mud noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this.\n"
+"Current mapgens in a highly unstable state:\n"
+"- The optional floatlands of v7 (disabled by default)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Near plane"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr "तरल चाल"
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps sampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use.\n"
+"Value 0:\n"
+"- Automatic selection. The number of emerge threads will be\n"
+"- 'number of processors - 2', with a lower limit of 1.\n"
+"Any other value:\n"
+"- Specifies the number of emerge threads, with a lower limit of 1.\n"
+"WARNING: Increasing the number of emerge threads increases engine mapgen\n"
+"speed, but this may harm game performance by interfering with other\n"
+"processes, especially in singleplayer and/or when running Lua code in\n"
+"'on_generated'. For many users the optimum setting may be '1'."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Online Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Opaque liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Open the pause menu when the window's focus is lost. Does not pause if a "
+"formspec is\n"
+"open."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path of the fallback font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font will be used for certain languages or if the default font is "
+"unavailable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to shader directory. If no path is defined, default location will be "
+"used."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the default font.\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"
+"The fallback font will be used if the font cannot be loaded."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the monospace font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font is used for e.g. the console and profiler screen."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pause on lost window focus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move mode"
+msgstr "पिच चलन"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+"खिलाडी के असर से मà¥à¤•à¥à¤¤ उड सकेगा |\n"
+"इसके लिये \"उडान\" विषेशाधिकार आवशà¥à¤¯à¤• है |"
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Port to connect to (UDP).\n"
+"Note that the port field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prevent digging and placing from repeating when holding the mouse buttons.\n"
+"Enable this when you dig or place too often by accident."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Print the engine's profiling data in regular intervals (in seconds).\n"
+"0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Recent Chat Messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Regular font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Remove color codes from incoming chat messages\n"
+"Use this to stop players from being able to use color in their messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Report path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Restricts the access of certain client-side functions on servers.\n"
+"Combine the byteflags below to restrict client-side features, or set to 0\n"
+"for no restrictions:\n"
+"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n"
+"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n"
+"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n"
+"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n"
+"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge underwater noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridged mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr "राइट कà¥à¤²à¤¿à¤• के दोहराने का समय"
+
+#: src/settings_translation_file.cpp
+msgid "River channel depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River valley width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hill size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hills spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Safe digging and placing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sandy beaches occur when np_beach exceeds this value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save window size automatically when modified."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale GUI by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Screenshot quality. Only used for JPEG format.\n"
+"1 means worst quality; 100 means best quality.\n"
+"Use 0 for default quality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Seabed noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Selects one of 18 fractal types.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server side occlusion culling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Set the maximum character length of a chat message sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shader path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visual effects and may increase performance on some "
+"video\n"
+"cards.\n"
+"This only works with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
+"be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n"
+"WARNING!: There is no benefit, and there are several dangers, in\n"
+"increasing this value above 5.\n"
+"Reducing this value increases cave and dungeon density.\n"
+"Altering this value is for special usage, leaving it unchanged is\n"
+"recommended."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of the MapBlock cache of the mesh generator. Increasing this will\n"
+"increase the cache hit %, reducing the data being copied from the main\n"
+"thread, thus reducing jitter."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale humidity variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale temperature variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when looking around. Also called look or mouse smoothing.\n"
+"Useful for recording videos."
+msgstr ""
+"आपका माउस चिकने तरीके से हिलेगा | इसे माउस या दृषà¥à¤Ÿà¤¿ चिकनाई भी कहा जाता है |\n"
+"विडियो बनाते वख़à¥à¤¤ काम आ सकता है |"
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr "सिनेमा मोड में केमरा चिकने तरीके से मà¥à¤¡à¥‡à¤—ा | मना करने के लिये 0."
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr "केमरा के मà¥à¤¡à¤¨à¥‡ की चिकनाई. मना करने के लिये 0."
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Special key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Special key for climbing/descending"
+msgstr "चलने उतरने के लिठसà¥à¤ªà¥‡à¤¶à¤² की"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread of light curve boost range.\n"
+"Controls the width of the range to be boosted.\n"
+"Standard deviation of the light curve boost Gaussian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Steepness noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Strength of light curve boost.\n"
+"The 3 'boost' parameters define a range of the light\n"
+"curve that is boosted in brightness."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strip color codes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Temperature variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain alternative noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain base noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain higher noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for hills.\n"
+"Controls proportion of world area covered by hills.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for lakes.\n"
+"Controls proportion of world area covered by lakes.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain persistence noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Textures on a node may be aligned either to the node or to the world.\n"
+"The former mode suits better things like machines, furniture, etc., while\n"
+"the latter makes stairs and microblocks fit surroundings better.\n"
+"However, as this possibility is new, thus may not be used by older servers,\n"
+"this option allows enforcing it for certain node types. Note though that\n"
+"that is considered EXPERIMENTAL and may not work properly."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The URL for the content repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other biome filler node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The file path relative to your worldpath in which profiles will be saved to."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The identifier of the joystick to use"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The length in pixels it takes for touch screen interaction to start."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The maximum height of the surface of waving liquids.\n"
+"4.0 = Wave height is two nodes.\n"
+"0.0 = Wave doesn't move at all.\n"
+"Default is 1.0 (1/2 node).\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The radius of the volume of blocks around every player that is subject to "
+"the\n"
+"active block stuff, stated in mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run.\n"
+"This is also the minimum range in which active objects (mobs) are "
+"maintained.\n"
+"This should be configured together with active_object_send_range_blocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The rendering back-end for Irrlicht.\n"
+"A restart is required after changing this.\n"
+"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
+"otherwise.\n"
+"On other platforms, OpenGL is recommended, and it’s the only driver with\n"
+"shader support currently."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The sensitivity of the joystick axes for moving the\n"
+"ingame view frustum around."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated events\n"
+"when holding down a joystick button combination."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right\n"
+"mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The type of joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
+"enabled. Also the vertical distance over which humidity drops by 10 if\n"
+"'altitude_dry' is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Third of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time of day when a new world is started, in millihours (0-23999)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Touch screen threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Usable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Undersampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Undersampling is similar to using a lower screen resolution, but it applies\n"
+"to the game world only, keeping the GUI intact.\n"
+"It should give a significant performance boost at the cost of less detailed "
+"image.\n"
+"Higher values result in a less detailed image."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Use 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 ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VSync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley profile"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley slope"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of biome filler depth."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of maximum mountain height (in nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of number of caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies depth of biome surface nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical climbing speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View distance in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View zoom key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Virtual joystick triggers aux button"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W coordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking and flying speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wavelength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"properly support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled.\n"
+"This is also used as the base node texture size for world-aligned\n"
+"texture autoscaling."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether FreeType fonts are used, requires FreeType support to be compiled "
+"in.\n"
+"If disabled, bitmap and XML vectors fonts are used instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to mute sounds. You can unmute sounds at any time, unless the\n"
+"sound system is disabled (enable_sound=false).\n"
+"In-game, you can toggle the mute state with the mute key or by using the\n"
+"pause menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selection box lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Windows systems only: Start Minetest with the command line window in the "
+"background.\n"
+"Contains the same information as the file debug.txt (default name)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World start time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World-aligned textures may be scaled to span several nodes. However,\n"
+"the server may not send the scale you want, especially if you use\n"
+"a specially-designed texture pack; with this option, the client tries\n"
+"to determine the scale automatically basing on the texture size.\n"
+"See also texture_min_size.\n"
+"Warning: This option is EXPERIMENTAL!"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World-aligned textures mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-distance over which caverns expand to full size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of cavern upper limit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of higher terrain that creates cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of lower terrain and seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#~ msgid "Back"
+#~ msgstr "पीछे"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "$1 का डाऊनलोड व इनà¥à¤¸à¥à¤Ÿà¤¾à¤² चल रहा है, कृपया ठहरें ..."
+
+#~ msgid "Ok"
+#~ msgstr "ठीक है"
diff --git a/po/hu/minetest.po b/po/hu/minetest.po
index 799508255..725c12629 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-12-16 22:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-22 17:56+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 3.10-dev\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,10 +22,13 @@ msgstr "Újraéledés"
msgid "You died"
msgstr "Meghaltál"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "Hiba történt egy Lua parancsfájlban (egy mod-ban):"
+msgstr "Hiba történt egy Lua parancsfájlban:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -36,10 +39,6 @@ msgid "Main menu"
msgstr "Főmenü"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "OK"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Újrakapcsolódás"
@@ -57,7 +56,7 @@ msgstr "Protokollverzió-eltérés. "
#: builtin/mainmenu/common.lua
msgid "Server enforces protocol version $1. "
-msgstr "A kiszolgáló által megkövetelt protokollverzió: $1. "
+msgstr "A szerver által megkövetelt protokollverzió: $1. "
#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
@@ -71,11 +70,11 @@ msgstr ""
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
-msgstr "Csak $1 protokollverziót támogatunk."
+msgstr "Csak $1 protokollverziót támogjuk."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
-msgstr "$1 és $2 közötti protokollverziókat támogatunk."
+msgstr "$1 és $2 közötti protokollverziókat támogatjuk."
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_delete_content.lua
@@ -96,9 +95,8 @@ msgid "Disable all"
msgstr "Összes letiltása"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "Disable modpack"
-msgstr "Modok letiltása"
+msgstr "Modcsomag letiltása"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -106,42 +104,43 @@ msgstr "Összes engedélyezése"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Modok engedélyezése"
+msgstr "Modcsomag engedélyezése"
#: 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 ""
-"A(z) „$1†mod engedélyezése sikertelen, mert meg nem engedett karaktereket "
+"A(z) „$1†mod engedélyezése sikertelen, mert nem engedélyezett karaktereket "
"tartalmaz. Csak az [a-z0-9_] karakterek engedélyezettek."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "További modok keresése"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No (optional) dependencies"
-msgstr "Választható függőségek:"
+msgstr "Nincsenek (választható) függőségek:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr "Nincs elérhető mód leírás."
+msgstr "Nincs elérhető játékleírás."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
msgstr "Nincsenek függőségek."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "Nincs elérhető mód leírás."
+msgstr "Nincs elérhető modcsomag-leírás."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No optional dependencies"
-msgstr "Választható függőségek:"
+msgstr "Nincsenek választható függőségek. "
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
@@ -165,20 +164,20 @@ msgid "All packages"
msgstr "Minden csomag"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Vissza"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Vissza a főmenübe"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "$1 letöltése és telepítése, kérlek várj…"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "Letöltés…"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr "$1 telepítése nem sikerült"
+msgstr "$1 letöltése nem sikerült"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -200,7 +199,7 @@ msgstr "A csomagok nem nyerhetők vissza"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
-msgstr "Nincs eredmény"
+msgstr "Nincs találat"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
@@ -213,49 +212,207 @@ msgstr "Textúracsomagok"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
-msgstr "Törlés"
+msgstr "Eltávolítás"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
msgstr "Frissítés"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Megtekintés"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Már létezik egy „$1†nevű világ"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "További terep"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Altitude chill"
+msgstr "Hőmérsékletcsökkenés a magassággal"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "Páratartalomcsökkenés a magassággal"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Biom keverés"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Biomok"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Üregek"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "Barlangok"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Létrehozás"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "Dekorációk"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Aljáték (mint a minetest_game) letöltése a minetest.net címről"
+msgstr "Játék (mint a minetest_game) letöltése a minetest.net címről"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr "Letöltés a minetest.net címről"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Tömlöc zaj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Lebegő földdarabok az égben"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "Lebegő földek"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Játék"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Dombok"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Párás folyók"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Megnöveli a páratartalmat a folyók körül"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Tavak"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+"Az alacsony páratartalom és a magas hőmérséklet sekélyesíti vagy ki is "
+"száríthatja a folyókat"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
-msgstr "Térkép-előállítás"
+msgstr "Térkép generálás"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Térképgenerátor zászlók"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Térképgenerátor különleges zászlói"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "Hegyek"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "Iszap áramlás"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Alagutak és barlangok hálózata"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Nincs játékmód kiválasztva"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "A magassággal csökken a hőmérséklet"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "A magassággal csökken a páratartalom"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Folyók"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Tengerszinti folyók"
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
-msgstr "Seed"
+msgstr "Kezdőérték"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr "Sima átmenet a biomok között"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Structures appearing on the terrain, typically trees and plants"
msgstr ""
-"Figyelmeztetés: a minimális fejlesztői teszt fejlesztőknek számára készült."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Mérsékelt, Sivatag"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Mérsékelt, Sivatag, Dzsungel"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "Mérsékelt, Sivatag, Dzsungel, Tundra, Tajga"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "Terep alapzaj"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "Fák és dzsungelfű"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Változatos folyómélység"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "Nagyon nagy üregek mélyen a föld alatt"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr "Figyelmeztetés: a fejlesztői teszt fejlesztők számára készült."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -263,7 +420,7 @@ msgstr "Világ neve"
#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no games installed."
-msgstr "Nincsenek aljátékok telepítve."
+msgstr "Nincsenek játékok telepítve."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
@@ -277,11 +434,11 @@ msgstr "Törlés"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "pkgmr: a(z) „$1†törlése meghiúsult"
+msgstr "pkgmr: a(z) „$1†törlése sikertelen"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr "pkgmgr: érvénytelen módútvonal: „$1â€"
+msgstr "pkgmgr: érvénytelen útvonal: „$1â€"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
@@ -293,14 +450,14 @@ msgstr "Elfogadás"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Modpakk átnevezése:"
+msgstr "Modcsomag átnevezése:"
#: 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 ""
-"Ennek a modpack-nek a neve a a modpack.conf fájlban meghatározott, ami "
+"Ennek a modcsomagnak a neve a modpack.conf fájlban meghatározott, ami "
"felülír minden itteni átnevezést."
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -309,11 +466,11 @@ msgstr "(Nincs megadva leírás a beállításhoz)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr "2D Barlang zaj"
+msgstr "2D zaj"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr "< Vissza a Beállítások oldalra"
+msgstr "< Vissza a Beállításokra"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
@@ -341,7 +498,7 @@ msgstr "Oktávok"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr "offszet"
+msgstr "Eltolás"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Persistance"
@@ -365,7 +522,7 @@ msgstr "Mérték"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
-msgstr "Útvonal választása"
+msgstr "Útvonal kiválasztása"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
@@ -388,37 +545,44 @@ msgid "X"
msgstr "X"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "X spread"
-msgstr "x méret"
+msgstr "X kiterjedés"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
msgstr "Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Y spread"
-msgstr "y méret"
+msgstr "Y kiterjedés"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
msgstr "Z"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Z spread"
-msgstr "Z méret"
+msgstr "Z kiterjedés"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "absvalue"
msgstr "abszolút érték"
+#. ~ "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 "Alapértelmezettek"
+msgstr "alapértelmezett"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "könyített"
@@ -437,12 +601,12 @@ msgstr "$1 telepítése meghiúsult ide: $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "Mód telepítése: nem található valódi mód név ehhez: $1"
+msgstr "Mod telepítése: nem található valódi mod név ehhez: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
-"Mód telepítése: nem található megfelelő mappanév ehhez a módcsomaghoz: $1"
+"Mod telepítése: nem található megfelelő mappanév ehhez a modcsomaghoz: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: Unsupported file type \"$1\" or broken archive"
@@ -450,47 +614,47 @@ msgstr "Telepítés: nem támogatott „$1†fájltípus, vagy sérült archív
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: file: \"$1\""
-msgstr "Telepítés: fájl: „$1â€"
+msgstr "Fájl telepítése: \"$1\""
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr "nem valós mod, mod csomag"
+msgstr "Nem található érvényes mod vagy modcsomag"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr "$1 telepítése meghiúsult mint textúra csomag"
+msgstr "$1 textúracsomag telepítése meghiúsult"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
-msgstr "$1 játék telepítése meghiúsult"
+msgstr "$1 aljáték telepítése meghiúsult"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr "$1 MOD telepítése meghiúsult"
+msgstr "$1 mod telepítése meghiúsult"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr "$1 mod csomag telepítése meghiúsult"
+msgstr "$1 modcsomag telepítése meghiúsult"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr "online tartalmak böngészése"
+msgstr "Online tartalmak böngészése"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr "tartalom"
+msgstr "Tartalom"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr "Textúrapakk kikapcsolása"
+msgstr "Textúracsomag kikapcsolása"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr "információk:"
+msgstr "információ:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr "Telepített csomagok :"
+msgstr "Telepített csomagok:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
@@ -498,7 +662,7 @@ msgstr "Nincsenek függőségek."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr "Nincs elérhető csomag leírás"
+msgstr "Nincs elérhető csomagleírás"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
@@ -510,7 +674,7 @@ msgstr "Csomag eltávolítása"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-msgstr "Textúra pakk használata"
+msgstr "Textúracsomag használata"
#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
@@ -534,11 +698,11 @@ msgstr "Korábbi belső fejlesztők"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr "Kiszolgáló nyilvánossá tétele"
+msgstr "Szerver nyilvánossá tétele"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr "Csatolási cím"
+msgstr "Cím csatolása"
#: builtin/mainmenu/tab_local.lua
msgid "Configure"
@@ -558,7 +722,11 @@ msgstr "Játék létrehozása"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr "Kiszolgáló felállítása"
+msgstr "Szerver felállítása"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "Játékok telepítése ContentDB-ről"
#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
@@ -586,7 +754,7 @@ msgstr "Világ kiválasztása:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr "Kiszolgáló port"
+msgstr "Szerver port"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
@@ -618,7 +786,7 @@ msgstr "Kedvenc"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
-msgstr "Belépés"
+msgstr "Csatlakozás játékhoz"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Name / Password"
@@ -628,6 +796,7 @@ msgstr "Név / Jelszó"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP engedélyezve"
@@ -694,7 +863,7 @@ msgstr "Mipmap effekt"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr "Mipmap + Anizotropikus szűrés"
+msgstr "Mipmap + Anizotróp szűrés"
#: builtin/mainmenu/tab_settings.lua
msgid "No"
@@ -710,11 +879,11 @@ msgstr "Nincs Mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr "Blokk kiemelés"
+msgstr "Node kiemelés"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr "Node körvonalazás"
+msgstr "Node körvonal"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
@@ -730,7 +899,7 @@ msgstr "Ãtlátszatlan víz"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Parallax Occlusion"
-msgstr "Parallax Occlusion ( dombor textúra )"
+msgstr "Parallax Occlusion ( domború textúra )"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
@@ -750,11 +919,11 @@ msgstr "Beállítások"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr "Shaderek"
+msgstr "Ãrnyalók"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr "Shéderek ( nem elérhetö)"
+msgstr "Ãrnyalók (nem elérhetÅ‘)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -770,7 +939,7 @@ msgstr "Textúrázás:"
#: builtin/mainmenu/tab_settings.lua
msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "A shaderek engedélyezéséhez OpenGL driver használata szükséges."
+msgstr "Az árnyalók engedélyezéséhez OpenGL driver használata szükséges."
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
@@ -789,7 +958,6 @@ msgid "Waving Leaves"
msgstr "Hullámzó levelek"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Liquids"
msgstr "Hullámzó folyadékok"
@@ -823,11 +991,11 @@ msgstr "Kész!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr "Csomópontok előkészítése"
+msgstr "Node-ok előkészítése"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr "Csomópontok előkészítése…"
+msgstr "Node-ok előkészítése…"
#: src/client/client.cpp
msgid "Loading textures..."
@@ -835,7 +1003,7 @@ msgstr "Textúrák betöltése…"
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr "Shaderek újraépítése…"
+msgstr "Ãrnyalók újraépítése…"
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
@@ -843,11 +1011,11 @@ msgstr "Kapcsolódási hiba (időtúllépés?)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
-msgstr "Nem található vagy nem betölthető a(z) \" játék"
+msgstr "Nem található vagy nem betölthető a játék"
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr "Érvénytelen játékmeghatározás"
+msgstr "Érvénytelen játékmeghatározás."
#: src/client/clientlauncher.cpp
msgid "Main Menu"
@@ -867,15 +1035,23 @@ msgstr "Válassz egy nevet!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr "jelszó file megnyitás hiba "
+msgstr "jelszófájl megnyitás hiba: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr "A megadott útvonalon nem létezik világ: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr "yes"
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -909,6 +1085,7 @@ msgstr "- Port: "
msgid "- Public: "
msgstr "- Nyilvános: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -919,40 +1096,39 @@ msgstr "- Kiszolgáló neve: "
#: src/client/game.cpp
msgid "Automatic forward disabled"
-msgstr "automata elöre kikapcsolva"
+msgstr "Automatikus előre kikapcsolva"
#: src/client/game.cpp
-#, fuzzy
msgid "Automatic forward enabled"
-msgstr "automata elöre engedélyezve"
+msgstr "Automatikus előre engedélyezve"
#: src/client/game.cpp
msgid "Camera update disabled"
-msgstr "kamera frissités KI"
+msgstr "Kamera frissítés letiltva"
#: src/client/game.cpp
msgid "Camera update enabled"
-msgstr "Kamera frissítés BE"
+msgstr "Kamera frissítés engedélyezve"
#: src/client/game.cpp
msgid "Change Password"
-msgstr "Jelszó változtatás"
+msgstr "Jelszó változtatása"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
-msgstr "Film mód KI"
+msgstr "Filmszerű mód letiltva"
#: src/client/game.cpp
msgid "Cinematic mode enabled"
-msgstr "Film mód BE"
+msgstr "Filmszerű mód engedélyezve"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
-msgstr "kliens oldali szkriptek KI"
+msgstr "Kliens oldali szkriptek letiltva"
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr "Kapcsolódás kiszolgálóhoz…"
+msgstr "Kapcsolódás szerverhez..."
#: src/client/game.cpp
msgid "Continue"
@@ -1001,15 +1177,15 @@ msgstr "Kiszolgáló létrehozása…"
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr "debug infó sor, és graph KI"
+msgstr "Hibakereső információ és pofiler elrejtése"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr "Hibakereső infó BE"
+msgstr "Hibakereső információ engedélyezve"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr "debug infók, profiler grafika, hálós rajz KI"
+msgstr "Hibakereső információk, profilgrafika, hálós rajz rejtett"
#: src/client/game.cpp
msgid ""
@@ -1041,15 +1217,15 @@ msgstr ""
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr "korlátlan látótáv KI"
+msgstr "Korlátlan látótáv letiltása"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr "korlátlan látótáv BE"
+msgstr "Korlátlan látótáv engedélyezése"
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr "Kilépés a fömenübe"
+msgstr "Kilépés a főmenübe"
#: src/client/game.cpp
msgid "Exit to OS"
@@ -1057,35 +1233,35 @@ msgstr "Kilépés a játékból"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr "gyors mód KI"
+msgstr "Gyors mód letiltva"
#: src/client/game.cpp
msgid "Fast mode enabled"
-msgstr "gyors mód BE"
+msgstr "Gyors mód engedélyezve"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr "gyors haladási mód BE ( de nincs engedélyed )"
+msgstr "Gyors mód engedélyezve (de nincs jogosultságod)"
#: src/client/game.cpp
msgid "Fly mode disabled"
-msgstr "szabadon repülés KI"
+msgstr "Repülés letiltva"
#: src/client/game.cpp
msgid "Fly mode enabled"
-msgstr "szabadon repülés BE"
+msgstr "Repülés engedélyezve"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr "szabad repülés mód BE ( de nincs engedélyed )"
+msgstr "Repülés engedélyezve (de nincs jogosultságod)"
#: src/client/game.cpp
msgid "Fog disabled"
-msgstr "köd KI"
+msgstr "Köd letiltva"
#: src/client/game.cpp
msgid "Fog enabled"
-msgstr "köd BE"
+msgstr "köd engedélyezve"
#: src/client/game.cpp
msgid "Game info:"
@@ -1097,71 +1273,71 @@ msgstr "Játék szüneteltetve"
#: src/client/game.cpp
msgid "Hosting server"
-msgstr "Kiszolgáló felállítása"
+msgstr "Szerver felállítása"
#: src/client/game.cpp
msgid "Item definitions..."
-msgstr "Tárgy meghatározok…"
+msgstr "Tárgyak meghatározása…"
#: src/client/game.cpp
msgid "KiB/s"
-msgstr "KiB/mp"
+msgstr "KiB/s"
#: src/client/game.cpp
msgid "Media..."
-msgstr "Média…"
+msgstr "Tartalom..."
#: src/client/game.cpp
msgid "MiB/s"
-msgstr "MiB/mp"
+msgstr "MiB/s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr "a kis térkép KI ( szerver , vagy MOD álltal )"
+msgstr "A kistérkép letiltva (szerver, vagy mod által)"
#: src/client/game.cpp
msgid "Minimap hidden"
-msgstr "Minitérkép KI"
+msgstr "Kistérkép letiltva"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x1"
-msgstr "kistérkép RADAR módban x1"
+msgstr "Kistérkép radar módban x1"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x2"
-msgstr "kistérkép RADAR módban x2"
+msgstr "Kistérkép radar módban x2"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x4"
-msgstr "kistérkép RADAR módban x4"
+msgstr "Kistérkép radar módban x4"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x1"
-msgstr "kistérkép terület módban x1"
+msgstr "Kistérkép terület módban x1"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x2"
-msgstr "kistérkép terület módban x2"
+msgstr "Kistérkép terület módban x2"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x4"
-msgstr "kistérkép terület módban x4"
+msgstr "Kistérkép terület módban x4"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr "NOCLIP mód KI"
+msgstr "Noclip mód letiltva"
#: src/client/game.cpp
msgid "Noclip mode enabled"
-msgstr "noclip BE"
+msgstr "Noclip mód engedélyezve"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr "NOCLIP mód BE ( de nincs engedélyed )"
+msgstr "Noclip mód engedélyezve (de nincs jogosultságod)"
#: src/client/game.cpp
msgid "Node definitions..."
-msgstr "Csomópont meghatározások…"
+msgstr "Node-ok meghatározása…"
#: src/client/game.cpp
msgid "Off"
@@ -1172,18 +1348,16 @@ msgid "On"
msgstr "Be"
#: src/client/game.cpp
-#, fuzzy
msgid "Pitch move mode disabled"
-msgstr "Pályamozgás mód kikapcsolva"
+msgstr "Pályamozgás mód letiltva"
#: src/client/game.cpp
-#, fuzzy
msgid "Pitch move mode enabled"
-msgstr "Pályamozgás mód bekapcsolva"
+msgstr "Pályamozgás mód engedélyezve"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr "prifiler grafika BE"
+msgstr "Profilergrafika megjelenítése"
#: src/client/game.cpp
msgid "Remote server"
@@ -1207,11 +1381,19 @@ msgstr "Hangerő"
#: src/client/game.cpp
msgid "Sound muted"
-msgstr "hang KI"
+msgstr "Hang némítva"
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "A hangrendszer letiltva"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "A hangrendszer nem támogatott ebben build-ben"
#: src/client/game.cpp
msgid "Sound unmuted"
-msgstr "hang BE"
+msgstr "Hang visszahangosítva"
#: src/client/game.cpp
#, c-format
@@ -1235,40 +1417,40 @@ msgstr "Hangerő átállítva: %d%%"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr "hálós rajzolás BE"
+msgstr "Drótváz megjelenítése"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr "ZOOM KI ( szerver, vagy MOD álltal )"
+msgstr "Nagyítás letiltva (szerver, vagy mod által)"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
-msgstr "Ok"
+msgstr "ok"
#: src/client/gameui.cpp
msgid "Chat hidden"
-msgstr "Csevegés KI"
+msgstr "Csevegés elrejtve"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr "beszélgetös rész BE"
+msgstr "Csevegés megjelenítése"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr "HUD KI"
+msgstr "HUD elrejtése"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr "HUD BE"
+msgstr "HUD megjelenítése"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr "profiler KI"
+msgstr "Profiler elrejtése"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr "Profiler BE (lap: %d1 ennyiböl : %d2)"
+msgstr "Profiler megjelenítése (lap: %d1 ennyiből : %d2)"
#: src/client/keycode.cpp
msgid "Apps"
@@ -1276,7 +1458,7 @@ msgstr "Alkalmazások"
#: src/client/keycode.cpp
msgid "Backspace"
-msgstr "bacspace gomb"
+msgstr "Backspace"
#: src/client/keycode.cpp
msgid "Caps Lock"
@@ -1296,7 +1478,7 @@ msgstr "Le"
#: src/client/keycode.cpp
msgid "End"
-msgstr "Vége"
+msgstr "End"
#: src/client/keycode.cpp
msgid "Erase EOF"
@@ -1312,7 +1494,7 @@ msgstr "Segítség"
#: src/client/keycode.cpp
msgid "Home"
-msgstr "Otthon"
+msgstr "Home"
#: src/client/keycode.cpp
msgid "IME Accept"
@@ -1324,7 +1506,7 @@ msgstr "IME átalakítás"
#: src/client/keycode.cpp
msgid "IME Escape"
-msgstr "IME Escape"
+msgstr "IME Kilépés"
#: src/client/keycode.cpp
msgid "IME Mode Change"
@@ -1332,7 +1514,7 @@ msgstr "IME Mód váltás"
#: src/client/keycode.cpp
msgid "IME Nonconvert"
-msgstr "IME Nem konvertál"
+msgstr "IME Nem átalakított"
#: src/client/keycode.cpp
msgid "Insert"
@@ -1340,7 +1522,7 @@ msgstr "Beszúrás"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Left"
-msgstr "Bal"
+msgstr "Balra"
#: src/client/keycode.cpp
msgid "Left Button"
@@ -1362,6 +1544,7 @@ msgstr "Bal Shift"
msgid "Left Windows"
msgstr "Bal Windows"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menü"
@@ -1376,63 +1559,63 @@ msgstr "Num Lock"
#: src/client/keycode.cpp
msgid "Numpad *"
-msgstr "Numerikus bill. *"
+msgstr "Numpad *"
#: src/client/keycode.cpp
msgid "Numpad +"
-msgstr "Numerikus bill. +"
+msgstr "Numpad +"
#: src/client/keycode.cpp
msgid "Numpad -"
-msgstr "Numerikus bill. -"
+msgstr "Numpad -"
#: src/client/keycode.cpp
msgid "Numpad ."
-msgstr "Numerikus bill. ,"
+msgstr "Numpad ."
#: src/client/keycode.cpp
msgid "Numpad /"
-msgstr "Numerikus bill. /"
+msgstr "Numpad /"
#: src/client/keycode.cpp
msgid "Numpad 0"
-msgstr "Numerikus bill. 0"
+msgstr "Numpad 0"
#: src/client/keycode.cpp
msgid "Numpad 1"
-msgstr "Numerikus bill. 1"
+msgstr "Numpad 1"
#: src/client/keycode.cpp
msgid "Numpad 2"
-msgstr "Numerikus bill. 2"
+msgstr "Numpad 2"
#: src/client/keycode.cpp
msgid "Numpad 3"
-msgstr "Numerikus bill. 3"
+msgstr "Numpad 3"
#: src/client/keycode.cpp
msgid "Numpad 4"
-msgstr "Numerikus bill. 4"
+msgstr "Numpad 5"
#: src/client/keycode.cpp
msgid "Numpad 5"
-msgstr "Numerikus bill. 5"
+msgstr "Numpad 5"
#: src/client/keycode.cpp
msgid "Numpad 6"
-msgstr "Numerikus bill. 6"
+msgstr "Numpad 6"
#: src/client/keycode.cpp
msgid "Numpad 7"
-msgstr "Numerikus bill. 7"
+msgstr "Numpad 7"
#: src/client/keycode.cpp
msgid "Numpad 8"
-msgstr "Numerikus bill. 8"
+msgstr "Numpad 8"
#: src/client/keycode.cpp
msgid "Numpad 9"
-msgstr "Numerikus bill. 9"
+msgstr "Numpad 9"
#: src/client/keycode.cpp
msgid "OEM Clear"
@@ -1440,11 +1623,11 @@ msgstr "OEM Clear"
#: src/client/keycode.cpp
msgid "Page down"
-msgstr "page down"
+msgstr "Page Down"
#: src/client/keycode.cpp
msgid "Page up"
-msgstr "page up"
+msgstr "Page Up"
#: src/client/keycode.cpp
msgid "Pause"
@@ -1454,9 +1637,10 @@ msgstr "Szünet"
msgid "Play"
msgstr "Játék"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
-msgstr "Nyomtatás"
+msgstr "PrintScreen"
#: src/client/keycode.cpp
msgid "Return"
@@ -1464,7 +1648,7 @@ msgstr "Enter"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Right"
-msgstr "Jobb"
+msgstr "Jobbra"
#: src/client/keycode.cpp
msgid "Right Button"
@@ -1490,6 +1674,7 @@ msgstr "Jobb Windows"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Kiválasztás"
@@ -1536,10 +1721,10 @@ msgstr "A jelszavak nem egyeznek!"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
-msgstr "regisztrálás, és belépés"
+msgstr "Regisztráció és belépés"
#: src/gui/guiConfirmRegistration.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"You are about to join this server with the name \"%s\" for the first time.\n"
"If you proceed, a new account using your credentials will be created on this "
@@ -1547,10 +1732,12 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
-"Te most %1$s szerverre csatlakozol \"%2$s\" névvel először. Ha folytatod, "
-"akkor egy új fiók lesz létrehozva a hitelesítő adatokkal a szerveren. Kérlek "
-"írd be újra a jelszavad, kattints Regisztrációra majd Bejelentkezésre, hogy "
-"megerősítsd a fióklétrehozást vagy kattints Kilépés gombra a megszakításhoz."
+"Te most %1$s szerverre csatlakozol \"%2$s\" névvel először.\n"
+"Ha folytatod, akkor egy új fiók lesz létrehozva a hitelesítő adatokkal a "
+"szerveren.\n"
+"Kérlek írd be újra a jelszavad, kattints Regisztrációra majd "
+"Bejelentkezésre, hogy megerősítsd a fióklétrehozást vagy kattints Kilépés "
+"gombra a megszakításhoz."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
@@ -1558,15 +1745,15 @@ msgstr "Folytatás"
#: src/gui/guiKeyChangeMenu.cpp
msgid "\"Special\" = climb down"
-msgstr "„speciál†= lemászás"
+msgstr "különleges = lemászás"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
-msgstr "automata Előre"
+msgstr "Automatikus előre"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
-msgstr "automatikus ugrás"
+msgstr "Automatikus ugrás"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
@@ -1574,7 +1761,7 @@ msgstr "Hátra"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
-msgstr "másik kamera"
+msgstr "Nézet váltása"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
@@ -1590,7 +1777,7 @@ msgstr "Konzol"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
-msgstr "KISSEBB látótáv"
+msgstr "Látótáv csökkentése"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
@@ -1598,7 +1785,7 @@ msgstr "Halkítás"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
-msgstr "Érints duplán az „ugrásra†a repülés be-/kikapcsolásához"
+msgstr "Nyomj duplán az „ugrásra†a repülés be-/kikapcsolásához"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Drop"
@@ -1610,7 +1797,7 @@ msgstr "Előre"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
-msgstr "NAGYOBB látótáv"
+msgstr "Látótáv növelése"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
@@ -1631,8 +1818,8 @@ msgstr "A gomb már használatban van"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
-"Gombkiosztás. (Ha ez a menü összeomlik, távolíts el néhány dolgot a minetest."
-"conf-ból)"
+"Billentyűzetkiosztás. (Ha ez a menü összeomlik, távolíts el néhány dolgot a "
+"minetest.conf-ból)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
@@ -1648,7 +1835,7 @@ msgstr "Következő tárgy"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
-msgstr "Előző tárgy"
+msgstr "Előző elem"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Range select"
@@ -1664,40 +1851,39 @@ msgstr "Lopakodás"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Special"
-msgstr "speciál"
+msgstr "Különleges"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
-msgstr "HUD BE/KI"
+msgstr "HUD váltása"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr "csevegés log KI/BE"
+msgstr "Csevegésnapló váltása"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
-msgstr "Gyors mód bekapcsolása"
+msgstr "Gyors mód váltása"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fly"
-msgstr "Repülés bekapcsolása"
+msgstr "Repülés váltása"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fog"
-msgstr "köd KI/BE"
+msgstr "Köd váltása"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle minimap"
-msgstr "kistérkép KI/BE"
+msgstr "Kistérkép váltása"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr "Váltás noclip-re"
+msgstr "Noclip mód váltása"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
-msgstr "csevegés log KI/BE"
+msgstr "Pályamozgás mód váltása"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -1705,7 +1891,7 @@ msgstr "Nyomj meg egy gombot"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
-msgstr "Változtatás"
+msgstr "Megváltoztatás"
#: src/gui/guiPasswordChange.cpp
msgid "Confirm Password"
@@ -1725,16 +1911,21 @@ msgstr "Kilépés"
#: src/gui/guiVolumeChange.cpp
msgid "Muted"
-msgstr "némitva"
+msgstr "Némitva"
#: src/gui/guiVolumeChange.cpp
msgid "Sound Volume: "
msgstr "Hangerő: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Belépés "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "hu"
@@ -1744,9 +1935,9 @@ msgid ""
"(Android) Fixes the position of virtual joystick.\n"
"If disabled, virtual joystick will center to first-touch's position."
msgstr ""
-"(Android) Virtuális joystick helye javítva.\n"
+"(Android) A virtuális joystick helyének javítása.\n"
"Ha ez kikapcsolva, akkor a virtuális joystick középen lesz az 'Első "
-"kattintás' pozicióba."
+"kattintás' pozícióban."
#: src/settings_translation_file.cpp
msgid ""
@@ -1798,37 +1989,34 @@ msgstr ""
"1 = relief mapping (lassabb, pontosabb)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr "2D zaj, amely szabályozza a méretét/alakját a hegységeknek"
+msgstr "2D zaj, amely a hegyvonulatok az alakját/méretét szabályozza."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr "2D zaj, amely szabályozza a méretét/alakját a domboknak"
+msgstr "2D zaj, amely a dombok alakját/méretét szabályozza."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "2D zaj amely szabályozza a lépés hegyek formáját/méretét."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
-msgstr "2D zaj, amely szabályozza az előfordulását/méretét a hegységeknek"
+msgstr ""
+"2D zaj, amely szabályozza az méretét/előfordulását a sziklás hegyláncoknak."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr "2D zaj, amely szabályozza az előfordulását/méretét a domboknak"
+msgstr "2D zaj, amely a dombok méretét/előfordulását szabályozza."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "2D noise that locates the river valleys and channels."
-msgstr "2D zaj, amely szabályozza az elhelyezkedését a folyómedreknek"
+msgstr ""
+"2D zaj, amely a folyóvölgyek és a folyómedrek elhelyezkedését szabályozza."
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -1839,8 +2027,13 @@ msgid "3D mode"
msgstr "3D mód"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Parallax Occlusion hatás ereje"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
-msgstr "Hatalmas barlangokat meghatározó 3D zaj."
+msgstr "Óriási üregeket meghatározó 3D zaj."
#: src/settings_translation_file.cpp
msgid ""
@@ -1848,25 +2041,32 @@ msgid ""
"Also defines structure of floatland mountain terrain."
msgstr ""
"A hegyek szerkezetét és magasságát meghatározó 3D zaj.\n"
-"A lebegő tájak hegységeit is meghatározza."
+"A lebegő tájak hegyeit is meghatározza."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "A folyókanyonok falainak szerkezetét meghatározó 3D zaj."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D noise defining terrain."
-msgstr "\"+/+=%/=(/=()(=)Ö()Ö=()>#&@{#&@"
+msgstr "3D zaj amely meghatározza a terepet."
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
msgstr ""
+"3D zaj a sziklapárkányokhoz, szirtekhez, stb. Ãltalában kisebb változások."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr "3D-s zaj, amely meghatározza a tömlöcök számát egy mapchunkonként."
+msgstr "3D-s zaj, amely meghatározza a tömlöcök számát egy térképdarabkánként."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -1896,7 +2096,7 @@ 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 ""
-"Egy választott map seed az új térképhez, véletlenszerűhöz hagyd üresen.\n"
+"Egy választott seed az új térképhez, a véletlenszerűhöz hagyd üresen.\n"
"Felül lesz írva új világ létrehozásánál a főmenüben."
#: src/settings_translation_file.cpp
@@ -1912,7 +2112,8 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "A világgeneráló szálak számának abszolút határa"
#: src/settings_translation_file.cpp
@@ -1920,9 +2121,8 @@ msgid "Acceleration in air"
msgstr "Gyorsulás levegőben"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr "Gravitációs gyorsulás, csomópontokban másodpercenként."
+msgstr "Gravitációs gyorsulás, node-okban másodpercenként."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
@@ -1952,7 +2152,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
-msgstr "Részecskéket hoz létre egy kocka ásásakor."
+msgstr "Részecskéket hoz létre egy node ásásakor."
#: src/settings_translation_file.cpp
msgid ""
@@ -1963,6 +2163,16 @@ msgstr ""
"képernyőkhöz."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Haladó"
@@ -1976,13 +2186,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Altitude chill"
-msgstr "Hőmérsékletcsökkenés a magassággal"
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
-msgstr "Repülés és gyorsaság mindig"
+msgstr "Repülés és gyors mód mindig"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -1990,24 +2195,23 @@ msgstr "Ambiens okklúzió gamma"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr "mennyi üzenet mehet / 10 ms."
+msgstr "Üzenetek száma / 10 s."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Amplifies the valleys."
-msgstr "A völgyek erősítése"
+msgstr "Erősíti a völgyeket."
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
-msgstr "Anizotrópikus szűrés"
+msgstr "Anizotróp szűrés"
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr "Szerver kihirdetése"
+msgstr "Szerver hirdetése"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr "Szerver kihirdetése ERRE a szerverlistára."
+msgstr "Szerver kihirdetése erre a szerverlistára."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2015,9 +2219,8 @@ msgid "Append item name"
msgstr "Elem nevének hozzáadása"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Append item name to tooltip."
-msgstr "Adja hozzá az elem nevét az eszköztipphez."
+msgstr "Elem nevének hozzáadása az eszköztipphez."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
@@ -2042,7 +2245,6 @@ msgid "Ask to reconnect after crash"
msgstr "Összeomlás után újracsatlakozás kérése"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"At this distance the server will aggressively optimize which blocks are sent "
"to\n"
@@ -2063,21 +2265,19 @@ msgstr ""
"(Néhány víz alatti és barlangokban lévő blokk nem jelenik meg, néha a "
"felszínen lévők sem.)\n"
"Ha nagyobb, mint a \"max_block_send_distance\", akkor nincs optimalizáció.\n"
-"A távolság blokkokban értendő (16 kocka)"
+"A távolság blokkokban értendő (16 node)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatic forward key"
-msgstr "automata Előre gomb"
+msgstr "Automatikus előre gomb"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatically jump up single-node obstacles."
-msgstr "Automatikusan felugrik egy blokk magas akadályokra."
+msgstr "Automatikusan felugrik az egy node magas akadályokra."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr "Automatikus bejelentés a FŠszerverlistára."
+msgstr "Automatikus bejelentés a szerverlistára."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
@@ -2094,7 +2294,7 @@ msgstr "Vissza gomb"
#: src/settings_translation_file.cpp
msgid "Base ground level"
-msgstr "Talaj szint"
+msgstr "Talajszint"
#: src/settings_translation_file.cpp
msgid "Base terrain height."
@@ -2122,34 +2322,31 @@ msgstr "Bilineáris szűrés"
#: src/settings_translation_file.cpp
msgid "Bind address"
-msgstr "Bind cím"
+msgstr "Cím csatolása"
#: src/settings_translation_file.cpp
msgid "Biome API temperature and humidity noise parameters"
-msgstr "Éghajlat API hőmérséklet- és páratartalom zaj paraméterei"
+msgstr "Biom API hőmérséklet- és páratartalom zaj paraméterei"
#: src/settings_translation_file.cpp
msgid "Biome noise"
-msgstr "Éghajlat zaj"
+msgstr "Biom zaj"
#: src/settings_translation_file.cpp
msgid "Bits per pixel (aka color depth) in fullscreen mode."
msgstr "Bit/pixel (vagyis színmélység) teljes képernyős módban."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Block send optimize distance"
-msgstr "Max blokk generálási távolság"
+msgstr "Max blokk küldési távolság"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Monospace betűtípus útvonal"
+msgstr "Félkövér dőlt betűtípus útvonal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Monospace betűtípus útvonal"
+msgstr "Félkövér dőlt monospace betűtípus útvonal"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2157,9 +2354,8 @@ msgid "Bold font path"
msgstr "Betűtípus helye"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Monospace betűtípus útvonal"
+msgstr "Félkövér betűtípus útvonal"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2175,8 +2371,8 @@ msgstr "Bumpmappolás"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2187,11 +2383,11 @@ msgstr "Kamera simítás"
#: src/settings_translation_file.cpp
msgid "Camera smoothing in cinematic mode"
-msgstr "Kamera simítás \"cinematic\" módban"
+msgstr "Kamera simítás filmszerű módban"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
-msgstr "Kamera frissítés váltás gomb"
+msgstr "Kamera frissítés váltása gomb"
#: src/settings_translation_file.cpp
msgid "Cave noise"
@@ -2219,23 +2415,23 @@ msgstr "2. Barlang zaj"
#: src/settings_translation_file.cpp
msgid "Cavern limit"
-msgstr "Barlang korlát"
+msgstr "Üreg korlát"
#: src/settings_translation_file.cpp
msgid "Cavern noise"
-msgstr "Barlang zaj"
+msgstr "Üreg zaj"
#: src/settings_translation_file.cpp
msgid "Cavern taper"
-msgstr "Barlang vékonyodás"
+msgstr "Üreg vékonyodás"
#: src/settings_translation_file.cpp
msgid "Cavern threshold"
-msgstr "Barlang küszöb"
+msgstr "Üreg küszöb"
#: src/settings_translation_file.cpp
msgid "Cavern upper limit"
-msgstr "Barlang felső korlát"
+msgstr "Üreg felső korlát"
#: src/settings_translation_file.cpp
msgid ""
@@ -2260,12 +2456,23 @@ msgstr ""
"Szükséges lehet a kisebb képernyőkhöz."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Betűtípus mérete"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Csevegés gomb"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Hibakereső naplózás szintje"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Chat message count limit"
-msgstr ""
+msgstr "Chat üzenetek maximális száma"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2273,17 +2480,16 @@ msgid "Chat message format"
msgstr "Üzenet összeomláskor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message kick threshold"
-msgstr "Sivatag zajának küszöbszintje"
+msgstr "Sivatag zajának küszöbe"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr "Chat üzenet maximális hossza"
+msgstr "CSevegésüzenet maximális hossza"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
-msgstr "Csevegés váltás gomb"
+msgstr "Csevegés váltása gomb"
#: src/settings_translation_file.cpp
msgid "Chatcommands"
@@ -2291,15 +2497,15 @@ msgstr "Parancsok"
#: src/settings_translation_file.cpp
msgid "Chunk size"
-msgstr "Térképdarab (chunk) mérete"
+msgstr "Térképdarabka (chunk) mérete"
#: src/settings_translation_file.cpp
msgid "Cinematic mode"
-msgstr "Filmkészítő mód"
+msgstr "Filmszerű mód"
#: src/settings_translation_file.cpp
msgid "Cinematic mode key"
-msgstr "Filmkészítő mód gomb"
+msgstr "Filmszerű mód gomb"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
@@ -2315,11 +2521,11 @@ msgstr "Kliens és szerver"
#: src/settings_translation_file.cpp
msgid "Client modding"
-msgstr "Kliens moddolás"
+msgstr "Kliens modolás"
#: src/settings_translation_file.cpp
msgid "Client side modding restrictions"
-msgstr "Kliens moddolási megkötések"
+msgstr "Kliens modolási korlátozások"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
@@ -2331,7 +2537,7 @@ msgstr "Mászás sebessége"
#: src/settings_translation_file.cpp
msgid "Cloud radius"
-msgstr "Felhő rádiusz"
+msgstr "Felhők sugara"
#: src/settings_translation_file.cpp
msgid "Clouds"
@@ -2339,7 +2545,7 @@ msgstr "Felhők"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
-msgstr "A felhők egy kliens oldali effekt."
+msgstr "A felhő kliens oldali effekt."
#: src/settings_translation_file.cpp
msgid "Clouds in menu"
@@ -2393,7 +2599,7 @@ msgstr "Csatlakozás külső médiaszerverhez"
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
-msgstr "Üveg csatlakoztatása ha a blokk támogatja."
+msgstr "Üveg csatlakoztatása ha a node támogatja."
#: src/settings_translation_file.cpp
msgid "Console alpha"
@@ -2409,12 +2615,11 @@ msgstr "Konzol magasság"
#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
-msgstr ""
+msgstr "ContentDB zászló feketelista"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB URL"
-msgstr "tartalom"
+msgstr "ContentDB URL"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
@@ -2436,7 +2641,7 @@ msgid ""
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
-"Nap/éjjel ciklus hossza.\n"
+"Nappal/éjjel ciklus hossza.\n"
"Példák: 72 = 20 perc, 360 = 4 perc, 1 = 24 óra, 0 = nappal/éjjel/bármelyik "
"változatlan marad."
@@ -2470,11 +2675,11 @@ msgstr "Kreatív"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
-msgstr "Célkereszt alfa"
+msgstr "Célkereszt átlátszóság"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha (opaqueness, between 0 and 255)."
-msgstr "Célkereszt alfa (átlátszatlanság, 0 és 255 között)."
+msgstr "Célkereszt átlátszóság (0 és 255 között)."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2494,7 +2699,7 @@ msgstr "Sérülés"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
-msgstr "Hibakereső infó váltás gomb"
+msgstr "Hibakereső információra váltás gomb"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2503,16 +2708,15 @@ msgstr "Sivatag zajának küszöbszintje"
#: src/settings_translation_file.cpp
msgid "Debug log level"
-msgstr "Hibakereső napló szint"
+msgstr "Hibakereső naplózás szintje"
#: src/settings_translation_file.cpp
msgid "Dec. volume key"
-msgstr "Hangerő csökk. gomb"
+msgstr "Hangerő csökkentés gomb"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Csökkentse ezt a folyadék mozgásállóságának növelése érdekében."
+msgstr "Csökkentse ezt hogy megnövelje a folyadék ellenállását."
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -2547,6 +2751,11 @@ msgid "Default report format"
msgstr "Alapértelmezett jelentésformátum"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Alapértelmezett játék"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2563,10 +2772,9 @@ msgid "Defines areas with sandy beaches."
msgstr "A homokos tengerpartok területeit határozza meg."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines distribution of higher terrain and steepness of cliffs."
msgstr ""
-"A magasabb terep (hegytetők) területeit szabja meg és a hegyoldalak\n"
+"A magasabb terep (hegytetők) területeit szabja meg és a szirtek\n"
"meredekségére is hatással van."
#: src/settings_translation_file.cpp
@@ -2577,8 +2785,8 @@ msgstr "A \"terrain_higher\" területeit határozza meg (hegytetők terepe)."
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
msgstr ""
-"A barlangok teljes méretét adja meg. Kisebb értékek nagyobb\n"
-"barlangokat képeznek."
+"Az üregek teljes méretét adja meg. Kisebb értékek nagyobb\n"
+"üregeket képeznek."
#: src/settings_translation_file.cpp
msgid "Defines large-scale river channel structure."
@@ -2597,14 +2805,12 @@ msgstr ""
"Nagyobb érték simább normal map-et eredményez."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the base ground level."
-msgstr "Az erdős területeket és a fák sűrűségét szabályozza."
+msgstr "Meghatározza az alap talajszintet."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the depth of the river channel."
-msgstr "Az erdős területeket és a fák sűrűségét szabályozza."
+msgstr "A folyómedrek mélységét határozza meg."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
@@ -2613,14 +2819,12 @@ msgstr ""
"blokkokban megadva (0 = korlátlan)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river channel."
-msgstr "A nagy léptékű folyómeder-struktúrát határozza meg."
+msgstr "A folyómedrek szélességét határozza meg."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river valley."
-msgstr "Azokat a területeket adja meg, ahol a fák almát teremnek."
+msgstr "A folyóvölgy szélességét határozza meg."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
@@ -2631,7 +2835,7 @@ msgid ""
"Delay between mesh updates on the client in ms. Increasing this will slow\n"
"down the rate of mesh updates, thus reducing jitter on slower clients."
msgstr ""
-"A világ modelljének frissítésének időköze a klienseken. Ennek a megnövelése\n"
+"A világ modelljének frissítési időköze a klienseken. Ennek a megnövelése\n"
"lelassítja a frissítéseket,így csökkenti a lassú kliensek szaggatását."
#: src/settings_translation_file.cpp
@@ -2647,13 +2851,12 @@ msgid "Deprecated Lua API handling"
msgstr "Elavult Lua API kezelése"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Depth below which you'll find giant caverns."
-msgstr "A mélység, ami alatt nagy terjedelmű barlangokat találsz majd."
+msgstr "A mélység, ami alatt óriási üregeket találsz majd."
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find large caves."
-msgstr "A mélység, ami alatt nagy terjedelmű barlangokat találsz majd."
+msgstr "A mélység, ami alatt nagy barlangokat találsz majd."
#: src/settings_translation_file.cpp
msgid ""
@@ -2665,21 +2868,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Desert noise threshold"
-msgstr "Sivatag zajának küszöbszintje"
+msgstr "Sivatag zaj küszöbe"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Deserts occur when np_biome exceeds this value.\n"
"When the 'snowbiomes' flag is enabled, this is ignored."
msgstr ""
"Sivatag akkor keletkezik, ha az np_biome meghaladja ezt az értéket.\n"
-"Ha az új biome rendszer engedélyezve van, akkor ez mellőzésre kerül."
+"Ha az új biom rendszer engedélyezve van, akkor ez mellőzésre kerül."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Desynchronize block animation"
-msgstr "Blokk animáció deszinkronizálása"
+msgstr "Blokkanimáció deszinkronizálása"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2699,7 +2900,7 @@ msgstr "A szerver domain neve, ami a szerverlistában megjelenik."
#: src/settings_translation_file.cpp
msgid "Double tap jump for fly"
-msgstr "Az \"ugrás\" gomb duplán a repüléshez"
+msgstr "Az ugrás gomb dupla megnyomása a repüléshez"
#: src/settings_translation_file.cpp
msgid "Double-tapping the jump key toggles fly mode."
@@ -2707,12 +2908,11 @@ msgstr "Az ugrás gomb kétszeri megnyomásával lehet repülés módba váltani
#: src/settings_translation_file.cpp
msgid "Drop item key"
-msgstr "Tárgy eldobás gomb"
+msgstr "Tárgy eldobása gomb"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dump the mapgen debug information."
-msgstr "A térkép-előállítás hibakeresési információinak kiírása."
+msgstr "A térképgenerátor hibakeresési információinak kiírása."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2725,9 +2925,8 @@ msgid "Dungeon minimum Y"
msgstr "Tömlöc minimális Y magassága"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dungeon noise"
-msgstr "Barlang zaj"
+msgstr "Tömlöc zaj"
#: src/settings_translation_file.cpp
msgid ""
@@ -2740,7 +2939,7 @@ msgid ""
"Enable Lua modding support on client.\n"
"This support is experimental and API can change."
msgstr ""
-"Lua moddolás támogatás bekapcsolása a kliensen.\n"
+"Lua modolás támogatás bekapcsolása a kliensen.\n"
"Ez a támogatás még kísérleti fázisban van, így az API változhat."
#: src/settings_translation_file.cpp
@@ -2757,9 +2956,8 @@ msgid "Enable joysticks"
msgstr "Joystick engedélyezése"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable mod channels support."
-msgstr "Mod biztonság engedélyezése"
+msgstr "A mod csatornák támogatásának engedélyezése."
#: src/settings_translation_file.cpp
msgid "Enable mod security"
@@ -2833,8 +3031,9 @@ msgid ""
"Enable view bobbing and amount of view bobbing.\n"
"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""
-"nézet billegés, és mértéke.\n"
-"például: 0 nincs billegés; 1.0 normál; 2.0 dupla."
+"Bekapcsolja a fejmozgást és beállítja a mértékét.\n"
+"Pl: 0 nincs fejmozgás; 1.0 alapértelmezett fejmozgás van; 2.0 dupla "
+"fejmozgás van"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2858,7 +3057,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
-msgstr "Az eszköztár elemeinek animációjának engedélyezése."
+msgstr "Az eszköztárelemek animációjának engedélyezése."
#: src/settings_translation_file.cpp
msgid ""
@@ -2875,7 +3074,7 @@ msgstr "Engedélyezi az elforgatott rácsvonalak gyorsítótárazását."
#: src/settings_translation_file.cpp
msgid "Enables minimap."
-msgstr "Minitérkép engedélyezése."
+msgstr "Engedélyezi a kistérképet."
#: src/settings_translation_file.cpp
msgid ""
@@ -2889,7 +3088,7 @@ msgid ""
"Requires shaders to be enabled."
msgstr ""
"Parallax occlusion mapping bekapcsolása.\n"
-"A shaderek engedélyezve kell legyenek."
+"A shaderek engedélyezve kell hogy legyenek."
#: src/settings_translation_file.cpp
msgid ""
@@ -2901,7 +3100,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
-msgstr ""
+msgstr "Játékmotor profiler adatok kiírási időköze"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2917,6 +3116,16 @@ msgstr ""
"ha nagyobbra van állítva, mint 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS a szünet menüben"
@@ -2940,15 +3149,15 @@ msgstr "Tartalék betűtípus"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
-msgstr "Tartalék betűtípus árnyék"
+msgstr "Tartalék betűtípus árnyéka"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow alpha"
-msgstr "Tartalék betűtípus árnyék alfa"
+msgstr "Tartalék betűtípus árnyék átlátszósága"
#: src/settings_translation_file.cpp
msgid "Fallback font size"
-msgstr "Tartalék betűtípus méret"
+msgstr "Tartalék betűtípus mérete"
#: src/settings_translation_file.cpp
msgid "Fast key"
@@ -2967,13 +3176,12 @@ msgid "Fast movement"
msgstr "Gyors mozgás"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Fast movement (via the \"special\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"Gyors mozgás (a használat gombbal).\n"
-"Szükséges hozzá a \"fast\" (gyorsaság) jogosultság a szerveren."
+"Szükséges hozzá a gyors mód jogosultság a szerveren."
#: src/settings_translation_file.cpp
msgid "Field of view"
@@ -2994,13 +3202,12 @@ msgstr ""
"szervereket, amik a Többjátékos fül alatt jelennek meg."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Filler depth"
-msgstr "Folyó mélység"
+msgstr "A kitöltőanyag mélysége"
#: src/settings_translation_file.cpp
msgid "Filler depth noise"
-msgstr ""
+msgstr "Kitöltőanyag mélység zaj"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
@@ -3028,7 +3235,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Fixed map seed"
-msgstr "lezárt pálya-generáló kód"
+msgstr "Fix térkép seed"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3036,6 +3243,35 @@ msgid "Fixed virtual joystick"
msgstr "Rögzített virtuális joystick"
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr "Lebegő földek sűrűsége"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr "Lebegő földek maximális Y magassága"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr "Lebegő földek minimális Y magassága"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr "Lebegőföldek zaja"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "A lebegő hegyek alapzaja"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr "A lebegő földek hegyeinek távolsága"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr "Lebegő földek vízszintje"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Repülés gomb"
@@ -3049,11 +3285,11 @@ msgstr "Köd"
#: src/settings_translation_file.cpp
msgid "Fog start"
-msgstr "Köd indító határa"
+msgstr "Köd indulás"
#: src/settings_translation_file.cpp
msgid "Fog toggle key"
-msgstr "Köd váltás gomb"
+msgstr "Köd váltása gomb"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
@@ -3069,7 +3305,7 @@ msgstr "Betűtípus árnyéka"
#: src/settings_translation_file.cpp
msgid "Font shadow alpha"
-msgstr "Betűtípus árnyék alfa"
+msgstr "Betűtípus árnyék átlátszósága"
#: src/settings_translation_file.cpp
msgid "Font size"
@@ -3088,6 +3324,12 @@ msgid "Font size of the monospace font in point (pt)."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Format of player chat messages. The following strings are valid "
@@ -3136,11 +3378,9 @@ msgid "Formspec full-screen background color (R,G,B)."
msgstr "Játékon belüli csevegő konzol hátterének színe (R,G,B)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Formspec full-screen background opacity (between 0 and 255)."
msgstr ""
-"Játékon belüli csevegő konzol hátterének alfája (átlátszatlanság, 0 és 255 "
-"között)."
+"Játékon belüli csevegő konzol hátterének átlátszósága (0 és 255 között)."
#: src/settings_translation_file.cpp
msgid "Forward key"
@@ -3152,16 +3392,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Fractal type"
-msgstr "Fraktál tipusa"
+msgstr "Fraktál típusa"
#: src/settings_translation_file.cpp
msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FreeType fonts"
-msgstr "Freetype betűtípusok"
+msgstr "FreeType betűtípusok"
#: src/settings_translation_file.cpp
msgid ""
@@ -3257,12 +3496,11 @@ msgstr "Gravitáció"
#: src/settings_translation_file.cpp
msgid "Ground level"
-msgstr "Talaj szint"
+msgstr "Talajszint"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ground noise"
-msgstr "Talaj szint"
+msgstr "Talaj zaj"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3270,9 +3508,8 @@ msgid "HTTP mods"
msgstr "HTTP Modok"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "HUD scale factor"
-msgstr "vezérlőelemek mérete"
+msgstr "Vezérlőelemek mérete"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
@@ -3303,27 +3540,24 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Heat blend noise"
-msgstr "Hőkevert zaj"
+msgstr "Hőkeverési zaj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Heat noise"
msgstr "Hőzaj"
#: src/settings_translation_file.cpp
msgid "Height component of the initial window size."
-msgstr "A kezdeti ablak méret magasság összetevője."
+msgstr "A kezdeti ablak magassága."
#: src/settings_translation_file.cpp
msgid "Height noise"
msgstr "Magasság zaj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Height select noise"
-msgstr "A magasságot választó zaj"
+msgstr "A magasságot kiválasztó zaj"
#: src/settings_translation_file.cpp
msgid "High-precision FPU"
@@ -3339,19 +3573,19 @@ msgstr "Domb küszöb"
#: src/settings_translation_file.cpp
msgid "Hilliness1 noise"
-msgstr ""
+msgstr "1. dombosság zaj"
#: src/settings_translation_file.cpp
msgid "Hilliness2 noise"
-msgstr ""
+msgstr "2. dombosság zaj"
#: src/settings_translation_file.cpp
msgid "Hilliness3 noise"
-msgstr ""
+msgstr "3. dombosság zaj"
#: src/settings_translation_file.cpp
msgid "Hilliness4 noise"
-msgstr ""
+msgstr "4. dombosság zaj"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
@@ -3521,9 +3755,8 @@ msgid "Hotbar slot 9 key"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "How deep to make rivers."
-msgstr "Milyen mélyek legyenek a folyók"
+msgstr "A folyók mélysége."
#: src/settings_translation_file.cpp
msgid ""
@@ -3542,13 +3775,12 @@ msgstr ""
"Magasabb érték egyenletesebb, de több RAM-ot használ."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "How wide to make rivers."
-msgstr "Milyen szélesek legyenek a folyók"
+msgstr "A folyók szélessége."
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
-msgstr "Páratartalom keverék zaj"
+msgstr "Páratartalom keverés zaj"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3556,9 +3788,8 @@ msgid "Humidity noise"
msgstr "Páratartalomzaj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Humidity variation for biomes."
-msgstr "Páratartalom-változás a biomokban."
+msgstr "Páratartalom-változékonyság a biomokban."
#: src/settings_translation_file.cpp
msgid "IPv6"
@@ -3602,9 +3833,8 @@ msgid ""
"nodes.\n"
"This requires the \"noclip\" privilege on the server."
msgstr ""
-"Ha engedélyezve van együtt a repülés (fly) móddal, a játékos átrepülhet "
-"szilárd\n"
-"blokkokon. Szükséges hozzá a \"noclip\" jogosultság a szerveren."
+"Ha a repülés móddal együtt van engedélyezve, a játékos átrepülhet szilárd\n"
+"node-okon. Szükséges hozzá a noclip jogosultság a szerveren."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3643,6 +3873,8 @@ msgid ""
"If enabled, makes move directions relative to the player's pitch when flying "
"or swimming."
msgstr ""
+"Ha engedélyezve van a játékos abba az irányba megy amerre néz, amikor úszik "
+"vagy repül."
#: src/settings_translation_file.cpp
msgid "If enabled, new players cannot join with an empty password."
@@ -3654,7 +3886,7 @@ msgid ""
"you stand.\n"
"This is helpful when working with nodeboxes in small areas."
msgstr ""
-"Ha engedélyezve van, elhelyezhetsz blokkokat oda, ahol állsz (láb + "
+"Ha engedélyezve van, elhelyezhetsz node-okat oda, ahol állsz (láb + "
"szemmagasság).\n"
"Ez segít, ha kis területen dolgozol."
@@ -3681,7 +3913,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Ignore world errors"
-msgstr "Világ hibák figyelmen kívül hagyása"
+msgstr "Világhibák figyelmen kívül hagyása"
#: src/settings_translation_file.cpp
msgid "In-Game"
@@ -3690,8 +3922,7 @@ msgstr "Játékon belül"
#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""
-"Játékon belüli csevegő konzol hátterének alfája (átlátszatlanság, 0 és 255 "
-"között)."
+"Játékon belüli csevegő konzol hátterének átlátszósága (0 és 255 között)."
#: src/settings_translation_file.cpp
msgid "In-game chat console background color (R,G,B)."
@@ -3699,17 +3930,15 @@ msgstr "Játékon belüli csevegő konzol hátterének színe (R,G,B)."
#: src/settings_translation_file.cpp
msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
-msgstr ""
-"Játékon belüli csevegő konzol magassága 0,1 (10%) és 1,0 (100%) között."
+msgstr "Játékon belüli csevegéskonzol magassága 0,1 (10%) és 1,0 (100%) között."
#: src/settings_translation_file.cpp
msgid "Inc. volume key"
-msgstr "Hangerő növ. gomb"
+msgstr "Hangerő növelése gomb"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr "Kezdeti függőleges sebesség ugráskor, blokk/másodpercben."
+msgstr "Kezdeti függőleges sebesség ugráskor, node/másodpercben."
#: src/settings_translation_file.cpp
msgid ""
@@ -3718,9 +3947,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Instrument chatcommands on registration."
-msgstr "Chat-parancsok a regisztrációkor."
+msgstr "Csevegésparancsok bemutatása regisztrációkor."
#: src/settings_translation_file.cpp
msgid ""
@@ -3765,21 +3993,19 @@ msgstr "Eszköztár gomb"
#: src/settings_translation_file.cpp
msgid "Invert mouse"
-msgstr "Egér invertálása"
+msgstr "Fordított egér"
#: src/settings_translation_file.cpp
msgid "Invert vertical mouse movement."
-msgstr "Függőleges egérmozgás invertálása."
+msgstr "Függőleges egérmozgás megfordítása."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Monospace betűtípus útvonal"
+msgstr "Dőlt betűtípus útvonal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Monospace betűtípus útvonal"
+msgstr "Dőlt monspace betűtípus útvonal"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3792,38 +4018,35 @@ msgid "Iterations"
msgstr "Ismétlések"
#: 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 ""
-"A rekurzív funkció ismétlései.\n"
+"A rekurzív függvény ismétlései.\n"
"Ennek növelése növeli a finom részletek mennyiségét és\n"
-"növeli a feldolgozási terhet.\n"
-" 20 ismétléseknél ez a térképgeneráló hasonló terheléssel rendelkezik, mint "
-"a V7."
+"növeli a feldolgozási terhelést.\n"
+" 20 ismétlésnél ez a térképgeneráló hasonló terheléssel rendelkezik, mint a "
+"V7."
#: src/settings_translation_file.cpp
msgid "Joystick ID"
-msgstr "Botkormány ID"
+msgstr "Joystick ID"
#: src/settings_translation_file.cpp
msgid "Joystick button repetition interval"
-msgstr "Joystick gomb ismétlés időköz"
+msgstr "Joystick gomb ismétlési időköz"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
msgstr "Joystick frustum érzékenység"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick type"
-msgstr "Botkormány tipus"
+msgstr "Joystick típus"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Julia set only.\n"
"W component of hypercomplex constant.\n"
@@ -3834,11 +4057,10 @@ msgstr ""
"Julia-halmaz.\n"
"W komponens hiperkomplex állandó.\n"
"Megváltoztatja a fraktál alakját.\n"
-"Nincs hatása a 3D Fraktálok.\n"
+"Nincs hatása a 3D Fraktálokra.\n"
"Tartomány nagyjából -2 és 2 között."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Julia set only.\n"
"X component of hypercomplex constant.\n"
@@ -3851,7 +4073,6 @@ msgstr ""
"Tartomány nagyjából -2 és 2 között."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Julia set only.\n"
"Y component of hypercomplex constant.\n"
@@ -3878,7 +4099,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Julia w"
-msgstr ""
+msgstr "Julia W"
#: src/settings_translation_file.cpp
msgid "Julia x"
@@ -3956,7 +4177,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Ugrás gombja.\n"
+"Gomb az ugráshoz.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -3966,12 +4187,11 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a gyors mozgáshoz gyors (fast) módban.\n"
+"Gomb a gyors mozgáshoz gyors módban.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for moving the player backward.\n"
"Will also disable autoforward, when active.\n"
@@ -3979,6 +4199,7 @@ msgid ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
"Gomb a játékos hátrafelé mozgásához.\n"
+"Az automatikus előremozgást is kikapcsolja, ha aktív.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4013,13 +4234,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for muting the game.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Ugrás gombja.\n"
+"Gomb a játék némításához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4029,18 +4249,17 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a csevegő ablak megnyitásához, parancsok beírásához.\n"
+"Gomb a csevegőablak megnyitásához, parancsok beírásához.\n"
"Lásd: //irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for opening the chat window to type local commands.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a csevegő ablak megnyitásához, parancsok beírásához.\n"
+"Gomb a csevegőablak megnyitásához, helyi parancsok beírásához.\n"
"Lásd: //irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4050,7 +4269,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a csevegő ablak megnyitásához.\n"
+"Gomb a csevegőablak megnyitásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4060,381 +4279,347 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb az eszköztár megnyitásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 11th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 11. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 12th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 12. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 13th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 13. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 14th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 14. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 15th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 15. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 16th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 16. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 17th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 17. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 18th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 18. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 19th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 19. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 20th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 20. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 21st hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 21. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 22nd hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 22. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 23rd hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 23. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 24th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 24. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 25th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 25. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 26th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 26. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 27th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 27. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 28th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 28. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 29th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 29. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 30th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 30. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 31st hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 31. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 32nd hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 32. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the eighth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 8. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the fifth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 5. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the first hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 1. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the fourth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 4. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the next item in the hotbar.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a következő elem kiválasztásához az eszköztárban.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the ninth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 9. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the previous item in the hotbar.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb az előző elem kiválasztásához az eszköztárban.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the second hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 2. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the seventh hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 7. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the sixth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 6. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the tenth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 10. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the third hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az Eszköztár megnyitásához.\n"
+"Gomb a 3. eszköztárhely kiválasztásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4446,7 +4631,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a lopakodáshoz (sneak).\n"
+"Gomb a lopakodáshoz.\n"
"A lefelé mászáshoz és vízben történő ereszkedéshez is használt, ha a "
"aux1_descends le van tiltva.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
@@ -4458,7 +4643,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a belső és külső nézetű kamera váltáshoz.\n"
+"Gomb a belső és külső nézetre váltáshoz.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4468,18 +4653,17 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb képernyőfelvétel készítéshez.\n"
+"Gomb képernyőkép készítéshez.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for toggling autoforward.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a gyors (fast) módra váltáshoz.\n"
+"Gomb az automatikus előrehaladás módra váltáshoz.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4489,7 +4673,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a \"cinematic\" mód (filmkészítés) bekapcsolásához.\n"
+"Gomb a filmszerű mód váltásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4499,7 +4683,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a minitérkép megjelenítéséhez.\n"
+"Gomb a kistérkép váltásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4509,7 +4693,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a gyors (fast) módra váltáshoz.\n"
+"Gomb a gyors mód váltásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4519,7 +4703,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a repülés (fly) módra váltáshoz.\n"
+"Gomb a repülés mód váltásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4529,40 +4713,37 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a noclip módra váltáshoz.\n"
+"Gomb a noclip mód váltásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for toggling pitch move mode.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a noclip módra váltáshoz.\n"
+"Gomb pályamozgás mód váltásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for toggling the camera update. Only used for development\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a kamerafrissítés bekapcsolásához. Csak fejlesztők számára.\n"
+"Gomb a kamerafrissítés váltásához. Csak fejlesztők számára.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for toggling the display of chat.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a csevegő megjelenítéséhez.\n"
+"Gomb a csevegés megjelenítéséhez.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4572,18 +4753,17 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a hibakeresési infók megjelenítéséhez.\n"
+"Gomb a hibakeresési információ megjelenítéséhez.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for toggling the display of fog.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a köd megjelenítésének ki/bekapcsolásához.\n"
+"Gomb a köd váltásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4593,18 +4773,17 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a HUD megjelenítéséhez/kikapcsolásához.\n"
+"Gomb a HUD váltásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for toggling the display of the large chat console.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a csevegő megjelenítéséhez.\n"
+"Gomb a nagy csevegéskonzol megjelenítéséhez.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4621,37 +4800,33 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb a végtelen látóterület bekapcsolásához.\n"
+"Gomb a végtelen látóterület váltásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key to use view zoom when possible.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Ugrás gombja.\n"
+"Gomb a nagyításhoz amikor lehetséges.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
-"Rúgja ki azokat a játékosokat, akik 10 másodpercenként több mint X üzenetet "
+"Azon játékosok kirúgása, akik 10 másodpercenként több mint X üzenetet "
"küldtek."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lake steepness"
-msgstr "Flat (lapos) térképgenerátor tó meredekség"
+msgstr "Tó meredekség"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lake threshold"
-msgstr "Flat (lapos) térképgenerátor tó küszöb"
+msgstr "Tó küszöb"
#: src/settings_translation_file.cpp
msgid "Language"
@@ -4663,20 +4838,19 @@ msgstr "Nagy barlang mélység"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Nagy barlangok maximális száma"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Nagy barlangok minimális száma"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "A nagy barlangok egy része elárasztott"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Large chat console key"
-msgstr "Konzol gomb"
+msgstr "Nagy csevegéskonzol gomb"
#: src/settings_translation_file.cpp
msgid "Leaves style"
@@ -4690,10 +4864,10 @@ msgid ""
"- Opaque: disable transparency"
msgstr ""
"Levelek stílusa:\n"
-"- Szép (Fancy): minden oldal látható\n"
-"- Egyszerű (Simple): csak a külső oldalak láthatók, if defined "
-"special_tiles are used\n"
-"- Ãtlátszatlan (Opaque): átlátszóság kikapcsolása"
+"- Szép: minden oldal látható\n"
+"- Egyszerű: csak a külső oldalak láthatók, ha meg van határozva a "
+"special_tiles használt\n"
+"- Ãtlátszatlan: átlátszóság kikapcsolása"
#: src/settings_translation_file.cpp
msgid "Left key"
@@ -4707,13 +4881,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"A \"true\" beállítás engedélyezi a levelek hullámzását.\n"
-"A shaderek engedélyezése szükséges hozzá."
+"Folyadékhullámok hossza.\n"
+"A hullámzó folyadékok engedélyezése szükséges hozzá."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4729,7 +4902,6 @@ msgid "Length of time between active block management cycles"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Level of logging to be written to debug.txt:\n"
"- <nothing> (no logging)\n"
@@ -4740,12 +4912,12 @@ msgid ""
"- info\n"
"- verbose"
msgstr ""
-"A Debug. txt fájlba írandó naplózási szint:\n"
+"A debug.txt fájlba írandó naplózási szint:\n"
"-semmi (nincs naplózás)\n"
"-minimális (szint nélküli üzenetek)\n"
"-hiba\n"
"-figyelmeztetés\n"
-"-cselekvés\n"
+"-művelet\n"
"-információ\n"
"-fecsegő"
@@ -4774,14 +4946,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4803,12 +4967,11 @@ msgstr "Folyadék folyékonysága"
#: src/settings_translation_file.cpp
msgid "Liquid fluidity smoothing"
-msgstr "Folyadék folyékonyságának simítása"
+msgstr "Folyadék folyásának simítása"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Liquid loop max"
-msgstr "Folyadékhullám Max"
+msgstr "Folyadékhullámzás maximum"
#: src/settings_translation_file.cpp
msgid "Liquid queue purge time"
@@ -4826,12 +4989,11 @@ msgstr "A folyadékok frissítési időköze másodpercben."
#: src/settings_translation_file.cpp
msgid "Liquid update tick"
-msgstr ""
+msgstr "Folyadékfrissítés tick"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Load the game profiler"
-msgstr "Töltse be a játék profilját"
+msgstr "Játék profiler betöltése"
#: src/settings_translation_file.cpp
msgid ""
@@ -4841,9 +5003,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Loading Block Modifiers"
-msgstr "Aktív blokk módosító időköze"
+msgstr "Blokk módosítók betöltése"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4851,24 +5012,28 @@ msgid "Lower Y limit of dungeons."
msgstr "A tömlöcök alsó Y határa."
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr "A lebegő földek alsó Y határa."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
-msgstr "Főmenü script"
+msgstr "Főmenü szkript"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Main menu style"
-msgstr "Főmenü script"
+msgstr "Főmenü stílusa"
#: src/settings_translation_file.cpp
msgid ""
"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
msgstr ""
-"A köd és ég színe függjön a napszaktól (hajnal/naplemente) és a látószögtől."
+"A köd és az ég színe függjön a napszaktól (hajnal/naplemente) és a "
+"látószögtől."
#: src/settings_translation_file.cpp
msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
msgstr ""
-"Lehetővé teszi, hogy a DriectX működjön a LuaJIT-tel. Tiltsd le, ha "
+"Lehetővé teszi, hogy a DirectX működjön a LuaJIT-tel. Tiltsd le, ha "
"problémákat okoz."
#: src/settings_translation_file.cpp
@@ -4945,10 +5110,20 @@ msgstr ""
"Flags starting with \"no\" are used to explicitly disable them."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
+"Térkép generálási jellemzők csak a Flat (lapos) térképgenerátor esetében.\n"
+"Esetenkénti tavak és dombok generálása a lapos világba.\n"
+"The default flags set in the engine are: none\n"
+"The flags string modifies the engine defaults.\n"
+"Flags that are not specified in the flag string are not modified from the "
+"default.\n"
+"Flags starting with \"no\" are used to explicitly disable them."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -4977,99 +5152,80 @@ msgid "Mapblock unload timeout"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Carpathian"
-msgstr "Fractal térképgenerátor"
+msgstr "Kárpátok térképgenerátor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Carpathian specific flags"
-msgstr "Flat (lapos) térképgenerátor domb meredekség"
+msgstr "Kárpátok térképgenerátor különleges zászlói"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Flat"
-msgstr "Flat (lapos) térképgenerátor"
+msgstr "Lapos térképgenerátor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Flat specific flags"
-msgstr "Flat (lapos) térképgenerátor domb meredekség"
+msgstr "Lapos térképgenerátor különleges zászlói"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal"
-msgstr "Fractal térképgenerátor"
+msgstr "Fraktál térképgenerátor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal specific flags"
-msgstr "Flat (lapos) térképgenerátor domb meredekség"
+msgstr "Fraktál térképgenerátor domb meredekség"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V5"
-msgstr "Térkép generátor v5"
+msgstr "V5 térképgenerátor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V5 specific flags"
-msgstr "Flat (lapos) térképgenerátor domb meredekség"
+msgstr "Lapos térképgenerátor különleges zászlók"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V6"
-msgstr "Térkép generátor v6"
+msgstr "V6 térképgenerátor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V6 specific flags"
-msgstr "Flat (lapos) térképgenerátor domb meredekség"
+msgstr "V6 térképgenerátor különleges zászlói"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V7"
-msgstr "Térkép generátor v7"
+msgstr "V7 térképgenerátor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V7 specific flags"
-msgstr "Flat (lapos) térképgenerátor domb meredekség"
+msgstr "V7 térképgenerátor különleges zászlói"
#: src/settings_translation_file.cpp
msgid "Mapgen Valleys"
-msgstr "Valleys térképgenerátor"
+msgstr "Völgyek térképgenerátor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Valleys specific flags"
-msgstr "Flat (lapos) térképgenerátor domb meredekség"
+msgstr "Völgyek térképgenerátor különleges zászlói"
#: src/settings_translation_file.cpp
msgid "Mapgen debug"
-msgstr "Térkép generátor hibakereső"
-
-#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Mapgen flags"
-msgstr "Térképgeneráló zászlók"
+msgstr "Térképgenerátor hibakereső"
#: src/settings_translation_file.cpp
msgid "Mapgen name"
-msgstr "Térkép generátor neve"
+msgstr "Térképgenerátor neve"
#: src/settings_translation_file.cpp
msgid "Max block generate distance"
msgstr "Max blokk generálási távolság"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Max block send distance"
-msgstr "Maximális blokkküldési távolság"
+msgstr "Max blokk-küldési távolság"
#: src/settings_translation_file.cpp
msgid "Max liquids processed per step."
-msgstr ""
+msgstr "Max folyadék feldolgozva lépésenként."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
@@ -5123,17 +5279,19 @@ msgid "Maximum number of blocks that can be queued for loading."
msgstr "Maximum blokkok száma, amik sorban állhatnak betöltésre."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Maximum blokkok száma, amik sorban állhatnak generálásra.\n"
"Hagyd üresen, hogy automatikusan legyen kiválasztva a megfelelő mennyiség."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Maximum blokkok száma, amik sorban állhatnak egy fájlból való betöltésre.\n"
"Hagyd üresen, hogy automatikusan legyen kiválasztva a megfelelő mennyiség."
@@ -5163,9 +5321,8 @@ msgid "Maximum number of players that can be connected simultaneously."
msgstr "Az egy időben csatlakozó játékosok maximális száma."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum number of recent chat messages to show"
-msgstr "Az egy időben csatlakozó játékosok maximális száma."
+msgstr "A megjelenítendő csevegésüzenetek maximális száma."
#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
@@ -5230,16 +5387,20 @@ msgid "Method used to highlight selected object."
msgstr "Kijelölt objektum kiemelésére használt módszer."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
-msgstr "Minitérkép"
+msgstr "Kistérkép"
#: src/settings_translation_file.cpp
msgid "Minimap key"
-msgstr "Minitérkép gomb"
+msgstr "Kistérkép gomb"
#: src/settings_translation_file.cpp
msgid "Minimap scan height"
-msgstr "Minitérkép letapogatási magasság"
+msgstr "Kistérkép letapogatási magasság"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5251,9 +5412,8 @@ msgid "Minimum limit of random number of small caves per mapchunk."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Minimum texture size"
-msgstr "Minimum textúra méret a szűrőknek"
+msgstr "Minimum textúra méret"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5262,11 +5422,11 @@ msgstr "Mip-mapping"
#: src/settings_translation_file.cpp
msgid "Mod channels"
-msgstr ""
+msgstr "Mod csatornák"
#: src/settings_translation_file.cpp
msgid "Modifies the size of the hudbar elements."
-msgstr ""
+msgstr "A hudbar elemméretét módosítja"
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -5274,24 +5434,23 @@ msgstr "Monospace betűtípus útvonal"
#: src/settings_translation_file.cpp
msgid "Monospace font size"
-msgstr "Monospace betűtípus méret"
+msgstr "Monospace betűméret"
#: src/settings_translation_file.cpp
msgid "Mountain height noise"
-msgstr ""
+msgstr "Hegy magasság zaj"
#: src/settings_translation_file.cpp
msgid "Mountain noise"
-msgstr ""
+msgstr "Hegy zaj"
#: src/settings_translation_file.cpp
msgid "Mountain variation noise"
-msgstr ""
+msgstr "Hegy változékonyság zaj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mountain zero level"
-msgstr "Vízszint"
+msgstr "Hegyek legkisebb szintje"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
@@ -5303,7 +5462,7 @@ msgstr "Egér érzékenység szorzó."
#: src/settings_translation_file.cpp
msgid "Mud noise"
-msgstr ""
+msgstr "Iszap zaj"
#: src/settings_translation_file.cpp
msgid ""
@@ -5312,13 +5471,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mute key"
-msgstr "Használat gomb"
+msgstr "Némítás gomb"
#: src/settings_translation_file.cpp
msgid "Mute sound"
-msgstr "hang némitás"
+msgstr "Hang némítása"
#: src/settings_translation_file.cpp
msgid ""
@@ -5346,8 +5504,8 @@ msgstr ""
"csatlakoznak."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
-msgstr ""
+msgid "Near plane"
+msgstr "Majdnem mint a repülőgép"
#: src/settings_translation_file.cpp
msgid "Network"
@@ -5369,11 +5527,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Noclip key"
-msgstr "Noclip gomb"
+msgstr "Noclip mód gomb"
#: src/settings_translation_file.cpp
msgid "Node highlighting"
-msgstr "Blokk kiemelés"
+msgstr "Node kiemelés"
#: src/settings_translation_file.cpp
msgid "NodeTimer interval"
@@ -5381,7 +5539,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Noises"
-msgstr ""
+msgstr "Zajok"
#: src/settings_translation_file.cpp
msgid "Normalmaps sampling"
@@ -5398,9 +5556,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5425,11 +5580,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
-msgstr ""
+msgstr "Online tartalomtár"
#: src/settings_translation_file.cpp
msgid "Opaque liquids"
-msgstr "folyadékok NEM átlátszók"
+msgstr "Ãtlátszatlan folyadékok"
#: src/settings_translation_file.cpp
msgid ""
@@ -5477,10 +5632,6 @@ msgid "Parallax occlusion scale"
msgstr "Parallax Occlusion mértéke"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Parallax Occlusion hatás ereje"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5490,8 +5641,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Képernyőmentések mappája."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5524,18 +5677,24 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Fizika"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Pitch move key"
-msgstr "Repülés gomb"
+msgstr "Pályamozgás mód gomb"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Pitch move mode"
-msgstr "Pályamozgás mód bekapcsolva"
+msgstr "Pályamozgás mód"
#: src/settings_translation_file.cpp
msgid ""
@@ -5543,7 +5702,7 @@ msgid ""
"This requires the \"fly\" privilege on the server."
msgstr ""
"A játékos képes repülni, nem hat rá a gravitáció.\n"
-"Szükséges hozzá a repülés jogosultság (fly) a szerveren."
+"Szükséges hozzá a repülés jogosultság a szerveren."
#: src/settings_translation_file.cpp
msgid "Player name"
@@ -5555,7 +5714,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Player versus player"
-msgstr "mindenki ellen (PvP)"
+msgstr "Játékos játékos ellen"
#: src/settings_translation_file.cpp
msgid ""
@@ -5574,7 +5733,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
msgstr ""
-"Annak megelőzése, hogy a modok nem biztonágos dolgokat futtassanak, pl. "
+"Annak megelőzése, hogy a modok nem biztonságos dolgokat futtassanak, pl. "
"shell parancsok."
#: src/settings_translation_file.cpp
@@ -5582,6 +5741,9 @@ msgid ""
"Print the engine's profiling data in regular intervals (in seconds).\n"
"0 = disable. Useful for developers."
msgstr ""
+"A játékmotor profiladatainak kiírása szabályos időközökben (másodpercekben)."
+"\n"
+"0 a kikapcsoláshoz. Hasznos fejlesztőknek."
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
@@ -5589,35 +5751,46 @@ msgstr "Jogosultságok, amiket a basic_privs adhat a játékosoknak"
#: src/settings_translation_file.cpp
msgid "Profiler"
-msgstr ""
+msgstr "Profiler"
#: src/settings_translation_file.cpp
msgid "Profiler toggle key"
-msgstr ""
+msgstr "Profiler váltó gomb"
#: src/settings_translation_file.cpp
msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "Prometheus listener address"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr "Nagy barlangok aránya amelyek folyadékot tartalmaznak."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Radius of cloud area stated in number of 64 node cloud squares.\n"
"Values larger than 26 will start to produce sharp cutoffs at cloud area "
"corners."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Raises terrain to make valleys around the rivers."
-msgstr "Megemeli a terepet, hogy völgyek alakuljanak a folyók körül"
+msgstr "Megemeli a terepet, hogy völgyek alakuljanak a folyók körül."
#: src/settings_translation_file.cpp
msgid "Random input"
-msgstr ""
+msgstr "Véletlenszerű bemenet"
#: src/settings_translation_file.cpp
msgid "Range select key"
@@ -5625,7 +5798,7 @@ msgstr "Látóterület választása gomb"
#: src/settings_translation_file.cpp
msgid "Recent Chat Messages"
-msgstr ""
+msgstr "Legutóbbi csevegésüzenetek"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5645,15 +5818,17 @@ msgid ""
"Remove color codes from incoming chat messages\n"
"Use this to stop players from being able to use color in their messages"
msgstr ""
+"Színkódok eltávolítása a bejövő csevegésüzenetekből\n"
+"Használd ezt hogy megakadályozd, hogy a játékosok színeket használjanak az "
+"üzeneteikben."
#: src/settings_translation_file.cpp
msgid "Replaces the default main menu with a custom one."
msgstr "Az alapértelmezett főmenüt lecseréli egy másikkal."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Report path"
-msgstr "Betűtípus helye"
+msgstr "Napló útvonala"
#: src/settings_translation_file.cpp
msgid ""
@@ -5691,37 +5866,31 @@ msgstr "Jobb gomb"
#: src/settings_translation_file.cpp
msgid "Rightclick repetition interval"
-msgstr "Jobb kattintás ismétlés időköz"
+msgstr "Jobb kattintás ismétlési időköz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel depth"
-msgstr "Folyó mélység"
+msgstr "Folyómeder mélysége"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel width"
-msgstr "Folyó mélység"
+msgstr "Folyómeder szélessége"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River depth"
msgstr "Folyó mélység"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River noise"
-msgstr "Barlang zaj"
+msgstr "Folyó zaj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River size"
msgstr "Folyó méret"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River valley width"
-msgstr "Folyó mélység"
+msgstr "Folyóvölgy szélessége"
#: src/settings_translation_file.cpp
msgid "Rollback recording"
@@ -5729,19 +5898,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Rolling hill size noise"
-msgstr ""
+msgstr "Dombok méret zaja"
#: src/settings_translation_file.cpp
msgid "Rolling hills spread noise"
-msgstr ""
+msgstr "Dombok kiterjedés zaja"
#: src/settings_translation_file.cpp
msgid "Round minimap"
-msgstr "Kör alakú minitérkép"
+msgstr "Kerek kistérkép"
#: src/settings_translation_file.cpp
msgid "Safe digging and placing"
-msgstr ""
+msgstr "Biztonságos ásás és elhelyezés"
#: src/settings_translation_file.cpp
msgid "Sandy beaches occur when np_beach exceeds this value."
@@ -5753,14 +5922,13 @@ msgstr "A kliens által fogadott térkép mentése lemezre."
#: src/settings_translation_file.cpp
msgid "Save window size automatically when modified."
-msgstr ""
+msgstr "Ablakméret automatikus mentése amikor módosítva van."
#: src/settings_translation_file.cpp
msgid "Saving map received from server"
msgstr "A szerverről fogadott térkép mentése"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Scale GUI by a user specified value.\n"
"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
@@ -5769,8 +5937,8 @@ msgid ""
"edge pixels when images are scaled by non-integer sizes."
msgstr ""
"A felhasználói felület méretezése egy meghatározott értékkel.\n"
-"A legközelebbi szomszédos anti-alias szűrőt használja a GUI méretezésére.\n"
-"Ez elsimít néhány durva élt, és elhajlít pixeleket a méretezés "
+"A legközelebbi-szomszéd-élsimítás szűrőt használja a GUI méretezésére.\n"
+"Ez elsimít néhány durva élt, és elhajlítja a pixeleket a méretezés "
"csökkentésekor,\n"
"de ennek az az ára, hogy elhomályosít néhány szélső pixelt, ha a képek nem\n"
"egész számok alapján vannak méretezve."
@@ -5807,7 +5975,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Seabed noise"
-msgstr ""
+msgstr "Folyómeder zaj"
#: src/settings_translation_file.cpp
msgid "Second of 4 2D noises that together define hill/mountain range height."
@@ -5836,7 +6004,7 @@ msgstr "Kijelölő doboz színe"
#: src/settings_translation_file.cpp
msgid "Selection box width"
-msgstr "Kijelölő doboz szélesség"
+msgstr "Kijelölő doboz szélessége"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5899,7 +6067,7 @@ msgstr "Szerver leírása"
#: src/settings_translation_file.cpp
msgid "Server name"
-msgstr "Szerver neve"
+msgstr "Szerver név"
#: src/settings_translation_file.cpp
msgid "Server port"
@@ -5927,79 +6095,73 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Set the maximum character length of a chat message sent by clients."
-msgstr ""
+msgstr "A csevegés maximális szöveghossza amelyet a kliensek küldhetnek."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
"A \"true\" beállítás engedélyezi a levelek hullámzását.\n"
-"A shaderek engedélyezése szükséges hozzá."
+"Az árnyalók engedélyezése szükséges hozzá."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
"A \"true\" beállítás engedélyezi a víz hullámzását.\n"
-"A shaderek engedélyezése szükséges hozzá."
+"Az árnyalók engedélyezése szükséges hozzá."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
"A \"true\" beállítás engedélyezi a növények hullámzását.\n"
-"A shaderek engedélyezése szükséges hozzá."
+"Az árnyalók engedélyezése szükséges hozzá."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Shader path"
-msgstr "Shaderek"
+msgstr "Ãrnyaló útvonala"
#: 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 ""
-"A shaderek fejlett vizuális effekteket engedélyeznek és növelhetik a "
+"Az árnyalók fejlett vizuális effekteket engedélyeznek és növelhetik a "
"teljesítményt néhány videókártya esetében.\n"
"Csak OpenGL-el működnek."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
-msgstr "Betűtípus árnyék eltolás, ha 0, akkor nem lesz árnyék rajzolva."
+msgstr "Betűtípus árnyékának eltolása. Ha 0, akkor nem lesz árnyék rajzolva."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
"be drawn."
-msgstr "Betűtípus árnyék eltolás, ha 0, akkor nem lesz árnyék rajzolva."
+msgstr ""
+"Tartalék betűtípus árnyékának eltolása. Ha 0, akkor nem lesz árnyék rajzolva."
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
msgstr ""
-"A minitérkép alakja. Engedélyezve (enabled) = kerek, letiltva (disabled) = "
+"A kistérkép alakja. Engedélyezve (enabled) = kerek, letiltva (disabled) = "
"négyzet."
#: src/settings_translation_file.cpp
msgid "Show debug info"
-msgstr "Hibakereső infó mutatása"
+msgstr "Hibakereső információ megjelenítése"
#: src/settings_translation_file.cpp
msgid "Show entity selection boxes"
-msgstr "Entitások kijelölő dobozának mutatása"
+msgstr "Entitások kijelölő dobozának megjelenítése"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6028,15 +6190,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Slope and fill work together to modify the heights."
-msgstr ""
+msgstr "A lejtés és a kitöltés együtt módosítja a magasságot."
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Kis barlangok maximális száma"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Kis barlangok minimális száma"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6057,12 +6219,11 @@ msgid ""
"Useful for recording videos."
msgstr ""
"Kamera mozgásának simítása mozgáskor és körbenézéskor.\n"
-"Videofelvételekhez hasznos."
+"Videófelvételekhez hasznos."
#: src/settings_translation_file.cpp
msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
-msgstr ""
-"A kamera forgását simítja a cinematic (filmkészítés) módban. 0 = letiltás."
+msgstr "A kamera forgását simítja filmszerű módban. 0 a letiltáshoz."
#: src/settings_translation_file.cpp
msgid "Smooths rotation of camera. 0 to disable."
@@ -6073,27 +6234,24 @@ msgid "Sneak key"
msgstr "Lopakodás gomb"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Sneaking speed"
-msgstr "Járás sebessége"
+msgstr "Lopakodás sebessége"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
-msgstr ""
+msgstr "Lopakodás sebessége node/másodpercben"
#: src/settings_translation_file.cpp
msgid "Sound"
msgstr "Hang"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Special key"
-msgstr "Lopakodás gomb"
+msgstr "Különleges gomb"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Special key for climbing/descending"
-msgstr "Gomb használat a mászás/ereszkedéshez"
+msgstr "Különleges gomb a mászáshoz/ereszkedéshez"
#: src/settings_translation_file.cpp
msgid ""
@@ -6105,6 +6263,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6112,11 +6277,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
-msgstr "Statikus feléledési (spawn) pont"
+msgstr "Statikus újraéledési pont"
#: src/settings_translation_file.cpp
msgid "Steepness noise"
-msgstr ""
+msgstr "Meredekség zaj"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6128,6 +6293,11 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "Generált normálfelületek erőssége."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Generált normálfelületek erőssége."
@@ -6139,15 +6309,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6156,17 +6336,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Temperature variation for biomes."
-msgstr ""
+msgstr "Hőmérséklet-változékonyság a biomokban."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Terrain alternative noise"
-msgstr "Terep magasság"
+msgstr "Terep alternatív zaj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Terrain base noise"
-msgstr "Terep magasság"
+msgstr "Terep alapzaj"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6174,14 +6352,12 @@ msgid "Terrain height"
msgstr "Terep magasság"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Terrain higher noise"
-msgstr "Terep magasság"
+msgstr "Terep legmagasabb zaj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Terrain noise"
-msgstr "Terep magasság"
+msgstr "Terepzaj"
#: src/settings_translation_file.cpp
msgid ""
@@ -6217,7 +6393,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
-msgstr ""
+msgstr "Az URL a tartalomtárhoz"
#: src/settings_translation_file.cpp
msgid ""
@@ -6236,7 +6412,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The identifier of the joystick to use"
-msgstr ""
+msgstr "A használni kívánt joystick azonosítója"
#: src/settings_translation_file.cpp
msgid "The length in pixels it takes for touch screen interaction to start."
@@ -6272,7 +6448,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6327,7 +6503,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The type of joystick"
-msgstr ""
+msgstr "A joystick típusa"
#: src/settings_translation_file.cpp
msgid ""
@@ -6371,9 +6547,9 @@ msgid ""
"This determines how long they are slowed down after placing or removing a "
"node."
msgstr ""
-"A lag (késés) csökkentéséért a blokkok lerakása le van lassítva, ha a "
+"A lag (késés) csökkentéséért a node-ok lerakása le van lassítva, ha a "
"játékos épít valamit.\n"
-"Ez azt határozza meg, hogy mennyire van lelassítva blokkok elhelyezésekor, "
+"Ez azt határozza meg, hogy mennyire van lelassítva node-ok elhelyezésekor, "
"vagy eltávolításakor."
#: src/settings_translation_file.cpp
@@ -6385,17 +6561,16 @@ msgid "Tooltip delay"
msgstr "Eszköztipp késleltetés"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Touch screen threshold"
-msgstr "Tengerpart zaj határa"
+msgstr "Érintőképernyő küszöbe"
#: src/settings_translation_file.cpp
msgid "Trees noise"
-msgstr ""
+msgstr "Fa zaj"
#: src/settings_translation_file.cpp
msgid "Trilinear filtering"
-msgstr "Tri-lineáris szűrés"
+msgstr "Trilineáris szűrés"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6431,8 +6606,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Unlimited player transfer distance"
-msgstr ""
+msgstr "Korlátlan játékosátviteli távolság"
#: src/settings_translation_file.cpp
msgid "Unload unused server data"
@@ -6440,11 +6616,16 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Upper Y limit of dungeons."
-msgstr ""
+msgstr "A tömlöcök felső Y határa."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "A tömlöcök felső Y határa."
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
-msgstr "3D felhő kinézet használata lapos helyett."
+msgstr "3D felhők használata lapos helyett."
#: src/settings_translation_file.cpp
msgid "Use a cloud animation for the main menu background."
@@ -6452,7 +6633,7 @@ msgstr "Felhő animáció használata a főmenü háttereként."
#: src/settings_translation_file.cpp
msgid "Use anisotropic filtering when viewing at textures from an angle."
-msgstr "Anizotropikus szűrés használata, ha egy szögből nézzük a textúrákat."
+msgstr "Anizotróp szűrés használata, ha egy szögből nézzük a textúrákat."
#: src/settings_translation_file.cpp
msgid "Use bilinear filtering when scaling textures."
@@ -6475,7 +6656,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "VSync"
-msgstr ""
+msgstr "Függőleges szinkron"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6483,9 +6664,8 @@ msgid "Valley depth"
msgstr "Völgyek mélysége"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Valley fill"
-msgstr "Völgyek meredeksége"
+msgstr "Völgyek kitöltése"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6499,7 +6679,7 @@ msgstr "Völgyek meredeksége"
#: src/settings_translation_file.cpp
msgid "Variation of biome filler depth."
-msgstr ""
+msgstr "A biom töltőanyag mélységének változékonysága."
#: src/settings_translation_file.cpp
msgid "Variation of maximum mountain height (in nodes)."
@@ -6507,7 +6687,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Variation of number of caves."
-msgstr ""
+msgstr "A barlangok számának változása."
#: src/settings_translation_file.cpp
msgid ""
@@ -6526,13 +6706,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Varies steepness of cliffs."
-msgstr "A dombok meredekségét/magasságát állítja."
+msgstr "A szirtek meredekségét állítja."
#: src/settings_translation_file.cpp
msgid "Vertical climbing speed, in nodes per second."
-msgstr ""
+msgstr "Függőleges mászási sebesség node/másodpercben."
#: src/settings_translation_file.cpp
msgid "Vertical screen synchronization."
@@ -6547,23 +6726,20 @@ msgid "View bobbing factor"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "View distance in nodes."
-msgstr ""
-"Látótávolság blokkokban megadva.\n"
-"Min = 20"
+msgstr "Látótávolság node-okban megadva."
#: src/settings_translation_file.cpp
msgid "View range decrease key"
-msgstr "Látóterület csökkentés gomb"
+msgstr "Látóterület csökkentése gomb"
#: src/settings_translation_file.cpp
msgid "View range increase key"
-msgstr "Látóterület növelés gomb"
+msgstr "Látóterület növelése gomb"
#: src/settings_translation_file.cpp
msgid "View zoom key"
-msgstr ""
+msgstr "Nagyítás gomb"
#: src/settings_translation_file.cpp
msgid "Viewing range"
@@ -6597,15 +6773,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
-msgstr ""
+msgstr "Sétálás, repülés és mászás sebessége gyors módban node/másodpercben."
#: src/settings_translation_file.cpp
msgid "Walking speed"
-msgstr "Járás sebessége"
+msgstr "Sétálás sebessége"
#: src/settings_translation_file.cpp
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
-msgstr ""
+msgstr "Sétálás, repülés és mászás sebessége gyors módban node/másodpercben."
#: src/settings_translation_file.cpp
msgid "Water level"
@@ -6617,31 +6793,27 @@ msgstr "A világ vízfelszínének szintje."
#: src/settings_translation_file.cpp
msgid "Waving Nodes"
-msgstr "Hullámzó blokkok"
+msgstr "Hullámzó node-ok"
#: src/settings_translation_file.cpp
msgid "Waving leaves"
msgstr "Hullámzó levelek"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
msgstr "Hullámzó folyadékok"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Hullámzó víz magassága"
+msgstr "Hullámzó folyadékok hullámmagassága"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
-msgstr "Hullámzó víz sebessége"
+msgstr "Hullámzó folyadékok hullámsebessége"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "Hullámzó víz szélessége"
+msgstr "Hullámzó folyadékok hullámhossza"
#: src/settings_translation_file.cpp
msgid "Waving plants"
@@ -6697,7 +6869,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Whether to allow players to damage and kill each other."
-msgstr "Engedélyezve van-e, hogy a játékosok sebezzék, ill. megöljék egymást."
+msgstr "Engedélyezve van-e, hogy a játékosok sebezzék és megöljék egymást."
#: src/settings_translation_file.cpp
msgid ""
@@ -6722,16 +6894,16 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
-msgstr "A hibakereső infó mutatása (ugyanaz a hatás, ha F5-öt nyomunk)."
+msgstr ""
+"A hibakereső információ megjelenítése (ugyanaz a hatás, ha F5-öt nyomunk)."
#: src/settings_translation_file.cpp
msgid "Width component of the initial window size."
-msgstr "Kezdeti ablak méret szélessége."
+msgstr "Kezdeti ablak szélessége."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Width of the selection box lines around nodes."
-msgstr "A kijelölődoboz vonalainak szélessége a blokkok körül."
+msgstr "A kijelölésdoboz vonalainak szélessége a node-ok körül."
#: src/settings_translation_file.cpp
msgid ""
@@ -6739,19 +6911,22 @@ msgid ""
"background.\n"
"Contains the same information as the file debug.txt (default name)."
msgstr ""
+"Csak Windows rendszeren: Minetest indítása parancssorral a háttérben.\n"
+"Ugyanazokat az információkat tartalmazza, mint a debug.txt fájl ("
+"alapértelmezett név)."
#: src/settings_translation_file.cpp
msgid ""
"World directory (everything in the world is stored here).\n"
"Not needed if starting from the main menu."
msgstr ""
-"Világ (world) mappa (minden itt tárolódik ami a világban van).\n"
-"Ez nem szükséges, ha a főmenüből indítunk."
+"Világ mappája (minden itt tárolódik ami a világban van).\n"
+"Ez nem szükséges, ha a főmenüből indítják."
#: src/settings_translation_file.cpp
#, fuzzy
msgid "World start time"
-msgstr "Világ neve"
+msgstr "Világ-kezdőidő"
#: src/settings_translation_file.cpp
msgid ""
@@ -6769,7 +6944,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Y of flat ground."
-msgstr ""
+msgstr "Lapos föld Y magassága."
#: src/settings_translation_file.cpp
msgid ""
@@ -6778,37 +6953,44 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Y of upper limit of large caves."
-msgstr "A világgeneráló szálak számának abszolút határa"
+msgstr "Nagy barlangok felső Y határa."
#: src/settings_translation_file.cpp
msgid "Y-distance over which caverns expand to full size."
+msgstr "Y-távolság, amelyen az üregek teljes méretre kinyúlnak."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
msgstr ""
#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
-msgstr ""
+msgstr "A terep átlagos Y szintje."
#: src/settings_translation_file.cpp
msgid "Y-level of cavern upper limit."
-msgstr ""
+msgstr "Az üregek felső Y határa."
#: src/settings_translation_file.cpp
msgid "Y-level of higher terrain that creates cliffs."
-msgstr ""
+msgstr "Magas terep Y szintje amely szirteket hoz létre."
#: src/settings_translation_file.cpp
msgid "Y-level of lower terrain and seabed."
-msgstr ""
+msgstr "Alacsony terep és tengerfenék Y szintje."
#: src/settings_translation_file.cpp
msgid "Y-level of seabed."
-msgstr ""
+msgstr "Tengerfenék Y szintje."
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
-msgstr "cURL fájlletöltés időkorlátja"
+msgstr "cURL fájlletöltés időkorlát"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
@@ -6816,7 +6998,7 @@ msgstr "cURL párhuzamossági korlát"
#: src/settings_translation_file.cpp
msgid "cURL timeout"
-msgstr "cURL időkorlátja"
+msgstr "cURL időkorlát"
#~ msgid "Toggle Cinematic"
#~ msgstr "Váltás „mozi†módba"
@@ -6862,17 +7044,6 @@ msgstr "cURL időkorlátja"
#~ msgstr "Lebegő hegyek magassága"
#, fuzzy
-#~ msgid "Floatland mountain density"
-#~ msgstr "Lebegő hegyek sűrűsége"
-
-#~ msgid "Floatland level"
-#~ msgstr "Lebegő föld szintje"
-
-#, fuzzy
-#~ msgid "Floatland base noise"
-#~ msgstr "A lebegő hegyek alapzaja"
-
-#, fuzzy
#~ msgid "Floatland base height noise"
#~ msgstr "A lebegő hegyek alapmagassága"
@@ -6913,3 +7084,15 @@ msgstr "cURL időkorlátja"
#~ "Gamma kódolás beállítása a fényhez. Alacsonyabb számok - nagyobb "
#~ "fényerő.\n"
#~ "Ez a beállítás csak a kliensre érvényes, a szerver nem veszi figyelembe."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Képernyőmentések mappája."
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "$1 letöltése és telepítése, kérlek várj…"
+
+#~ msgid "Back"
+#~ msgstr "Vissza"
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
diff --git a/po/id/minetest.po b/po/id/minetest.po
index 970a5423c..21fd705bb 100644
--- a/po/id/minetest.po
+++ b/po/id/minetest.po
@@ -2,9 +2,10 @@ msgid ""
msgstr ""
"Project-Id-Version: Indonesian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2020-01-06 03:21+0000\n"
-"Last-Translator: Dhimas Wnz <dhi.mas26wnz@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-25 16:39+0000\n"
+"Last-Translator: Muhammad Rifqi Priyo Susanto "
+"<muhammadrifqipriyosusanto@gmail.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/minetest/"
"minetest/id/>\n"
"Language: id\n"
@@ -12,7 +13,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 3.10\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,9 +23,13 @@ msgstr "Bangkit kembali"
msgid "You died"
msgstr "Anda mati"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "Oke"
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
-msgstr "Kesalahan terjadi pada suatu skrip Lua:"
+msgstr "Suatu galat terjadi pada suatu skrip Lua:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -35,10 +40,6 @@ msgid "Main menu"
msgstr "Menu utama"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Oke"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Sambung ulang"
@@ -87,7 +88,7 @@ msgstr "Batal"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr "Bergantung pada:"
+msgstr "Dependensi:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
@@ -114,32 +115,36 @@ msgstr ""
"karakter [a-z0-9_] yang dibolehkan."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Cari Mod Lainnya"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr "Tidak ada dependensi (opsional)"
+msgstr "Tiada dependensi (opsional)"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr "Tidak ada penjelasan permainan yang tersedia."
+msgstr "Tiada keterangan permainan yang tersedia."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "Tidak ada dependensi yang sulit (keterkaitan dengan mod lain)"
+msgstr "Tiada dependensi wajib"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "Tidak ada penjelasan paket mod yang tersedia."
+msgstr "Tiada keterangan paket mod yang tersedia."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr "Tidak ada dependensi opsional"
+msgstr "Tiada dependensi opsional"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr "Tidak harus bergantung pada:"
+msgstr "Dependensi opsional:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
@@ -152,23 +157,23 @@ msgstr "Dunia:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "diaktifkan"
+msgstr "dinyalakan"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Semua paket"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Kembali"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Kembali ke menu utama"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Mengunduh dan memasang $1, mohon tunggu..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "ContentDB tidak tersedia ketika Minetest tidak dikompilasi dengan cURL"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "Mengunduh..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -190,11 +195,11 @@ msgstr "Mod"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr "Tidak ada paket yang dapat diambil"
+msgstr "Tiada paket yang dapat diambil"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
-msgstr "Tidak ada hasil"
+msgstr "Tiada hasil"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
@@ -213,33 +218,145 @@ msgstr "Copot"
msgid "Update"
msgstr "Perbarui"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Tinjau"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Dunia yang bernama \"$1\" telah ada"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "Medan tambahan"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Dingin di ketinggian"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "Kering di ketinggian"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Pemaduan bioma"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Bioma"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Gua besar"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "Gua"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Buat"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "Dekorasi"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Unduh sebuah permainan, misalnya Minetest Game, dari minetest.net"
+msgstr "Unduh suatu permainan, misalnya Minetest Game, dari minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr "Unduh satu dari minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "Dungeon"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "Medan datar"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Tanah mengambang di langit"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "Floatland (uji coba)"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Permainan"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "Buat medan nonfraktal: Samudra dan bawah tanah"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Bukit"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Sungai lembap"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Tambah kelembapan di sekitar sungai"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Danau"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "Kelembapan rendah dan suhu tinggi membuat sungai dangkal atau kering"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Pembuat peta"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Flag pembuat peta"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Flag khusus pembuat peta"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "Pegunungan"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "Aliran tanah"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Jaringan terowongan dan gua"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
-msgstr "Tidak ada permainan yang dipilih"
+msgstr "Tiada permainan yang dipilih"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Mengurangi suhu di ketinggian"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Mengurangi kelembapan di ketinggian"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Sungai"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Sungai setinggi permukaan laut"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -247,8 +364,52 @@ msgid "Seed"
msgstr "Seed"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
-msgstr "Peringatan: Minimal development test ditujukan untuk pengembang."
+msgid "Smooth transition between biomes"
+msgstr "Pergantian halus antarbioma"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+"Struktur muncul pada permukaan (tidak berdampak pada pohon dan rumput hutan "
+"rimba yang dibuat oleh v6)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "Struktur muncul pada permukaan, biasanya pohon dan tanaman"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Iklim Sedang, Gurun"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Iklim Sedang, Gurun, Hutan Rimba"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "Iklim Sedang, Gurun, Hutan Rimba, Tundra, Taiga"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "Erosi permukaan medan"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "Pohon dan rumput hutan rimba"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Variasi kedalaman sungai"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "Gua sangat besar di kedalaman bawah tanah"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr "Peringatan: Development Test ditujukan untuk para pengembang."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -270,7 +431,7 @@ msgstr "Hapus"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "pkgmgr: gagal untuk menghapus \"$1\""
+msgstr "pkgmgr: gagal menghapus \"$1\""
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
@@ -294,11 +455,11 @@ msgid ""
"override any renaming here."
msgstr ""
"Paket mod ini memiliki nama tersurat yang diberikan dalam modpack.conf yang "
-"akan menimpa penamaan ulang yang ada."
+"akan menimpa penggantian nama yang ada."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr "(Tidak ada keterangan pengaturan yang diberikan)"
+msgstr "(Tiada keterangan pengaturan yang diberikan)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
@@ -322,15 +483,15 @@ msgstr "Sunting"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
-msgstr "Diaktifkan"
+msgstr "Dinyalakan"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
-msgstr "Lacunarity (celah)"
+msgstr "Lakuna (celah)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
-msgstr "Oktav"
+msgstr "Oktaf"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
@@ -400,14 +561,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Persebaran Z"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr "Nilai mutlak"
+msgstr "nilai mutlak"
+#. ~ "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 "bawaan"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "kehalusan (eased)"
@@ -422,7 +594,7 @@ msgstr "$1 mod"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "Gagal untuk memasang $1 ke $2"
+msgstr "Gagal memasang $1 ke $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
@@ -488,7 +660,7 @@ msgstr "Tidak bergantung pada mod lain."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr "Tidak ada penjelasan paket tersedia"
+msgstr "Tiada keterangan paket tersedia"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
@@ -540,19 +712,23 @@ msgstr "Mode Kreatif"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
msgid "Enable Damage"
-msgstr "Nyalakan kerusakan"
+msgstr "Nyalakan Kerusakan"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr "Host permainan"
+msgstr "Host Permainan"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr "Host peladen"
+msgstr "Host Server"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "Pasang permainan dari ContentDB"
#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
-msgstr "Nama/Kata sandi"
+msgstr "Nama/Kata Sandi"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -560,11 +736,11 @@ msgstr "Baru"
#: builtin/mainmenu/tab_local.lua
msgid "No world created or selected!"
-msgstr "Tidak ada dunia yang dibuat atau dipilih!"
+msgstr "Tiada dunia yang dibuat atau dipilih!"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
-msgstr "Mainkan permainan"
+msgstr "Mainkan Permainan"
#: builtin/mainmenu/tab_local.lua
msgid "Port"
@@ -572,7 +748,7 @@ msgstr "Porta"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
-msgstr "Pilih dunia:"
+msgstr "Pilih Dunia:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
@@ -580,7 +756,7 @@ msgstr "Port Server"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
-msgstr "Mulai permainan"
+msgstr "Mulai Permainan"
#: builtin/mainmenu/tab_online.lua
msgid "Address / Port"
@@ -608,16 +784,17 @@ msgstr "Favorit"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
-msgstr "Gabung permainan"
+msgstr "Gabung Permainan"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Name / Password"
-msgstr "Nama/Kata sandi"
+msgstr "Nama/Kata Sandi"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP dinyalakan"
@@ -640,7 +817,7 @@ msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
msgid "All Settings"
-msgstr "Semua pengaturan"
+msgstr "Semua Pengaturan"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
@@ -652,31 +829,31 @@ msgstr "Apakah Anda yakin ingin mengatur ulang dunia Anda?"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr "Autosimpan Ukuran Layar"
+msgstr "Simpan Ukuran Layar"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr "Filter bilinear"
+msgstr "Filter Bilinear"
#: builtin/mainmenu/tab_settings.lua
msgid "Bump Mapping"
-msgstr "Bump mapping"
+msgstr "Bump Mapping"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
-msgstr "Ubah tombol"
+msgstr "Ubah Tombol"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr "Kaca tersambung"
+msgstr "Kaca Tersambung"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr "Daun megah"
+msgstr "Daun Megah"
#: builtin/mainmenu/tab_settings.lua
msgid "Generate Normal Maps"
-msgstr "Buat normal maps"
+msgstr "Buat Normal Maps"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
@@ -684,7 +861,7 @@ msgstr "Mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr "Filter aniso. + Mipmap"
+msgstr "Filter Aniso. + Mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "No"
@@ -692,19 +869,19 @@ msgstr "Tidak"
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr "Tanpa filter"
+msgstr "Tanpa Filter"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
-msgstr "Tanpa mipmap"
+msgstr "Tanpa Mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr "Sorot Node"
+msgstr "Sorot Nodus"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr "Garis bentuk nodus"
+msgstr "Garis Bentuk Nodus"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
@@ -712,11 +889,11 @@ msgstr "Tidak ada"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
-msgstr "Daun opak"
+msgstr "Daun Opak"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
-msgstr "Air opak"
+msgstr "Air Opak"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Parallax Occlusion"
@@ -748,7 +925,7 @@ msgstr "Shader (tidak tersedia)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
-msgstr "Daun sederhana"
+msgstr "Daun Sederhana"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
@@ -764,15 +941,15 @@ 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 "Tone Mapping"
#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold: (px)"
-msgstr "Batas sentuhan: (px)"
+msgstr "Batas Sentuhan: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
-msgstr "Filter trilinear"
+msgstr "Filter Trilinear"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
@@ -780,7 +957,7 @@ msgstr "Daun Melambai"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
-msgstr "Laimbaian Cairan"
+msgstr "Air Berombak"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
@@ -800,7 +977,7 @@ msgstr "Beranda"
#: builtin/mainmenu/tab_simple_main.lua
msgid "Start Singleplayer"
-msgstr "Mulai pemain tunggal"
+msgstr "Mulai Pemain Tunggal"
#: src/client/client.cpp
msgid "Connection timed out."
@@ -844,7 +1021,7 @@ msgstr "Menu Utama"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr "Tidak ada dunia yang dipilih dan tidak ada alamat yang diberikan."
+msgstr "Tiada dunia yang dipilih dan tiada alamat yang diberikan."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
@@ -862,6 +1039,14 @@ msgstr "Berkas kata sandi yang diberikan gagal dibuka: "
msgid "Provided world path doesn't exist: "
msgstr "Jalur dunia yang diberikan tidak ada: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -880,7 +1065,7 @@ msgstr "- Alamat: "
#: src/client/game.cpp
msgid "- Creative Mode: "
-msgstr "- Mode kreatif: "
+msgstr "- Mode Kreatif: "
#: src/client/game.cpp
msgid "- Damage: "
@@ -898,13 +1083,14 @@ msgstr "- Porta: "
msgid "- Public: "
msgstr "- Publik: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr "- Nama peladen: "
+msgstr "- Nama Server: "
#: src/client/game.cpp
msgid "Automatic forward disabled"
@@ -940,7 +1126,7 @@ msgstr "Skrip sisi klien dimatikan"
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr "Menyambung ke peladen..."
+msgstr "Menyambung ke server..."
#: src/client/game.cpp
msgid "Continue"
@@ -985,7 +1171,7 @@ msgstr "Membuat klien..."
#: src/client/game.cpp
msgid "Creating server..."
-msgstr "Membuat peladen..."
+msgstr "Membuat server..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
@@ -1037,11 +1223,11 @@ msgstr "Nyalakan jarak pandang tak terbatas"
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr "Menu utama"
+msgstr "Menu Utama"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr "Tutup aplikasi"
+msgstr "Tutup Aplikasi"
#: src/client/game.cpp
msgid "Fast mode disabled"
@@ -1053,7 +1239,7 @@ msgstr "Mode cepat dinyalakan"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr "Mode cepat dinyalakan (catatan: tanpa izin \"fast\")"
+msgstr "Mode cepat dinyalakan (catatan: tanpa hak \"fast\")"
#: src/client/game.cpp
msgid "Fly mode disabled"
@@ -1065,7 +1251,7 @@ msgstr "Mode terbang dinyalakan"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr "Mode terbang dinyalakan (catatan: tanpa izin \"fly\")"
+msgstr "Mode terbang dinyalakan (catatan: tanpa hak \"fly\")"
#: src/client/game.cpp
msgid "Fog disabled"
@@ -1085,7 +1271,7 @@ msgstr "Permainan dijeda"
#: src/client/game.cpp
msgid "Hosting server"
-msgstr "Membuat peladen"
+msgstr "Membuat server"
#: src/client/game.cpp
msgid "Item definitions..."
@@ -1145,7 +1331,7 @@ msgstr "Mode tembus blok dinyalakan"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr "Mode tembus blok dinyalakan (catatan: tanpa izin \"noclip\")"
+msgstr "Mode tembus blok dinyalakan (catatan: tanpa hak \"noclip\")"
#: src/client/game.cpp
msgid "Node definitions..."
@@ -1173,7 +1359,7 @@ msgstr "Grafik profiler ditampilkan"
#: src/client/game.cpp
msgid "Remote server"
-msgstr "Peladen jarak jauh"
+msgstr "Server jarak jauh"
#: src/client/game.cpp
msgid "Resolving address..."
@@ -1189,13 +1375,21 @@ msgstr "Pemain tunggal"
#: src/client/game.cpp
msgid "Sound Volume"
-msgstr "Volume suara"
+msgstr "Volume Suara"
#: src/client/game.cpp
msgid "Sound muted"
msgstr "Suara dibisukan"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "Sistem suara dimatikan"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "Sistem suara tidak didukung dalam buatan ini"
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Suara dibunyikan"
@@ -1227,7 +1421,7 @@ msgstr "Rangka kawat ditampilkan"
msgid "Zoom currently disabled by game or mod"
msgstr "Zum sedang dilarang oleh permainan atau mod"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "oke"
@@ -1348,6 +1542,7 @@ msgstr "Shift Kiri"
msgid "Left Windows"
msgstr "Windows Kiri"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menu"
@@ -1440,6 +1635,7 @@ msgstr "Pause"
msgid "Play"
msgstr "Play"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Print"
@@ -1476,6 +1672,7 @@ msgstr "Windows Kanan"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Select"
@@ -1522,7 +1719,7 @@ msgstr "Kata sandi tidak cocok!"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
-msgstr "Daftar dan gabung"
+msgstr "Daftar dan Gabung"
#: src/gui/guiConfirmRegistration.cpp
#, c-format
@@ -1533,10 +1730,10 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
-"Anda akan bergabung dengan server %1$s dengan nama \"%2$s\" untuk pertama "
-"kalinya. Jika Anda melanjutkan, akun baru yang telah Anda isikan akan dibuat "
-"pada server ini.\n"
-"Silakan ketik ulang kata sandi Anda dan klik Daftar dan gabung untuk "
+"Anda akan bergabung ke server dengan nama \"%s\" untuk pertama kalinya.\n"
+"Jika Anda melanjutkan, akun baru yang telah Anda isikan akan dibuat pada "
+"server ini.\n"
+"Silakan ketik ulang kata sandi Anda dan klik \"Daftar dan Gabung\" untuk "
"mengonfirmasi pembuatan akun atau klik Batal untuk membatalkan."
#: src/gui/guiFormSpecMenu.cpp
@@ -1682,9 +1879,8 @@ msgid "Toggle noclip"
msgstr "Tembus nodus"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
-msgstr "Alih log obrolan"
+msgstr "Gerak sesuai pandang"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -1716,12 +1912,17 @@ msgstr "Dibisukan"
#: src/gui/guiVolumeChange.cpp
msgid "Sound Volume: "
-msgstr "Volume suara: "
+msgstr "Volume Suara: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Masuk "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "id"
@@ -1732,8 +1933,7 @@ msgid ""
"If disabled, virtual joystick will center to first-touch's position."
msgstr ""
"(Android) Tetapkan posisi joystick virtual.\n"
-"Jika dimatikan, joystick virtual akan menengah kepada posisi sentuhan "
-"pertama."
+"Jika dimatikan, joystick virtual akan menengah di posisi sentuhan pertama."
#: src/settings_translation_file.cpp
msgid ""
@@ -1746,7 +1946,6 @@ msgstr ""
"berada di luar lingkaran utama."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1761,10 +1960,10 @@ msgstr ""
"Dapat digunakan untuk memindahkan titik yang diinginkan ke (0, 0)\n"
"untuk membuat titik bangkit atau untuk \"zum masuk\" pada titik yang\n"
"diinginkan dengan menaikkan \"scale\".\n"
-"Nilai bawaan telah diatur agar cocok untuk mandelbrot set dengan\n"
-"parameter bawaan, butuh diganti untuk keadaan lain.\n"
-"Jangkauan sekitar -2 ke 2. Kalikan dengan \"scale\" untuk pergeseran dalam\n"
-"nodus."
+"Nilai bawaan telah diatur agar cocok untuk Mandelbrot set dengan\n"
+"parameter bawaan, ini mungkin butuh diganti untuk keadaan lain.\n"
+"Jangkauan sekitar -2 ke 2. Kalikan dengan \"scale\" untuk pergeseran\n"
+"dalam satuan nodus."
#: src/settings_translation_file.cpp
msgid ""
@@ -1776,7 +1975,7 @@ msgid ""
"Default is for a vertically-squashed shape suitable for\n"
"an island, set all 3 numbers equal for the raw shape."
msgstr ""
-"Skala (X,Y,Z) dari fraktal dalam nodus.\n"
+"Skala (X,Y,Z) fraktal dalam nodus.\n"
"Ukuran fraktal sebenarnya bisa jadi 2 hingga 3 kali lebih besar.\n"
"Angka-angka ini dapat dibuat sangat besar, fraktal tidak harus\n"
"cukup di dalam dunia.\n"
@@ -1817,9 +2016,8 @@ msgid "2D noise that controls the size/occurrence of step mountain ranges."
msgstr "Noise 2D yang mengatur ukuran/kemunculan teras pegunungan."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "2D noise that locates the river valleys and channels."
-msgstr "Noise 2D yang mengatur bentuk/ukuran perbukitan."
+msgstr "Noise 2D yang mengatur letak sungai dan kanal."
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -1830,6 +2028,10 @@ msgid "3D mode"
msgstr "Mode 3D"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr "Kekuatan mode paralaks 3D"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "Noise 3D yang mengatur gua besar."
@@ -1842,6 +2044,18 @@ msgstr ""
"Juga mengatur struktur dari medan gunung floatland."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+"Noise 3D yang membentuk struktur floatland.\n"
+"Jika diubah dari bawaan, skala noise (bawaannya 0.7) mungkin butuh\n"
+"disesuaikan karena fungsi penirus floatland berfungsi baik ketika\n"
+"noise ini bernilai antara -2.0 hingga 2.0."
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "Noise 3D yang mengatur struktur dari dinding ngarai sungai."
@@ -1856,7 +2070,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "Noise 3D yang mengatur jumlah dungeon per mapchunk."
#: src/settings_translation_file.cpp
msgid ""
@@ -1874,7 +2088,7 @@ msgstr ""
"Dukungan 3D.\n"
"Yang didukung saat ini:\n"
"- none: tidak ada keluaran 3d.\n"
-"- anaglyph: 3d berwarna cyan/magenta.\n"
+"- anaglyph: 3d berwarna sian/magenta.\n"
"- interlaced: garis ganjil/genap berdasarkan polarisasi layar.\n"
"- topbottom: pisahkan layar atas/bawah.\n"
"- sidebyside: pisahkan layar kiri/kanan.\n"
@@ -1888,25 +2102,24 @@ msgid ""
"Will be overridden when creating a new world in the main menu."
msgstr ""
"Seed peta terpilih untuk peta baru, kosongkan untuk nilai acak.\n"
-"Akan diganti ketika menciptakan dunia baru dalam menu utama."
+"Akan diganti ketika menciptakan dunia baru lewat menu utama."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr ""
-"Sebuah pesan yang akan ditampilkan ke semua klien ketika peladen gagal."
+msgstr "Sebuah pesan yang akan ditampilkan ke semua klien ketika server gagal."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
msgstr ""
-"Sebuah pesan yang akan ditampilkan ke semua klien ketika peladen dimatikan."
+"Sebuah pesan yang akan ditampilkan ke semua klien ketika server dimatikan."
#: src/settings_translation_file.cpp
msgid "ABM interval"
msgstr "Selang waktu ABM"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
-msgstr "Batas mutlak dari antrean kemunculan (emerge queues)"
+msgid "Absolute limit of queued blocks to emerge"
+msgstr "Batas mutlak antrean kemunculan blok"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -1914,7 +2127,7 @@ msgstr "Percepatan di udara"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr ""
+msgstr "Percepatan gravitasi dalam nodus per detik per detik."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
@@ -1939,7 +2152,7 @@ msgid ""
"Note that the address field in the main menu overrides this setting."
msgstr ""
"Alamat tujuan sambungan.\n"
-"Biarkan kosong untuk memulai sebuah peladen lokal.\n"
+"Biarkan kosong untuk memulai sebuah server lokal.\n"
"Perhatikan bahwa bidang alamat dalam menu utama menimpa pengaturan ini."
#: src/settings_translation_file.cpp
@@ -1951,10 +2164,25 @@ msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
-"Atur konfigurasi dpi ke layar Anda (selain X11/Android saja) misalkan untuk "
+"Atur konfigurasi dpi ke layar Anda (selain X11/Android saja) misalnya untuk "
"layar 4K."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+"Sesuaikan kepadatan lapisan floatland.\n"
+"Tambahkan nilai untuk menambah kepadatan. Dapat positif atau negatif.\n"
+"Nilai = 0.0: 50% volume adalah floatland.\n"
+"Nilai = 2.0 (dapat lebih tinggi tergantung 'mgv7_np_floatland', selalu uji\n"
+"terlebih dahulu) membuat lapisan floatland padat (penuh)."
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Lanjutan"
@@ -1966,10 +2194,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Dingin di ketinggian"
+"Ubah kurva cahaya dengan menerapkan penyesuaian gama.\n"
+"Nilai yang lebih tinggi menerangkan tingkatan cahaya rendah\n"
+"dan menengah. Nilai \"1.0\" membiarkan kurva cahaya seperti\n"
+"asalnya. Ini hanya berpengaruh kepada cahaya siang dan cahaya\n"
+"buatan. Ini punya pengaruh kecil kepada cahaya malam alami."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -1997,7 +2226,7 @@ msgstr "Umumkan server"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr "Umumkan ke daftar peladen ini."
+msgstr "Umumkan ke daftar server ini."
#: src/settings_translation_file.cpp
msgid "Append item name"
@@ -2041,12 +2270,13 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
-"Pada jarak ini, peladen akan melakukan optimasi dengan agresif tentang blok\n"
-"yang dikirim kepada klien.\n"
-"Nilai yang kecil dapat meningkatkan banyak performa dengan glitch pada\n"
-"tampilan (beberapa blok di bawah air dan dalam gua tidak akan digambar,\n"
+"Pada jarak ini, server akan melakukan optimasi dengan agresif terhadap\n"
+"blok yang dikirim kepada klien.\n"
+"Nilai yang kecil dapat meningkatkan kinerja dengan glitch pada tampilan\n"
+"(beberapa blok di bawah air dan dalam gua tidak akan digambar,\n"
"terkadang juga di darat).\n"
-"Nilai yang lebih besar daripada max_block_send_distance mematikan ini.\n"
+"Nilai yang lebih besar daripada max_block_send_distance mematikan\n"
+"optimasi ini.\n"
"Dalam satuan blok peta (16 nodus)."
#: src/settings_translation_file.cpp
@@ -2059,7 +2289,7 @@ msgstr "Lompati otomatis halangan satu nodus."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr "Secara otomatis melaporkan ke daftar peladen."
+msgstr "Secara otomatis melaporkan ke daftar server ini."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
@@ -2087,7 +2317,7 @@ msgstr "Dasar"
#: src/settings_translation_file.cpp
msgid "Basic privileges"
-msgstr "Izin dasar"
+msgstr "Hak-hak dasar"
#: src/settings_translation_file.cpp
msgid "Beach noise"
@@ -2122,24 +2352,20 @@ msgid "Block send optimize distance"
msgstr "Jarak optimasi pengiriman blok"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Jalur fon monospace"
+msgstr "Jalur fon tebal dan miring"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Jalur fon monospace"
+msgstr "Jalur fon monospace tebal dan miring"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Jalur fon"
+msgstr "Jalur fon tebal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Jalur fon monospace"
+msgstr "Jalur fon monospace tebal"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2154,15 +2380,14 @@ msgid "Bumpmapping"
msgstr "Bumpmapping"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
"Jarak bidang dekat kamera dalam nodus, antara 0 dan 0.5\n"
-"Kebanyakan pengguna tidak perlu mengganti ini.\n"
+"Hanya untuk GLES. Kebanyakan pengguna tidak perlu mengganti ini.\n"
"Menaikkan nilai dapat mengurangi cacat pada GPU yang lebih lemah.\n"
"0.1 = Bawaan, 0.25 = Bagus untuk tablet yang lebih lemah."
@@ -2212,7 +2437,7 @@ msgstr "Noise #1 gua besar"
#: src/settings_translation_file.cpp
msgid "Cavern taper"
-msgstr "Gua lancip"
+msgstr "Kelancipan gua"
#: src/settings_translation_file.cpp
msgid "Cavern threshold"
@@ -2227,6 +2452,8 @@ msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Pertengahan rentang penguatan kurva cahaya.\n"
+"Nilai 0.0 adalah minimum, 1.0 adalah maksimum."
#: src/settings_translation_file.cpp
msgid ""
@@ -2243,17 +2470,24 @@ msgstr ""
"tekstur. Cocok untuk layar kecil."
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr "Ukuran fon obrolan"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Tombol obrolan"
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr "Tingkat log obrolan"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "Batas jumlah pesan obrolan"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
-msgstr "Panjang maksimum pesan obrolan"
+msgstr "Format pesan obrolan"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
@@ -2293,7 +2527,7 @@ msgstr "Klien"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr "Klien dan peladen"
+msgstr "Klien dan Server"
#: src/settings_translation_file.cpp
msgid "Client modding"
@@ -2301,7 +2535,7 @@ msgstr "Mod klien"
#: src/settings_translation_file.cpp
msgid "Client side modding restrictions"
-msgstr "Batasan mod sisi klien"
+msgstr "Pembatasan mod sisi klien"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
@@ -2309,7 +2543,7 @@ msgstr "Batas jangkauan pencarian nodus sisi klien"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
-msgstr "Kecepatan memanjat"
+msgstr "Kelajuan memanjat"
#: src/settings_translation_file.cpp
msgid "Cloud radius"
@@ -2378,7 +2612,7 @@ msgstr "Sambungkan kaca"
#: src/settings_translation_file.cpp
msgid "Connect to external media server"
-msgstr "Sambungkan ke peladen media eksternal"
+msgstr "Sambungkan ke server media eksternal"
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
@@ -2433,7 +2667,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
-msgstr ""
+msgstr "Atur kelajuan tenggelam dalam cairan."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2449,10 +2683,13 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Atur lebah terowongan, nilai yang lebih kecil melebarkan terowongan.\n"
+"Nilai >= 10.0 mematikan terowongan dan menghindari perhitungan\n"
+"noise intensif."
#: src/settings_translation_file.cpp
msgid "Crash message"
-msgstr "Pesan kerusakan"
+msgstr "Pesan crash"
#: src/settings_translation_file.cpp
msgid "Creative"
@@ -2487,9 +2724,8 @@ msgid "Debug info toggle key"
msgstr "Tombol info awakutu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Debug log file size threshold"
-msgstr "Ambang batas noise gurun"
+msgstr "Ambang batas ukuran log awakutu"
#: src/settings_translation_file.cpp
msgid "Debug log level"
@@ -2501,11 +2737,11 @@ msgstr "Tombol turunkan volume"
#: src/settings_translation_file.cpp
msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgstr "Turunkan ini untuk menaikkan ketahanan cairan terhadap gerakan."
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
-msgstr "Langkah peladen khusus"
+msgstr "Langkah server khusus"
#: src/settings_translation_file.cpp
msgid "Default acceleration"
@@ -2521,7 +2757,7 @@ msgid ""
"This will be overridden when creating a world from the main menu."
msgstr ""
"Permainan bawaan saat membuat dunia baru.\n"
-"Ini akan diganti saat membuat dunia dari menu utama."
+"Ini akan diganti saat membuat dunia lewat menu utama."
#: src/settings_translation_file.cpp
msgid "Default password"
@@ -2529,13 +2765,17 @@ msgstr "Kata sandi bawaan"
#: src/settings_translation_file.cpp
msgid "Default privileges"
-msgstr "Izin bawaan"
+msgstr "Hak-hak bawaan"
#: src/settings_translation_file.cpp
msgid "Default report format"
msgstr "Format laporan bawaan"
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr "Ukuran tumpukan bawaan"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2562,12 +2802,11 @@ msgstr "Mengatur persebaran medan yang lebih tinggi."
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
msgstr ""
-"Mengatur ukuran penuh dari gua besar, nilai yang lebih kecil membuat gua "
-"yang lebih besar."
+"Mengatur ukuran penuh gua besar, nilai yang lebih kecil memperbesar gua."
#: src/settings_translation_file.cpp
msgid "Defines large-scale river channel structure."
-msgstr "Menetapkan struktur saluran sungai skala besar."
+msgstr "Menetapkan struktur kanal sungai skala besar."
#: src/settings_translation_file.cpp
msgid "Defines location and terrain of optional hills and lakes."
@@ -2578,7 +2817,7 @@ msgid ""
"Defines sampling step of texture.\n"
"A higher value results in smoother normal maps."
msgstr ""
-"Menentukan tahap sampling tekstur.\n"
+"Menentukan langkah penyampelan tekstur.\n"
"Nilai lebih tinggi menghasilkan peta lebih halus."
#: src/settings_translation_file.cpp
@@ -2586,9 +2825,8 @@ msgid "Defines the base ground level."
msgstr "Mengatur ketinggian dasar tanah."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the depth of the river channel."
-msgstr "Mengatur ketinggian dasar tanah."
+msgstr "Mengatur kedalaman kanal sungai."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
@@ -2596,14 +2834,12 @@ msgstr ""
"Menentukan jarak maksimal perpindahan pemain dalam blok (0 = tak terbatas)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river channel."
-msgstr "Menetapkan struktur saluran sungai skala besar."
+msgstr "Mengatur lebar kanal sungai."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river valley."
-msgstr "Menetapkan daerah tempat pohon punya apel."
+msgstr "Mengatur lebar ngarai sungai."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
@@ -2616,15 +2852,15 @@ msgid ""
msgstr ""
"Jeda antarpembaruan mesh pada klien dalam milidetik. Menaikkan nilai ini "
"akan\n"
-"memperlambat pembaruan mesh, sehingga mengurangi jitter pada klien lambat."
+"memperlambat pembaruan mesh sehingga mengurangi jitter pada klien lambat."
#: src/settings_translation_file.cpp
msgid "Delay in sending blocks after building"
-msgstr "Jeda dalam mengirim blok setelah membangun"
+msgstr "Jeda dalam pengiriman blok setelah membangun"
#: src/settings_translation_file.cpp
msgid "Delay showing tooltips, stated in milliseconds."
-msgstr "Jeda menampilkan tooltip, dalam milidetik."
+msgstr "Jeda menampilkan tooltip dalam milidetik."
#: src/settings_translation_file.cpp
msgid "Deprecated Lua API handling"
@@ -2632,7 +2868,7 @@ msgstr "Penanganan Lua API usang"
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find giant caverns."
-msgstr "Kedalaman minimal tempat Anda akan menemukan gua besar."
+msgstr "Kedalaman minimal tempat Anda akan menemukan gua raksasa."
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find large caves."
@@ -2643,21 +2879,20 @@ msgid ""
"Description of server, to be displayed when players join and in the "
"serverlist."
msgstr ""
-"Deskripsi dari peladen, ditampilkan saat pemain bergabung dan dalam daftar "
-"peladen."
+"Keterangan server yang ditampilkan saat pemain bergabung dan dalam daftar "
+"server."
#: src/settings_translation_file.cpp
msgid "Desert noise threshold"
msgstr "Ambang batas noise gurun"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Deserts occur when np_biome exceeds this value.\n"
"When the 'snowbiomes' flag is enabled, this is ignored."
msgstr ""
"Gurun muncul saat np_biome melebihi nilai ini.\n"
-"Saat sistem bioma baru digunakan, ini diabaikan."
+"Ketika flag \"snowbiomes\" dinyalakan, nilai ini diabaikan."
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
@@ -2677,11 +2912,11 @@ msgstr "Larang kata sandi kosong"
#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
-msgstr "Nama domain dari peladen yang akan ditampilkan pada daftar peladen."
+msgstr "Nama domain dari server yang akan ditampilkan pada daftar server."
#: src/settings_translation_file.cpp
msgid "Double tap jump for fly"
-msgstr "Tekan ganda \"lompat\" untuk terbang"
+msgstr "Tekan ganda lompat untuk terbang"
#: src/settings_translation_file.cpp
msgid "Double-tapping the jump key toggles fly mode."
@@ -2704,15 +2939,16 @@ msgid "Dungeon minimum Y"
msgstr "Y minimum dungeon"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dungeon noise"
-msgstr "Y minimum dungeon"
+msgstr "Noise dungeon"
#: src/settings_translation_file.cpp
msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Nyalakan dukungan IPv6 (untuk kllien dan server).\n"
+"Membutuhkan sambungan IPv6."
#: src/settings_translation_file.cpp
msgid ""
@@ -2752,14 +2988,14 @@ msgstr "Gunakan masukan pengguna acak (hanya digunakan untuk pengujian)."
#: src/settings_translation_file.cpp
msgid "Enable register confirmation"
-msgstr "Nyalakan konfirmasi pendaftaran"
+msgstr "Gunakan konfirmasi pendaftaran"
#: src/settings_translation_file.cpp
msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
-"Nyalakan konfirmasi pendaftaran saat menyambung ke peladen.\n"
+"Gunakan konfirmasi pendaftaran saat menyambung ke server.\n"
"Jika dimatikan, akun baru akan didaftarkan otomatis."
#: src/settings_translation_file.cpp
@@ -2778,11 +3014,10 @@ msgid ""
"to new servers, but they may not support all new features that you are "
"expecting."
msgstr ""
-"Nyalakan untuk melarang klien lawas untuk tersambung.\n"
-"Klien-klien lawas dianggap sesuai jika mereka tidak rusak saat "
-"menyambungkan\n"
-"ke peladen-peladen baru, tetapi mereka mungkin tidak mendukung semua fitur\n"
-"baru yang Anda harapkan."
+"Nyalakan untuk melarang sambungan dari klien lawas.\n"
+"Klien lawas dianggap sesuai jika mereka tidak rusak saat menyambung ke "
+"server-\n"
+"server baru, tetapi mungkin tidak mendukung semua fitur baru yang diharapkan."
#: src/settings_translation_file.cpp
msgid ""
@@ -2791,16 +3026,17 @@ msgid ""
"textures)\n"
"when connecting to the server."
msgstr ""
-"Gunakan peladen media jarak jauh (jika diberikan oleh peladen).\n"
-"Peladen jarak jauh menawarkan cara lebih cepat untuk mengunduh media (misal: "
-"tekstur)\n"
-"saat tersambung ke peladen."
+"Gunakan server media jarak jauh (jika diberikan oleh server).\n"
+"Server jarak jauh menawarkan cara lebih cepat untuk mengunduh media\n"
+"(misal: tekstur) saat tersambung ke server."
#: src/settings_translation_file.cpp
msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Nyalakan vertex buffer object.\n"
+"Ini dapat meningkatkan kinerja grafika."
#: src/settings_translation_file.cpp
msgid ""
@@ -2811,14 +3047,14 @@ msgstr ""
"Misalkan: 0 untuk tanpa view bobbing; 1.0 untuk normal; 2.0 untuk 2x lipat."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
-"Nyalakan/matikan peladen IPv6.\n"
-"Diabaikan jika bind_address telah diatur."
+"Nyalakan/matikan server IPv6.\n"
+"Diabaikan jika bind_address telah diatur.\n"
+"Membutuhkan enable_ipv6 untuk dinyalakan."
#: src/settings_translation_file.cpp
msgid ""
@@ -2827,6 +3063,10 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Nyalakan tone mapping \"Uncharted 2\" dari Hable.\n"
+"Menyimulasikan kurva warna film foto dan memperkirakan penampilan\n"
+"citra rentang dinamis tinggi (HDR). Kontras tengah sedikit dikuatkan,\n"
+"sedangkan sorotan dan bayangan dilemahkan."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -2874,6 +3114,10 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Nyalakan sistem suara.\n"
+"Jika dimatikan, semua suara dimatikan dan pengaturan suara dalam permainan\n"
+"akan tidak berfungsi.\n"
+"Perubahan pengaturan ini membutuhkan mulai ulang."
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -2892,6 +3136,22 @@ msgstr ""
"saat diatur dengan angka yang lebih besar dari 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+"Pangkat untuk penirusan floatland. Mengubah perilaku penirusan.\n"
+"Nilai = 1.0 membuat penirusan linear seragam.\n"
+"Nilai > 1.0 membuat penirusan halus yang cocok untuk pemisahan\n"
+"floatland bawaan.\n"
+"Nilai < 1.0 (misal 0.25) membuat tingkat permukaan dengan lembah\n"
+"yang rata dan cocok untuk lapisan floatland padat (penuh)."
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS (bingkai per detik) pada menu jeda"
@@ -2908,9 +3168,8 @@ msgid "Fall bobbing factor"
msgstr "Faktor fall bobbing"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Fon cadangan"
+msgstr "Jalur fon cadangan"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -2930,23 +3189,23 @@ msgstr "Tombol gerak cepat"
#: src/settings_translation_file.cpp
msgid "Fast mode acceleration"
-msgstr "Mode akselerasi cepat"
+msgstr "Percepatan mode gerak cepat"
#: src/settings_translation_file.cpp
msgid "Fast mode speed"
-msgstr "Mode cepat"
+msgstr "Kelajuan mode gerak cepat"
#: src/settings_translation_file.cpp
msgid "Fast movement"
-msgstr "Gerakan cepat"
+msgstr "Gerak cepat"
#: src/settings_translation_file.cpp
msgid ""
"Fast movement (via the \"special\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Gerakan cepat (lewat tombol \"spesial\").\n"
-"Membutuhkan izin \"fast\" pada peladen."
+"Gerak cepat (lewat tombol \"spesial\").\n"
+"Membutuhkan hak \"fast\" pada server."
#: src/settings_translation_file.cpp
msgid "Field of view"
@@ -2962,7 +3221,7 @@ msgid ""
"the\n"
"Multiplayer Tab."
msgstr ""
-"Berkas dalam client/serverlist/ yang berisi peladen favorit Anda yang\n"
+"Berkas dalam client/serverlist/ yang berisi server favorit Anda yang\n"
"ditampilkan dalam Tab Multipemain."
#: src/settings_translation_file.cpp
@@ -3010,6 +3269,34 @@ msgid "Fixed virtual joystick"
msgstr "Joystick virtual tetap"
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr "Kepadatan floatland"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr "Y maksimum floatland"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr "Y minimum floatland"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr "Noise floatland"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr "Pangkat penirusan floatland"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr "Jarak penirusan floatland"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr "Ketinggian permukaan air floatland"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Tombol terbang"
@@ -3031,11 +3318,11 @@ msgstr "Tombol beralih kabut"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Fon tebal bawaan"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Fon miring bawaan"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3051,15 +3338,23 @@ msgstr "Ukuran fon"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "Ukuran fon bawaan dalam poin (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "Ukuran fon cadangan bawaan dalam poin (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "Ukuran fon monospace bawaan dalam poin (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 ""
+"Ukuran fon teks obrolan terkini dan prompt obrolan dalam poin (pt).\n"
+"Nilai 0 akan memakai ukuran bawaan."
#: src/settings_translation_file.cpp
msgid ""
@@ -3067,6 +3362,8 @@ msgid ""
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
+"Format pesan obrolan pemain. Berikut daftar kode yang sah:\n"
+"@name, @message, @timestamp (opsional)"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
@@ -3149,7 +3446,7 @@ msgstr ""
"Jarak terjauh objek dapat diketahui klien, dalam blok peta (16 nodus).\n"
"\n"
"Mengatur dengan nilai yang lebih tinggi daripada active_block_range akan\n"
-"menyebabkan peladen menjaga objek aktif hingga jarak ini pada arah pandang\n"
+"menyebabkan server menjaga objek aktif hingga jarak ini pada arah pandang\n"
"pemain. (Ini dapat menghindari makhluk yang mendadak hilang dari pandangan.)"
#: src/settings_translation_file.cpp
@@ -3196,22 +3493,24 @@ msgstr ""
"semua dekorasi."
#: 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 "Kemiringan kurva cahaya di titik maksimum."
+msgstr ""
+"Kemiringan kurva cahaya di titik maksimum.\n"
+"Mengatur kontras tingkatan cahaya tertinggi."
#: 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 "Kemiringan kurva cahaya di titik minimum."
+msgstr ""
+"Kemiringan kurva cahaya di titik minimum.\n"
+"Mengatur kontras tingkatan cahaya terendah."
#: src/settings_translation_file.cpp
msgid "Graphics"
-msgstr "Grafik"
+msgstr "Grafika"
#: src/settings_translation_file.cpp
msgid "Gravity"
@@ -3238,14 +3537,13 @@ msgid "HUD toggle key"
msgstr "Tombol beralih HUD"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- legacy: (try to) mimic old behaviour (default for release).\n"
"- log: mimic and log backtrace of deprecated call (default for debug).\n"
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
-"Penanganan panggilan lua api usang:\n"
+"Penanganan panggilan Lua API usang:\n"
"- legacy: (mencoba untuk) menyerupai aturan lawas (bawaan untuk rilis).\n"
"- log: menyerupai dan mencatat asal-usul panggilan usang (bawaan untuk "
"awakutu).\n"
@@ -3315,25 +3613,31 @@ msgstr "Noise bukit4"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
-msgstr "Halaman awal peladen, ditampilkan pada daftar peladen."
+msgstr "Halaman awal server, ditampilkan pada daftar server."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
+"Percepatan mendatar di udara saat lompat atau jatuh\n"
+"dalam nodus per detik per detik."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration in fast mode,\n"
"in nodes per second per second."
msgstr ""
+"Percepatan mendatar dan vertikal dalam mode gerak\n"
+"cepat dalam nodus per detik per detik."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration on ground or when climbing,\n"
"in nodes per second per second."
msgstr ""
+"Percepatan mendatar dan vertikal di atas tanah atau saat memanjat\n"
+"dalam nodus per detik per detik."
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
@@ -3481,13 +3785,16 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Kelajuan gerakan ombak. Lebih tinggi = lebih cepat.\n"
+"Jika negatif, ombak akan bergerak mundur.\n"
+"Membutuhkan air berombak untuk dinyalakan."
#: src/settings_translation_file.cpp
msgid ""
"How much the server will wait before unloading unused mapblocks.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
-"Seberapa lama peladen akan menunggu sebelum membongkar blok peta yang tidak "
+"Seberapa lama server akan menunggu sebelum membongkar blok peta yang tidak "
"dipakai.\n"
"Semakin tinggi semakin halus, tetapi menggunakan lebih banyak RAM."
@@ -3513,7 +3820,7 @@ msgstr "IPv6"
#: src/settings_translation_file.cpp
msgid "IPv6 server"
-msgstr "Peladen IPv6"
+msgstr "Server IPv6"
#: src/settings_translation_file.cpp
msgid ""
@@ -3541,7 +3848,7 @@ msgid ""
"invisible\n"
"so that the utility of noclip mode is reduced."
msgstr ""
-"Jika dinyalakan, peladen akan melakukan occlusion culling blok peta\n"
+"Jika dinyalakan, server akan melakukan occlusion culling blok peta\n"
"menurut posisi mata pemain. Ini dapat mengurangi jumlah blok yang\n"
"dikirim ke klien sebesar 50-80%. Klien tidak dapat menerima yang tidak\n"
"terlihat sehingga kemampuan mode tembus blok berkurang."
@@ -3554,7 +3861,7 @@ msgid ""
msgstr ""
"Jika dinyalakan bersama mode terbang, pemain mampu terbang melalui nodus "
"padat.\n"
-"Hal ini membutuhkan izin \"noclip\" pada peladen."
+"Hal ini membutuhkan hak \"noclip\" pada server."
#: src/settings_translation_file.cpp
msgid ""
@@ -3572,7 +3879,7 @@ msgid ""
"This option is only read when server starts."
msgstr ""
"Jika dinyalakan, perilaku akan direkam untuk cadangan.\n"
-"Pilihan ini hanya dibaca saat peladen dimulai."
+"Pilihan ini hanya dibaca saat server dimulai."
#: src/settings_translation_file.cpp
msgid "If enabled, disable cheat prevention in multiplayer."
@@ -3583,7 +3890,7 @@ msgid ""
"If enabled, invalid world data won't cause the server to shut down.\n"
"Only enable this if you know what you are doing."
msgstr ""
-"Jika dinyalakan, data dunia yang tidak sah tidak akan menyebabkan peladen "
+"Jika dinyalakan, data dunia yang tidak sah tidak akan menyebabkan server "
"mati.\n"
"Hanya nyalakan ini jika Anda tahu yang Anda lakukan."
@@ -3592,8 +3899,8 @@ msgid ""
"If enabled, makes move directions relative to the player's pitch when flying "
"or swimming."
msgstr ""
-"Jika dinyalakan, menyebabkan arah gerak sesuai pandangan pemain saat terbang "
-"atau menyelam."
+"Jika dinyalakan, arah gerak menyesuaikan pandangan pemain saat terbang atau "
+"menyelam."
#: src/settings_translation_file.cpp
msgid "If enabled, new players cannot join with an empty password."
@@ -3627,6 +3934,11 @@ msgid ""
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
+"Jika ukuran berkas debug.txt melebihi nilai yang diberikan (dalam "
+"megabita),\n"
+"berkas tersebut akan dipindah ke debug.txt.1 dan berkas debug.txt.1 lama\n"
+"akan dihapus jika ada.\n"
+"Berkas debug.txt hanya dipindah jika pengaturan ini dinyalakan."
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
@@ -3634,7 +3946,7 @@ msgstr "Jika diatur, pemain akan bangkit (ulang) pada posisi yang diberikan."
#: src/settings_translation_file.cpp
msgid "Ignore world errors"
-msgstr "Abaikan kesalahan pada dunia"
+msgstr "Abaikan galat pada dunia"
#: src/settings_translation_file.cpp
msgid "In-Game"
@@ -3660,7 +3972,7 @@ msgstr "Tombol konsol"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr ""
+msgstr "Kelajuan vertikal awal ketika lompat dalam nodus per detik."
#: src/settings_translation_file.cpp
msgid ""
@@ -3687,18 +3999,19 @@ msgstr ""
msgid ""
"Instrument the action function of Active Block Modifiers on registration."
msgstr ""
-"Melengkapi fungsi aksi Pengubah Blok Aktif saat didaftarkan, dengan perkakas."
+"Melengkapi fungsi aksi Pengubah Blok Aktif dengan perkakas ketika "
+"didaftarkan."
#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Loading Block Modifiers on registration."
msgstr ""
-"Melengkapi fungsi aksi Pengubah Blok Termuat saat didaftarkan, dengan "
-"perkakas."
+"Melengkapi fungsi aksi Pengubah Blok Termuat dengan perkakas ketika "
+"didaftarkan."
#: src/settings_translation_file.cpp
msgid "Instrument the methods of entities on registration."
-msgstr "Melengkapi metode entitas saat didaftarkan, dengan perkakas."
+msgstr "Melengkapi metode entitas dengan perkakas ketika didaftarkan."
#: src/settings_translation_file.cpp
msgid "Instrumentation"
@@ -3706,7 +4019,7 @@ msgstr "Instrumentasi"
#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
-msgstr "Jarak waktu penyimpanan perubahan penting dari dunia, dalam detik."
+msgstr "Jarak waktu penyimpanan perubahan penting dari dunia dalam detik."
#: src/settings_translation_file.cpp
msgid "Interval of sending time of day to clients."
@@ -3729,18 +4042,16 @@ msgid "Invert vertical mouse movement."
msgstr "Balik pergerakan vertikal tetikus."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Jalur fon monospace"
+msgstr "Jalur fon miring"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Jalur fon monospace"
+msgstr "Jalur fon monospace miring"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
-msgstr "Umur hidup wujud barang"
+msgstr "Umur hidup entitas barang"
#: src/settings_translation_file.cpp
msgid "Iterations"
@@ -3783,7 +4094,7 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
-"Hanya Julia set.\n"
+"Khusus Julia set.\n"
"Komponen W dari tetapan hiperkompleks.\n"
"Mengubah bentuk fraktal.\n"
"Tidak berlaku pada fraktal 3D.\n"
@@ -3796,7 +4107,7 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"Hanya Julia set.\n"
+"Khusus Julia set.\n"
"Komponen X dari tetapan hiperkompleks.\n"
"Mengubah bentuk fraktal.\n"
"Jangkauan sekitar -2 ke 2."
@@ -3808,7 +4119,7 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"Hanya Julia set.\n"
+"Khusus Julia set.\n"
"Komponen Y dari tetapan hiperkompleks.\n"
"Mengubah bentuk fraktal.\n"
"Jangkauan sekitar -2 ke 2."
@@ -3820,7 +4131,7 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"Hanya Julia set.\n"
+"Khusus Julia set.\n"
"Komponen Z dari tetapan hiperkompleks.\n"
"Mengubah bentuk fraktal.\n"
"Jangkauan sekitar -2 ke 2."
@@ -3847,7 +4158,7 @@ msgstr "Tombol lompat"
#: src/settings_translation_file.cpp
msgid "Jumping speed"
-msgstr "Kecepatan lompat"
+msgstr "Kelajuan lompat"
#: src/settings_translation_file.cpp
msgid ""
@@ -4567,15 +4878,15 @@ msgstr "Kedalaman gua besar"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Nilai maksimum gua besar"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Nilai minimum gua besar"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Perbandingan cairan dalam gua besar"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4608,18 +4919,17 @@ msgid ""
"updated over\n"
"network."
msgstr ""
-"Lama detikan peladen dan selang waktu bagi objek secara umum untuk "
+"Lama detikan server dan selang waktu bagi objek secara umum untuk "
"diperbarui\n"
"ke jaringan."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"Atur ke true untuk menyalakan daun melambai.\n"
-"Membutuhkan penggunaan shader."
+"Panjang ombak.\n"
+"Membutuhkan air berombak untuk dinyalakan."
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
@@ -4654,42 +4964,28 @@ msgstr ""
"- verbose"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost"
-msgstr "Penguatan tengah kurva cahaya"
+msgstr "Penguatan kurva cahaya"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost center"
-msgstr "Titik tengah penguatan tengah kurva cahaya"
+msgstr "Titik tengah penguatan kurva cahaya"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost spread"
-msgstr "Persebaran penguatan tengah kurva cahaya"
+msgstr "Persebaran penguatan kurva cahaya"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve gamma"
-msgstr "Penguatan tengah kurva cahaya"
+msgstr "Gama kurva cahaya"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve high gradient"
-msgstr "Penguatan tengah kurva cahaya"
+msgstr "Titik tinggi gradasi kurva cahaya"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve low gradient"
-msgstr "Titik tengah penguatan tengah kurva cahaya"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Batas antrean kemunculan (emerge queue) pada diska"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Batas antrean kemunculan (emerge queue) untuk dibuat"
+msgstr "Titik rendah gradasi kurva cahaya"
#: src/settings_translation_file.cpp
msgid ""
@@ -4711,8 +5007,8 @@ msgid ""
"Only has an effect if compiled with cURL."
msgstr ""
"Membatasi jumlah permintaan HTTP paralel. Memengaruhi:\n"
-"- Pengambilan media jika peladen menggunakan pengaturan remote_media.\n"
-"- Unduhan daftar peladen dan mengumumkan peladen.\n"
+"- Pengambilan media jika server menggunakan pengaturan remote_media.\n"
+"- Unduhan daftar server dan mengumumkan server.\n"
"- Unduhan oleh menu utama (misal. pengelola mod).\n"
"Hanya berlaku jika dikompilasi dengan cURL."
@@ -4733,9 +5029,8 @@ msgid "Liquid queue purge time"
msgstr "Waktu pembersihan antrean cairan"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Liquid sinking"
-msgstr "Kecepatan tenggelam dalam cairan"
+msgstr "Kelajuan tenggelam dalam cairan"
#: src/settings_translation_file.cpp
msgid "Liquid update interval in seconds."
@@ -4757,7 +5052,7 @@ msgid ""
msgstr ""
"Muat profiler permainan untuk mengumpulkan data game profiling.\n"
"Menyediakan perintah /profiler untuk akses ke rangkuman profile.\n"
-"Berguna untuk pengembang mod dan operator peladen."
+"Berguna untuk pengembang mod dan operator server."
#: src/settings_translation_file.cpp
msgid "Loading Block Modifiers"
@@ -4768,6 +5063,10 @@ msgid "Lower Y limit of dungeons."
msgstr "Batas bawah Y dungeon."
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr "Batas bawah Y floatland."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Skrip menu utama"
@@ -4799,23 +5098,22 @@ msgid "Map generation attributes specific to Mapgen Carpathian."
msgstr "Atribut pembuatan peta khusus untuk pembuat peta 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 ""
-"Atribut pembuatan peta khusus untuk pembuat peta flat.\n"
+"Atribut pembuatan peta khusus untuk pembuat peta Flat.\n"
"Beberapa danau dan bukit dapat ditambahkan ke dunia datar."
#: 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 ""
-"Atribut pembuatan peta khusus untuk pembuat peta v7.\n"
-"\"ridges\" menyalakan sungai."
+"Atribut pembuatan peta khusus untuk pembuat peta Fractal.\n"
+"\"terrain\" membolehkan pembuatan medan nonfraktal:\n"
+"samudra, pulau, dan bawah tanah."
#: src/settings_translation_file.cpp
msgid ""
@@ -4838,7 +5136,6 @@ msgid "Map generation attributes specific to Mapgen v5."
msgstr "Atribut pembuatan peta khusus untuk pembuat peta 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"
@@ -4853,10 +5150,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
"Atribut pembuatan peta khusus untuk pembuat peta v7.\n"
-"\"ridges\" menyalakan sungai."
+"\"ridges\": Sungai.\n"
+"\"floatlands\": Tanah mengambang di atmosfer.\n"
+"\"caverns\": Gua raksasa di kedalaman bawah tanah."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -4896,16 +5197,15 @@ msgstr "Pembuat peta flat"
#: src/settings_translation_file.cpp
msgid "Mapgen Flat specific flags"
-msgstr "Flag khusus pembuat peta flat"
+msgstr "Flag khusus pembuat peta Flat"
#: src/settings_translation_file.cpp
msgid "Mapgen Fractal"
msgstr "Pembuat peta fraktal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal specific flags"
-msgstr "Flag khusus pembuat peta flat"
+msgstr "Flag khusus pembuat peta Fractal"
#: src/settings_translation_file.cpp
msgid "Mapgen V5"
@@ -4944,10 +5244,6 @@ msgid "Mapgen debug"
msgstr "Awakutu pembuat peta"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Flag pembuat peta"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Nama pembuat peta"
@@ -4989,17 +5285,19 @@ msgstr "Lebar maksimum hotbar"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Batas maksimal nilai acak untuk gua besar per mapchunk."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Batas maksimal nilai acak untuk gua kecil per mapchunk."
#: src/settings_translation_file.cpp
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
+"Ketahanan cairan maksimum. Mengatur perlambatan ketika memasuki\n"
+"cairan dengan kelajuan tinggi."
#: src/settings_translation_file.cpp
msgid ""
@@ -5018,18 +5316,18 @@ msgstr "Jumlah maksimum blok yang dapat diantrekan untuk dimuat."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
-"Jumlah maksimum blok yang akan diantrekan yang akan dihasilkan.\n"
-"Atur ke kosong untuk diatur secara otomatis."
+"Jumlah maksimum blok yang akan diantrekan untuk dihasilkan.\n"
+"Batasan ini diatur per pemain."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
-"Jumlah maksimum blok yang akan diantrekan yang akan dimuat dari berkas.\n"
-"Atur ke kosong untuk diatur secara otomatis."
+"Jumlah maksimum blok yang akan diantrekan untuk dimuat dari berkas.\n"
+"Batasan ini diatur per pemain."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5124,6 +5422,10 @@ msgid "Method used to highlight selected object."
msgstr "Metode yang digunakan untuk menyorot objek yang dipilih."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr "Tingkat minimal log untuk ditulis ke obrolan."
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Peta mini"
@@ -5137,11 +5439,11 @@ msgstr "Ketinggian pemindaian peta mini"
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Batas minimal nilai acak untuk gua besar per mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Batas minimal nilai acak untuk gua kecil per mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
@@ -5212,20 +5514,16 @@ msgid "Mute sound"
msgstr "Bisukan suara"
#: 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 ""
-"Nama dari pembuat peta yang digunakan saat membuat dunia baru.\n"
+"Nama pembuat peta yang digunakan saat membuat dunia baru.\n"
"Pembuatan dunia lewat menu utama akan menimpa ini.\n"
-"Pembuat peta yang stabil saat ini:\n"
-"v5, v6, v7 (kecuali floatland), flat, singlenode.\n"
-"\"stabil\" berarti bentuk medan pada dunia yang telah ada tidak akan "
-"berubah\n"
-"pada masa depan. Catat bahwa bioma diatur oleh permainan dan dapat berubah."
+"Pembuat peta yang tidak stabil saat ini:\n"
+"- \"floatlands\" pada pembuat peta v7 (dimatikan secara bawaan)."
#: src/settings_translation_file.cpp
msgid ""
@@ -5234,19 +5532,17 @@ msgid ""
"When starting from the main menu, this is overridden."
msgstr ""
"Nama pemain.\n"
-"Saat menjalankan peladen, klien yang tersambung dengan nama ini adalah "
+"Saat menjalankan server, klien yang tersambung dengan nama ini adalah "
"admin.\n"
"Saat menjalankan dari menu utama, nilai ini ditimpa."
#: src/settings_translation_file.cpp
msgid ""
"Name of the server, to be displayed when players join and in the serverlist."
-msgstr ""
-"Nama peladen, ditampilkan saat pemain bergabung dan pada daftar peladen."
+msgstr "Nama server, ditampilkan saat pemain bergabung dan pada daftar server."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr "Bidang dekat"
#: src/settings_translation_file.cpp
@@ -5298,12 +5594,8 @@ msgid "Number of emerge threads"
msgstr "Jumlah utas kemunculan"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5315,16 +5607,16 @@ msgid ""
"'on_generated'. For many users the optimum setting may be '1'."
msgstr ""
"Jumlah utas kemunculan yang dipakai.\n"
-"Kosong atau nilai 0:\n"
+"Nilai 0:\n"
"- Pemilihan otomatis. Utas kemunculan akan berjumlah\n"
"- 'jumlah prosesor - 2', dengan batas bawah 1.\n"
"Nilai lain:\n"
"- Menentukan jumlah utas kemunculan, dengan batas bawah 1.\n"
-"Peringatan: Penambahan jumlah utas kemunculan mempercepat mesin\n"
-"pembuat peta, tetapi dapat merusak kinerja permainan dengan mengganggu\n"
-"proses lain, terutama dalam pemain tunggal dan/atau saat menjalankan kode\n"
-"Lua dalam \"on_generated\".\n"
-"Untuk kebanyakan pengguna, pengaturan yang cocok adalah \"1\"."
+"PERINGATAN: Penambahan jumlah utas kemunculan mempercepat mesin pembuat\n"
+"peta, tetapi dapat merusak kinerja permainan dengan mengganggu proses lain,\n"
+"terutama dalam pemain tunggal dan/atau saat menjalankan kode Lua dalam\n"
+"\"on_generated\". Untuk kebanyakan pengguna, pengaturan yang cocok adalah \"1"
+"\"."
#: src/settings_translation_file.cpp
msgid ""
@@ -5352,12 +5644,12 @@ msgstr "Cairan opak"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
-msgstr ""
+msgstr "Keburaman (alfa) bayangan di belakang fon bawaan, antara 0 dan 255."
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
+msgstr "Keburaman (alfa) bayangan di belakang fon cadangan, antara 0 dan 255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5397,10 +5689,6 @@ msgid "Parallax occlusion scale"
msgstr "Skala parallax occlusion"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Kekuatan parallax occlusion"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5408,10 +5696,18 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Jalur ke fon cadangan.\n"
+"Jika pengaturan \"freetype\" dinyalakan, harus fon TrueType.\n"
+"Jika pengaturan \"freetype\" dimatikan, harus fon bitmap atau vektor XML.\n"
+"Fon ini akan dipakai dalam bahasa tertentu jika tidak didukung fon bawaan."
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Jalur untuk menyimpan tangkapan layar."
+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 ""
+"Jalur penyimpanan tangkapan layar. Dapat berupa jalur absolut atau relatif.\n"
+"Folder akan dibuat jika belum ada."
#: src/settings_translation_file.cpp
msgid ""
@@ -5431,6 +5727,10 @@ 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 ""
+"Jalur ke fon bawaan.\n"
+"Jika pengaturan \"freetype\" dinyalakan, harus fon TrueType.\n"
+"Jika pengaturan \"freetype\" dimatikan, harus fon bitmap atau vektor XML.\n"
+"Fon cadangan akan dipakai jika fon tidak dapat dimuat."
#: src/settings_translation_file.cpp
msgid ""
@@ -5439,12 +5739,24 @@ 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 ""
+"Jalur ke fon monospace.\n"
+"Jika pengaturan \"freetype\" dinyalakan, harus fon TrueType.\n"
+"Jika pengaturan \"freetype\" dimatikan, harus fon bitmap atau vektor XML.\n"
+"Fon ini dipakai dalam layar konsol dan profiler."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
msgstr "Jeda saat jendela hilang fokus"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr "Batasan antrean blok yang dimuat dari diska per pemain"
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Batasan antrean blok yang dibuat per pemain"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Fisika"
@@ -5462,7 +5774,7 @@ msgid ""
"This requires the \"fly\" privilege on the server."
msgstr ""
"Pemain dapat terbang tanpa terpengaruh gravitasi.\n"
-"Hal ini membutuhkan izin \"fly\" pada peladen."
+"Hal ini membutuhkan hak \"fly\" pada server."
#: src/settings_translation_file.cpp
msgid "Player name"
@@ -5508,7 +5820,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
-msgstr "Izin yang dapat diberikan oleh pemain dengan basic_privs"
+msgstr "Hak yang dapat diberikan oleh pemain dengan basic_privs"
#: src/settings_translation_file.cpp
msgid "Profiler"
@@ -5523,10 +5835,22 @@ msgid "Profiling"
msgstr "Profiling"
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr "Perbandingan gua besar yang punya cairan."
+
+#: src/settings_translation_file.cpp
msgid ""
"Radius of cloud area stated in number of 64 node cloud squares.\n"
"Values larger than 26 will start to produce sharp cutoffs at cloud area "
@@ -5552,9 +5876,8 @@ msgid "Recent Chat Messages"
msgstr "Pesan obrolan terkini"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Jalur pelaporan"
+msgstr "Jalur fon biasa"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5562,7 +5885,7 @@ msgstr "Media jarak jauh"
#: src/settings_translation_file.cpp
msgid "Remote port"
-msgstr "Porta peladen jarak jauh"
+msgstr "Porta server jarak jauh"
#: src/settings_translation_file.cpp
msgid ""
@@ -5594,8 +5917,9 @@ msgid ""
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
-"Batasi akses beberapa fungsi sisi klien pada peladen\n"
-"Gabungkan flag bita berikut untuk membatasi fitur pada sisi klien:\n"
+"Batasi akses beberapa fungsi sisi klien pada server\n"
+"Gabungkan flag bita berikut untuk membatasi fitur pada sisi klien atau\n"
+"atur ke 0 untuk tanpa batasan:\n"
"LOAD_CLIENT_MODS: 1 (matikan pemuatan mod klien)\n"
"CHAT_MESSAGES: 2 (cegah pemanggilan send_chat_message sisi klien)\n"
"READ_ITEMDEFS: 4 (cegah pemanggilan get_item_def sisi klien)\n"
@@ -5629,14 +5953,12 @@ msgid "Rightclick repetition interval"
msgstr "Jarak klik kanan berulang"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel depth"
-msgstr "Kedalaman sungai"
+msgstr "Kedalaman kanal sungai"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel width"
-msgstr "Kedalaman sungai"
+msgstr "Lebar kanal sungai"
#: src/settings_translation_file.cpp
msgid "River depth"
@@ -5651,9 +5973,8 @@ msgid "River size"
msgstr "Ukuran sungai"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River valley width"
-msgstr "Kedalaman sungai"
+msgstr "Lebar ngarai sungai"
#: src/settings_translation_file.cpp
msgid "Rollback recording"
@@ -5689,7 +6010,7 @@ msgstr "Simpan otomatis ukuran jendela saat berubah."
#: src/settings_translation_file.cpp
msgid "Saving map received from server"
-msgstr "Simpan peta yang diterima dari peladen"
+msgstr "Simpan peta yang diterima dari server"
#: src/settings_translation_file.cpp
msgid ""
@@ -5770,7 +6091,6 @@ msgid "Selection box width"
msgstr "Lebar kotak pilihan"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -5814,39 +6134,39 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Server / Singleplayer"
-msgstr "Peladen/Pemain tunggal"
+msgstr "Server/Pemain tunggal"
#: src/settings_translation_file.cpp
msgid "Server URL"
-msgstr "URL Peladen"
+msgstr "URL server"
#: src/settings_translation_file.cpp
msgid "Server address"
-msgstr "Alamat peladen"
+msgstr "Alamat server"
#: src/settings_translation_file.cpp
msgid "Server description"
-msgstr "Deskripsi peladen"
+msgstr "Keterangan server"
#: src/settings_translation_file.cpp
msgid "Server name"
-msgstr "Nama peladen"
+msgstr "Nama server"
#: src/settings_translation_file.cpp
msgid "Server port"
-msgstr "Port server"
+msgstr "Porta server"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
-msgstr "Occlusion culling sisi peladen"
+msgstr "Occlusion culling sisi server"
#: src/settings_translation_file.cpp
msgid "Serverlist URL"
-msgstr "URL daftar peladen"
+msgstr "URL daftar server"
#: src/settings_translation_file.cpp
msgid "Serverlist file"
-msgstr "Berkas daftar peladen"
+msgstr "Berkas daftar server"
#: src/settings_translation_file.cpp
msgid ""
@@ -5861,7 +6181,6 @@ msgid "Set the maximum character length of a chat message sent by clients."
msgstr "Atur jumlah karakter maksimum per pesan obrolan yang dikirim klien."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
@@ -5870,7 +6189,6 @@ msgstr ""
"Membutuhkan penggunaan shader."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
@@ -5879,7 +6197,6 @@ msgstr ""
"Membutuhkan penggunaan shader."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
@@ -5904,18 +6221,20 @@ msgstr ""
"Ini hanya bekerja dengan video 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 "Pergeseran bayangan fon, jika 0, bayangan tidak akan digambar."
+msgstr ""
+"Pergeseran bayangan fon bawaan dalam piksel. Jika 0, bayangan tidak akan "
+"digambar."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
"be drawn."
-msgstr "Pergeseran bayangan fon, jika 0, bayangan tidak akan digambar."
+msgstr ""
+"Pergeseran bayangan fon cadangan dalam piksel. Jika 0, bayangan tidak akan "
+"digambar."
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -5931,7 +6250,7 @@ msgstr "Tampilkan kotak pilihan benda"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
-msgstr "Pesan saat peladen mati"
+msgstr "Pesan saat server dimatikan"
#: src/settings_translation_file.cpp
msgid ""
@@ -5969,11 +6288,11 @@ msgstr "Kemiringan dan isian bekerja sama mengatur ketinggian."
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Nilai maksimum gua kecil"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Nilai minimum gua kecil"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6011,11 +6330,11 @@ msgstr "Tombol menyelinap"
#: src/settings_translation_file.cpp
msgid "Sneaking speed"
-msgstr "Kecepatan menyelinap"
+msgstr "Kelajuan menyelinap"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
-msgstr ""
+msgstr "Kelajuan menyelinap dalam nodus per detik."
#: src/settings_translation_file.cpp
msgid "Sound"
@@ -6042,14 +6361,24 @@ msgstr ""
"File yang tidak ada akan diambil cara yang biasa."
#: 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 ""
+"Mengatur ukuran tumpukan bawaan untuk nodus, barang, dan alat.\n"
+"Catat bahwa mod dan permainan dapat mengatur tumpukan untuk sebagian (atau "
+"semua) barang."
+
+#: src/settings_translation_file.cpp
msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
msgstr ""
-"Persebaran penguatan tengah kurva cahaya.\n"
-"Simpangan baku dari penguatan tengah Gauss."
+"Persebaran rentang penguatan kurva cahaya.\n"
+"Mengatur lebar rentang yang dikuatkan.\n"
+"Simpangan baku dari penguatan kurva cahaya Gauss."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6068,6 +6397,10 @@ msgid "Step mountain spread noise"
msgstr "Noise persebaran teras gunung"
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr "Kekuatan mode paralaks 3D."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Kekuatan normalmap yang dibuat."
@@ -6077,10 +6410,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Kekuatan dari parallax."
+"Besar penguatan kurva cahaya.\n"
+"Tiga parameter \"boost\" menentukan rentang kurva\n"
+"cahaya yang dikuatkan menurut kecerahannya."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6091,6 +6423,20 @@ msgid "Strip color codes"
msgstr "Buang kode warna"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "SQLite sinkron"
@@ -6158,7 +6504,7 @@ msgstr ""
"Tekstur pada nodus dapat disejajarkan, baik dengan nodus maupun dunia.\n"
"Mode pertama cocok untuk mesin, furnitur, dll., sedangkan mode kedua\n"
"cocok agar tangga dan mikroblok cocok dengan sekitarnya.\n"
-"Namun, karena masih baru, ini tidak dipakai pada peladen lawas, pilihan ini\n"
+"Namun, karena masih baru, ini tidak dipakai pada server lawas, pilihan ini\n"
"bisa memaksakan untuk jenis nodus tertentu. Catat bahwa ini masih dalam\n"
"tahap PERCOBAAN dan dapat tidak berjalan dengan semestinya."
@@ -6202,21 +6548,27 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Tinggi maksimum permukaan ombak.\n"
+"4.0 = Tinggi ombak dua nodus.\n"
+"0.0 = Ombak tidak bergerak sama sekali.\n"
+"Bawaannya 1.0 (1/2 nodus).\n"
+"Membutuhkan air berombak untuk dinyalakan."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
-msgstr "Antarmuka jaringan yang peladen dengarkan."
+msgstr "Antarmuka jaringan yang server dengarkan."
#: src/settings_translation_file.cpp
msgid ""
"The privileges that new users automatically get.\n"
"See /privs in game for a full list on your server and mod configuration."
msgstr ""
-"Izin yang didapatkan pengguna baru otomatis.\n"
-"Lihat /privs dalam permainan untuk daftar lengkap pada peladen Anda dan "
-"konfigurasi mod."
+"Hak yang didapatkan pengguna baru otomatis.\n"
+"Lihat /privs dalam permainan untuk daftar lengkap pada konfigurasi mod dan "
+"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"
@@ -6224,7 +6576,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"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"
@@ -6330,7 +6682,7 @@ msgstr "Jarak pengiriman waktu"
#: src/settings_translation_file.cpp
msgid "Time speed"
-msgstr "Kecepatan waktu"
+msgstr "Kelajuan waktu"
#: src/settings_translation_file.cpp
msgid "Timeout for client to remove unused map data from memory."
@@ -6371,7 +6723,6 @@ msgid "Trilinear filtering"
msgstr "Pemfilteran trilinear"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"True = 256\n"
"False = 128\n"
@@ -6379,7 +6730,7 @@ msgid ""
msgstr ""
"True = 256\n"
"False = 128\n"
-"Berguna untuk membuat peta mini lebih halus pada mesin yang lebih lambat."
+"Berguna untuk membuat peta mini lebih halus pada mesin yang lambat."
#: src/settings_translation_file.cpp
msgid "Trusted mods"
@@ -6387,14 +6738,13 @@ msgstr "Mod yang dipercaya"
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
-msgstr "URL ke daftar peladen yang tampil pada Tab Multipemain."
+msgstr "URL ke daftar server yang tampil pada Tab Multipemain."
#: src/settings_translation_file.cpp
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"
@@ -6404,7 +6754,8 @@ msgid ""
msgstr ""
"Undersampling seperti menggunakan resolusi layar yang lebih rendah, tetapi\n"
"hanya berlaku untuk dunia permainan saja, antarmuka grafis tetap.\n"
-"Seharusnya memberikan dorongan performa dengan gambar yang kurang rinci."
+"Seharusnya memberikan dorongan kinerja dengan gambar yang kurang detail.\n"
+"Nilai yang lebih tinggi menghasilkan gambar yang kurang detail."
#: src/settings_translation_file.cpp
msgid "Unlimited player transfer distance"
@@ -6412,13 +6763,17 @@ msgstr "Jarak pemindahan pemain tak terbatas"
#: src/settings_translation_file.cpp
msgid "Unload unused server data"
-msgstr "Membongkar data peladen yang tak terpakai"
+msgstr "Membongkar data server yang tak terpakai"
#: src/settings_translation_file.cpp
msgid "Upper Y limit of dungeons."
msgstr "Batas atas Y dungeon."
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr "Batas atas Y floatland."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Gunakan tampilan awan 3D daripada datar."
@@ -6512,7 +6867,7 @@ msgstr "Merubah kecuraman tebing."
#: src/settings_translation_file.cpp
msgid "Vertical climbing speed, in nodes per second."
-msgstr ""
+msgstr "Kelajuan vertikal memanjat dalam nodus per detik."
#: src/settings_translation_file.cpp
msgid "Vertical screen synchronization."
@@ -6555,13 +6910,12 @@ msgid "Volume"
msgstr "Volume"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
-"Gunakan pemetaan parallax occlusion.\n"
-"Membutuhkan penggunaan shader."
+"Volume semua suara.\n"
+"Membutuhkan sistem suara untuk dinyalakan."
#: src/settings_translation_file.cpp
msgid ""
@@ -6579,15 +6933,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
-msgstr ""
+msgstr "Kelajuan jalan dan terbang dalan nodus per detik."
#: src/settings_translation_file.cpp
msgid "Walking speed"
-msgstr "Kecepatan berjalan"
+msgstr "Kelajuan jalan"
#: src/settings_translation_file.cpp
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
msgstr ""
+"Kelajuan jalan, terbang, dan memanjat dalam mode gerak cepat dalam nodus per "
+"detik."
#: src/settings_translation_file.cpp
msgid "Water level"
@@ -6606,24 +6962,20 @@ msgid "Waving leaves"
msgstr "Daun melambai"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
-msgstr "Laimbaian Cairan"
+msgstr "Air berombak"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Ketinggian ombak"
+msgstr "Ketinggian ombak air"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
-msgstr "Kecepatan ombak"
+msgstr "Kelajuan gelombang ombak"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "Panjang ombak"
+msgstr "Panjang ombak air"
#: src/settings_translation_file.cpp
msgid "Waving plants"
@@ -6676,14 +7028,14 @@ msgstr ""
"otomatis tekstur yang sejajar dengan dunia."
#: 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 ""
"Apakah fon FreeType digunakan, membutuhkan dukungan FreeType saat "
-"dikompilasi."
+"dikompilasi.\n"
+"Jika dimatikan, fon bitmap dan vektor XML akan dipakai."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -6707,7 +7059,7 @@ msgid ""
"Set this to true if your server is set up to restart automatically."
msgstr ""
"Apakah meminta klien untuk menyambung ulang setelah kerusakan (Lua)?\n"
-"Atur ke true jika peladen Anda diatur untuk mulai ulang otomatis."
+"Atur ke true jika server Anda diatur untuk mulai ulang otomatis."
#: src/settings_translation_file.cpp
msgid "Whether to fog out the end of the visible area."
@@ -6720,6 +7072,10 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Apakah akan membisukan suara atau tidak. Anda dapat membunyikan\n"
+"suara kapan pun, kecuali sistem suara dimatikan (enable_sound = false).\n"
+"Dalam permainan, Anda dapat beralih mode bisu dengan tombol bisu\n"
+"atau melalui menu jeda."
#: src/settings_translation_file.cpp
msgid ""
@@ -6765,12 +7121,11 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
-"Tekstur yang sejajar dengan dunia dapat diperbesar hingga beberapa\n"
-"nodus. Namun, peladen mungkin tidak mengirimkan Perbesaran yang\n"
-"Anda inginkan, terlebih jika Anda menggunakan paket tekstur yang\n"
-"didesain khusus; dengan pilihan ini, klien mencoba untuk menentukan\n"
-"perbesaran otomatis sesuai ukuran tekstur.\n"
-"Lihat juga texture_min_size.\n"
+"Tekstur yang sejajar dengan dunia dapat diperbesar hingga beberapa nodus.\n"
+"Namun, server mungkin tidak mengirimkan perbesaran yang Anda inginkan,\n"
+"terlebih jika Anda menggunakan paket tekstur yang didesain khusus; dengan\n"
+"pilihan ini, klien mencoba untuk menentukan perbesaran otomatis sesuai\n"
+"ukuran tekstur. Lihat juga texture_min_size.\n"
"Peringatan: Pilihan ini dalam tahap PERCOBAAN!"
#: src/settings_translation_file.cpp
@@ -6798,6 +7153,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr "Jarak Y dari gua besar untuk meluas ke ukuran penuh."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Ketinggian Y dari permukaan medan rata-rata."
@@ -6897,18 +7260,6 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "Floatland mountain height"
#~ msgstr "Ketinggian gunung floatland"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Pangkat gunung floatland"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Kepadatan gunung floatland"
-
-#~ msgid "Floatland level"
-#~ msgstr "Ketinggian floatland"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Noise dasar floatland"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Noise ketinggian dasar floatland"
@@ -6954,3 +7305,21 @@ msgstr "Waktu habis untuk cURL"
#~ "Sesuaikan pengodean gamma untuk tabel cahaya.\n"
#~ "Angka yang lebih tinggi lebih terang.\n"
#~ "Pengaturan ini untuk klien saja dan diabaikan oleh peladen."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Jalur untuk menyimpan tangkapan layar."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Kekuatan parallax occlusion"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Batas antrean kemunculan (emerge queue) pada diska"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Mengunduh dan memasang $1, mohon tunggu..."
+
+#~ msgid "Back"
+#~ msgstr "Kembali"
+
+#~ msgid "Ok"
+#~ msgstr "Oke"
diff --git a/po/it/minetest.po b/po/it/minetest.po
index e0b93ece3..c7ce03705 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-11-13 16:04+0000\n"
-"Last-Translator: Jacques Lagrange <Jacques.Reads@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-26 10:41+0000\n"
+"Last-Translator: Hamlet <hamlatmesehub@riseup.net>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/minetest/"
"minetest/it/>\n"
"Language: it\n"
@@ -12,16 +12,20 @@ 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 3.10-dev\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
-msgstr "Ricompari"
+msgstr "Rinasci"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
msgstr "Sei morto"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "Ok"
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Si è verificato un errore in uno script Lua:"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "Menu principale"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "OK"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Riconnettiti"
@@ -96,35 +96,39 @@ msgstr "Disattiva tutto"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Disabilita pacchetto mod"
+msgstr "Disattiva la raccolta di mod"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr "Abilita tutto"
+msgstr "Attiva tutto"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Abilita pacchetto mod"
+msgstr "Attiva la raccolta di mod"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
-"Impossibile abilitare il mod \"$1\" poiché contiene caratteri non ammessi. "
+"Impossibile abilitare la mod \"$1\" poiché contiene caratteri non ammessi. "
"Sono ammessi solo i caratteri [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Trova più mod"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr "Dipendenze facoltative"
+msgstr "Nessuna dipendenza (facoltativa)"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr "Non è stata fornita nessuna descrizione del gioco."
+msgstr "Non è stata fornita alcuna descrizione del gioco."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
@@ -132,7 +136,7 @@ msgstr "Nessuna dipendenza"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "Non è stata fornita nessuna descrizione del pacchetto mod."
+msgstr "Non è stata fornita nessuna descrizione per la raccolta di mod."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
@@ -160,20 +164,20 @@ msgid "All packages"
msgstr "Tutti i pacchetti"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Indietro"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Torna al Menu Principale"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Scaricamento e installazione di $1, attendere prego..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "ContentDB non è disponibile quando Minetest viene compilato senza cuRL"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "Scaricamento..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr "Impossibile scaricere $1"
+msgstr "Impossibile scaricare $1"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -204,7 +208,7 @@ msgstr "Cerca"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
-msgstr "Pacchetti di immagini"
+msgstr "Raccolte di immagini"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
@@ -214,42 +218,199 @@ msgstr "Disinstalla"
msgid "Update"
msgstr "Aggiorna"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Vedi"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Un mondo chiamato \"$1\" esiste già"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "Terreno aggiuntivo"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Raffreddamento da altitudine"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "Siccità da altitudine"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Miscelatura biomi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Biomi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Caverne"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "Grotte"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Crea"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "Decorazioni"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Scarica un gioco, per esempio Minetest Game, da minetest.net"
+msgstr "Scarica un gioco, come Minetest Game, da minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr "Scaricane uno da minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "Sotterranei"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "Terreno piatto"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Pietre miliari fluttuanti nel cielo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "Terre fluttuanti (sperimentale)"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Gioco"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "Generare terreno non-frattale: oceani e sottoterra"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Colline"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Fiumi umidi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Aumenta l'umidità attorno ai fiumi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Laghi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "Bassa umidità e calore elevato producono fiumi bassi o secchi"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Generatore mappa"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Valori del generatore mappa"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Valori specifici del generatore di mappe"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "Montagne"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "Colata di fango"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Rete di gallerie e grotte"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Nessun gioco selezionato"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Diminuisce il calore con l'altitudine"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Diminuisce l'umidità con l'altitudine"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Fiumi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Fiumi a livello del mare"
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
-msgstr "Seme di generazione"
+msgstr "Seme"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr "Transizione uniforme tra biomi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+"Strutture che compaiono sul terreno (nessun effetto su alberi ed erba della "
+"giungla creati dal v6)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "Strutture che compaiono sul terreno, tipicamente alberi e piante"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Temperato, Deserto"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Temperato, Deserto, Giungla"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "Temperato, Deserto, Giungla, Tundra, Taiga"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "Erosione della superficie del terreno"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
-msgstr "Avvertimento: il Minimal Development Test è rivolto agli sviluppatori."
+msgid "Trees and jungle grass"
+msgstr "Alberi ed erba della giungla"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Diversifica la profondità dei fiumi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "Caverne davvero grandi in profondità sottoterra"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr ""
+"Avvertimento: il Minimal Development Test è inteso per gli sviluppatori."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -261,13 +422,13 @@ msgstr "Non hai nessun gioco installato."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "Sei sicuro di volere eliminare \"$1\"?"
+msgstr "Siete sicuri di volere cancellare \"$1\"?"
#: builtin/mainmenu/dlg_delete_content.lua
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
#: src/client/keycode.cpp
msgid "Delete"
-msgstr "Elimina"
+msgstr "Cancella"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
@@ -279,7 +440,7 @@ msgstr "pkgmgr: percorso non valido \"$1\""
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "Vuoi eliminare il mondo \"$1\"?"
+msgstr "Cancellare il mondo \"$1\"?"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
@@ -287,15 +448,15 @@ msgstr "Accetta"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Rinomina il pacchetto mod:"
+msgstr "Rinomina la raccolta di mod:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
-"Questo pacchetto mod ha un nome esplicito datogli nel suo modpack.conf che "
-"ignorerà qualsiasi rinominazione qui effettuata."
+"Questa raccolta di mod esplicita un nome in modpack.conf che sovrascriverà "
+"ogni modifica qui fatta."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
@@ -307,7 +468,7 @@ msgstr "Rumore 2D"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr "< Torna alle impostazioni"
+msgstr "< Torna a Impostazioni"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
@@ -323,7 +484,7 @@ msgstr "Modifica"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
-msgstr "Abilitat*"
+msgstr "Abilitato"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
@@ -335,7 +496,7 @@ msgstr "Ottave"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr "Spostamento"
+msgstr "Scarto"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Persistance"
@@ -351,7 +512,7 @@ msgstr "Per favore inserisci un numero valido."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr "Ripristina predefiniti"
+msgstr "Ripristina"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
@@ -375,7 +536,7 @@ msgstr "Il valore deve essere almeno $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr "Il valore non deve essere maggiore di $1."
+msgstr "Il valore deve essere più piccolo di $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
@@ -401,14 +562,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Propagazione Z"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "'absvalue'"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr "'defaults'"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "'eased'"
@@ -432,8 +604,8 @@ msgstr "Installa mod: Impossibile trovare il vero nome del mod per: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
-"Installa mod: Impossibile trovare un nome cartella corretto per il pacchetto "
-"mod $1"
+"Installa mod: Impossibile trovare un nome cartella corretto per la raccolta "
+"di mod $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: Unsupported file type \"$1\" or broken archive"
@@ -445,11 +617,11 @@ msgstr "Install: File: \"$1\""
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr "Impossibile trovare un mod o un pacchetto mod valido"
+msgstr "Impossibile trovare un mod o una raccolta di mod validi"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr "Impossibile installare un $1 come un pacchetto di immagini"
+msgstr "Impossibile installare un $1 come una raccolta di immagini"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
@@ -461,7 +633,7 @@ msgstr "Impossibile installare un mod come un $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr "Impossibile installare un pacchetto mod come un $1"
+msgstr "Impossibile installare una raccolta di mod come un $1"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
@@ -473,7 +645,7 @@ msgstr "Contenuti"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr "Disabilita pacchetto di immagini"
+msgstr "Disattiva raccolta immagini"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
@@ -489,7 +661,7 @@ msgstr "Nessuna dipendenza."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr "Nessuna descrizione disponibile per il pacchetto"
+msgstr "Nessuna descrizione disponibile per la raccolta"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
@@ -497,11 +669,11 @@ msgstr "Rinomina"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr "Disinstalla pacchetto"
+msgstr "Disinstalla la raccolta"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-msgstr "Utilizza pacchetto di immagini"
+msgstr "Usa la raccolta di immagini"
#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
@@ -552,6 +724,10 @@ msgid "Host Server"
msgstr "Ospita un server"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "Installa giochi dal ContentDB"
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Nome/Password"
@@ -597,7 +773,7 @@ msgstr "Modalità creativa"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "Ferimento abilitato"
+msgstr "Danno fisico abilitato"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Del. Favorite"
@@ -619,6 +795,7 @@ msgstr "Nome / Password"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP abilitato"
@@ -863,6 +1040,14 @@ msgstr "Impossibile aprire il file password fornito: "
msgid "Provided world path doesn't exist: "
msgstr "Il percorso fornito per il mondo non esiste: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -899,6 +1084,7 @@ msgstr "- Porta: "
msgid "- Public: "
msgstr "- Pubblico: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -1197,6 +1383,14 @@ msgid "Sound muted"
msgstr "Suono disattivato"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "Il sistema audio è disabilitato"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "Il sistema audio non è supportato su questa build"
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Suono attivato"
@@ -1228,7 +1422,7 @@ msgstr "Struttura visualizzata"
msgid "Zoom currently disabled by game or mod"
msgstr "Ingrandimento attualmente disabilitato dal gioco o da un mod"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "va bene"
@@ -1349,6 +1543,7 @@ msgstr "Maiusc sinistro"
msgid "Left Windows"
msgstr "Windows sinistro"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menu"
@@ -1441,6 +1636,7 @@ msgstr "Pausa"
msgid "Play"
msgstr "Play"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Stampa"
@@ -1477,6 +1673,7 @@ msgstr "Windows destro"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Selezione"
@@ -1717,10 +1914,15 @@ msgstr "Silenziato"
msgid "Sound Volume: "
msgstr "Volume suono: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Inserisci "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "it"
@@ -1730,9 +1932,8 @@ msgid ""
"(Android) Fixes the position of virtual joystick.\n"
"If disabled, virtual joystick will center to first-touch's position."
msgstr ""
-"(Android) Fissa la posizione del joytick virtuale.\n"
-"Se disabilitato, il joystick sarà centrato alla\n"
-"posizione del primo tocco."
+"(Android) Fissa la posizione del joystick virtuale.\n"
+"Se disabilitato, il joystick sarà centrato alla posizione del primo tocco."
#: src/settings_translation_file.cpp
msgid ""
@@ -1745,7 +1946,6 @@ msgstr ""
"quando fuori dal cerchio principale."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1756,17 +1956,17 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-"Spostamento (X,Y,Z) del frattale dal centro del mondo in\n"
-"unità di \"scala\".\n"
-"Può essere usato per spostare un punto desiderato a (0,0)\n"
-"per creare un punto di comparsa adatto, o per consentire\n"
-"l'ingrandimento su di un punto desiderato per mezzo\n"
-"dell'aumento della \"scala\".\n"
-"Il valore predefinito è regolato per un punto di comparsa\n"
-"opportuno con le serie Mandelbrot che usino i parametri\n"
-"predefiniti, potrebbe richiedere modifiche in altre situazioni.\n"
-"Varia grossomodo da -2 a 2. Si moltiplichi per \"scala\" per\n"
-"lo spostamento in nodi."
+"Scarto (X,Y,Z) del frattale dal centro del mondo in unità di \"scala\".\n"
+"Può essere usato per spostare un punto desiderato a (0,0) per creare un\n"
+"punto di comparsa adatto, o per consentire l'ingrandimento su di un punto "
+"desiderato\n"
+"per mezzo dell'aumento della \"scala\".\n"
+"Il valore predefinito è regolato per un punto di comparsa opportuno con le "
+"serie Mandelbrot\n"
+"che usino i parametri predefiniti, potrebbe richiedere modifiche in altre\n"
+"situazioni.\n"
+"Varia grossomodo da -2 a 2. Si moltiplichi per \"scala\" per lo scarto in "
+"nodi."
#: src/settings_translation_file.cpp
msgid ""
@@ -1779,15 +1979,14 @@ msgid ""
"an island, set all 3 numbers equal for the raw shape."
msgstr ""
"Scala (X,Y,Z) del frattale in nodi.\n"
-"La dimensione effettiva del frattale sarà due o tre volte\n"
-"più grande.\n"
-"Questi numeri possono essere impostati su valori molto\n"
-"alti, il frattale non deve necessariamente rientrare nel\n"
-"mondo.\n"
+"La dimensione effettiva del frattale sarà due o tre volte più grande.\n"
+"Questi numeri possono essere impostati su valori molto alti, il frattale non "
+"deve\n"
+"necessariamente rientrare nel mondo.\n"
"Li si aumenti per \"ingrandire\" nel dettaglio del frattale.\n"
-"Il valore predefinito è per una forma schiacciata\n"
-"verticalmente, adatta a un'isola, si impostino tutti e tre\n"
-"i numeri sullo stesso valore per la forma grezza."
+"Il valore predefinito è per una forma schiacciata verticalmente, adatta\n"
+"a un'isola, si impostino tutti e tre i numeri sullo stesso valore per la "
+"forma grezza."
#: src/settings_translation_file.cpp
msgid ""
@@ -1836,6 +2035,10 @@ msgid "3D mode"
msgstr "Modalità 3D"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr "Intensità della modalità 3D di parallasse"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "Rumore 3D che definisce le caverne giganti."
@@ -1848,6 +2051,20 @@ msgstr ""
"Definisce anche la struttura del terreno montano delle terre fluttuanti."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+"Rumore 3D che stabilisce la struttura delle terre fluttuanti.\n"
+"Se cambiata dal valore predefinito, la 'scala' di rumore (0.7 in modo "
+"predefinito) potrebbe necessitare\n"
+"d'essere aggiustata, dato che l'affusolamento delle terre fluttuanti "
+"funziona meglio quando questo rumore\n"
+"ha un intervallo di valori approssimativamente tra -2.0 e 2.0."
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "Rumore 3D che definisce la struttura dei muri dei canyon dei fiumi."
@@ -1912,8 +2129,8 @@ msgid "ABM interval"
msgstr "Intervallo ABM"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
-msgstr "Limite assoluto di code emerge"
+msgid "Absolute limit of queued blocks to emerge"
+msgstr "Limite assoluto di blocchi in coda da fare apparire"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -1963,6 +2180,23 @@ msgstr ""
"es. per schermi 4K."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+"Aggiusta la densità dello strato della terra fluttuante.\n"
+"Si aumenti il valore per aumentare la densità. Può essere positivo o "
+"negativo.\n"
+"Valore = 0.0: 50% del volume è terra fluttuante.\n"
+"Value = 2.0 (può essere maggiore dipendentemente da 'mgv7_np_floatland', "
+"provate sempre\n"
+"per essere sicuri) crea uno strato solido di terre fluttuanti."
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avanzate"
@@ -1974,10 +2208,12 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Raffreddamento altitudine"
+"Altera la curva di luce applicandovi la 'correzione gamma'.\n"
+"Valori più alti rendono più luminosi i livelli di luce medi e inferiori.\n"
+"Il valore '1.0' lascia inalterata la curva di luce.\n"
+"Questo ha un effetto significativo solo sulla luce diurna e sulla luce "
+"artificiale,\n"
+"ha pochissimo effetto sulla luce notturna naturale."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2028,9 +2264,8 @@ msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
-"Inerzia del braccio, dà un movimento più\n"
-"realistico al braccio quando si muove la\n"
-"visuale."
+"Inerzia del braccio, dà un movimento più realistico\n"
+"al braccio quando si sposta la visuale."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
@@ -2133,24 +2368,20 @@ msgid "Block send optimize distance"
msgstr "Distanza di ottimizzazione dell'invio dei blocchi"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Percorso del carattere a spaziatura fissa"
+msgstr "Percorso dei caratteri in grassetto e corsivo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Percorso del carattere a spaziatura fissa"
+msgstr "Percorso dei font monospaziali in grassetto e corsivo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Percorso del carattere"
+msgstr "Percorso dei caratteri in grassetto"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Percorso del carattere a spaziatura fissa"
+msgstr "Percorso caratteri monospaziale in grassetto"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2166,12 +2397,12 @@ msgstr "Bumpmapping"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
-"Distanza in nodi del \"piano di ritaglio vicino\" alla telecamera, tra 0 e "
+"Distanza dei nodi del \"piano di ritaglio vicino\" alla telecamera, tra 0 e "
"0.5.\n"
"La maggior parte degli utenti non dovrà cambiarla.\n"
"Aumentarla può ridurre l'artificialità sulle GPU più deboli.\n"
@@ -2238,6 +2469,8 @@ msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Centro della gamma di amplificazione della curva di luce.\n"
+"Dove 0.0 è il livello di luce minimo, 1.0 è il livello di luce massimo."
#: src/settings_translation_file.cpp
msgid ""
@@ -2256,10 +2489,18 @@ msgstr ""
"Potrebbe servire per gli schermi più piccoli."
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr "Dimensione del carattere dell'area di messaggistica"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Tasto della chat"
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr "Livello del registro dell'area di messaggistica"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "Numero limite dei messaggi di chat"
@@ -2377,9 +2618,10 @@ msgid ""
"Comma-separated list of trusted mods that are allowed to access insecure\n"
"functions even when mod security is on (via request_insecure_environment())."
msgstr ""
-"Elenco separato da virgole dei mod fidati ai quali è permesso l'accesso\n"
-"a funzioni non sicure anche quando è attiva la sicurezza dei moduli\n"
-"(tramite request_insecure_environment()."
+"Elenco separato da virgole dei mod fidati ai quali è permesso l'accesso a "
+"funzioni non sicure\n"
+"anche quando è attiva la sicurezza dei moduli (tramite "
+"request_insecure_environment()."
#: src/settings_translation_file.cpp
msgid "Command key"
@@ -2427,8 +2669,8 @@ msgid ""
"Press the autoforward key again or the backwards movement to disable."
msgstr ""
"Avanzamento continuo, scelto dal tasto avanzamento automatico.\n"
-"Premi nuovamente il tasto avanzamento automatico o il tasto di\n"
-"arretramento per disabilitarlo."
+"Premi nuovamente il tasto avanzamento automatico o il tasto di arretramento "
+"per disabilitarlo."
#: src/settings_translation_file.cpp
msgid "Controls"
@@ -2462,6 +2704,11 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Controlla la larghezza delle gallerie, un valore più piccolo crea gallerie "
+"più ampie.\n"
+"Il valore >= 10.0 disabilita completamente la generazione di tunnel ed evita "
+"l'opzione\n"
+"calcoli intensivi del rumore."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2512,9 +2759,8 @@ msgid "Dec. volume key"
msgstr "Tasto dim. volume"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Va diminuito per aumentare la resistenza al movimento nel liquido."
+msgstr "Decrementalo per aumentare la resistenza al movimento nel liquido."
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -2549,6 +2795,10 @@ msgid "Default report format"
msgstr "Formato di rapporto predefinito"
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr "Dimensione predefinita della pila"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2627,8 +2877,7 @@ msgid ""
"down the rate of mesh updates, thus reducing jitter on slower clients."
msgstr ""
"Ritardo in ms tra gli aggiornamenti delle mesh sul client. Aumentandolo si\n"
-"ritarderà il ritmo di aggiornamento delle mesh, riducendo così lo "
-"sfarfallio\n"
+"ritarderà il ritmo di aggiornamento delle mesh, riducendo così lo sfarfallio "
"sui client più lenti."
#: src/settings_translation_file.cpp
@@ -2724,6 +2973,8 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Abilitare il supporto IPv6 (sia per il client che per il server).\n"
+"Necessario per il funzionamento delle connessioni IPv6."
#: src/settings_translation_file.cpp
msgid ""
@@ -2793,9 +3044,9 @@ msgid ""
msgstr ""
"Abilitare per impedire ai client obsoleti di connettersi.\n"
"I client più vecchi sono compatibili nel senso che non andranno in crash "
-"alla\n"
-"connessione ai nuovi server, ma potrebbero non supportare tutte le nuove\n"
-"caratteristiche che ti aspetti."
+"alla connessione\n"
+"ai nuovi server, ma potrebbero non supportare tutte le nuove caratteristiche "
+"che ti aspetti."
#: src/settings_translation_file.cpp
msgid ""
@@ -2815,6 +3066,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Attivare gli oggetti tampone per i vertici.\n"
+"Questo dovrebbe migliorare notevolmente le prestazioni grafiche."
#: src/settings_translation_file.cpp
msgid ""
@@ -2825,14 +3078,14 @@ msgstr ""
"Per esempio: 0 per nessun ondeggiamento, 1.0 per normale, 2.0 per doppio."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
"Abilita/Disabilita l'esecuzione di un server IPv6.\n"
-"Ignorata se si imposta bind_address."
+"Ignorata se si imposta bind_address.\n"
+"Necessita di enable_ipv6 per essere abilitata."
#: src/settings_translation_file.cpp
msgid ""
@@ -2841,6 +3094,12 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Abilita la mappatura dei toni filmici \"Uncharted 2\" di Hable.\n"
+"Simula la curva di tono della pellicola fotografica e come questa approssimi "
+"la\n"
+"comparsa di immagini ad alta gamma dinamica. Il contrasto a medio raggio è "
+"leggermente\n"
+"potenziato, i punti salienti e le ombre vengono gradualmente compressi."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -2853,9 +3112,8 @@ msgid ""
"or need to be auto-generated.\n"
"Requires shaders to be enabled."
msgstr ""
-"Attiva il bumpmapping per le immagini. È necessario fornire le normalmap con "
-"il\n"
-"pacchetto di immagini, o devono essere generate automaticamente.\n"
+"Attiva il bumpmapping per le immagini. È necessario fornire le normalmap\n"
+"con la raccolta di immagini, o devono essere generate automaticamente.\n"
"Necessita l'attivazione degli shader."
#: src/settings_translation_file.cpp
@@ -2889,6 +3147,11 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Abilita il sistema audio.\n"
+"Se disabilitato, disabilita completamente tutti i suoni ovunque e i "
+"controlli audio\n"
+"nel gioco non saranno funzionanti.\n"
+"Cambiare questa impostazione richiede un riavvio."
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -2907,6 +3170,24 @@ msgstr ""
"quando impostata su numeri maggiori di 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+"Esponente dell'affusolamento delle terre fluttuanti. Cambia il comportamento "
+"di affusolamento.\n"
+"Valore = 1.0 crea un affusolamento uniforme, lineare.\n"
+"Valori > 1.0 creano un affusolamento uniforme adatto alle\n"
+"terre fluttuanti separate predefinite.\n"
+"Valori < 1.0 (per esempio 0.25) creano un livello di superficie più definito "
+"con\n"
+"pianure più piatte, adatti a uno strato solido di terre fluttuanti."
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS nel menu di pausa"
@@ -2923,9 +3204,8 @@ msgid "Fall bobbing factor"
msgstr "Fattore di ondeggiamento in caduta"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Carattere di ripiego"
+msgstr "Percorso del carattere di ripiego"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -3000,13 +3280,12 @@ msgid ""
"light edge to transparent textures. Apply this filter to clean that up\n"
"at texture load time."
msgstr ""
-"Le immagini a cui si applicano i filtri possono amalgamare i valori RGB\n"
-"con quelle vicine completamente trasparenti; normalmente vengono\n"
-"scartati dagli ottimizzatori PNG, risultando a volte in immagini "
-"trasparenti\n"
-"scure o dai bordi chiari. Applicare questo filtro aiuta a ripulire tutto ciò "
-"al\n"
-"momento del caricamento dell'immagine."
+"Le immagini a cui si applicano i filtri possono amalgamare i valori RGB con "
+"quelle vicine completamente trasparenti,\n"
+"che normalmente vengono scartati dagli ottimizzatori PNG, risultando a volte "
+"in immagini trasparenti scure o\n"
+"dai bordi chiari. Applicare questo filtro aiuta a ripulire tutto ciò\n"
+"al momento del caricamento dell'immagine."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3031,6 +3310,34 @@ msgid "Fixed virtual joystick"
msgstr "Joystick virtuale fisso"
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr "Densità delle terre fluttuanti"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr "Y massimo delle terre fluttuanti"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr "Y minimo delle terre fluttuanti"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr "Rumore delle terre fluttuanti"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr "Esponente dell'affusolamento delle terre fluttuanti"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr "Distanza di affusolamento delle terre fluttuanti"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr "Livello dell'acqua delle terre fluttuanti"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Tasto volo"
@@ -3052,11 +3359,11 @@ msgstr "Tasto scelta nebbia"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Carattere grassetto per impostazione predefinita"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Carattere corsivo per impostazione predefinita"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3072,15 +3379,24 @@ msgstr "Dimensione del carattere"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "Dimensione carattere del carattere predefinito, in punti (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "Dimensione carattere del carattere di ripiego, in punti (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "Dimensione carattere del carattere a spaziatura fissa, in punti (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 ""
+"Dimensione carattere del testo e del prompt dell'area di messaggistica, in "
+"punti (pt).\n"
+"Valore 0 userà la dimensione carattere predefinita."
#: src/settings_translation_file.cpp
msgid ""
@@ -3179,7 +3495,7 @@ msgstr ""
"\n"
"Impostarla maggiore di active_block_range provocherà il mantenimento\n"
"degli oggetti attivi, fino a questa distanza, da parte del server, nella\n"
-"direzione in cui guarda il giocatore. (Ciò può impedire l'improvvisa\n"
+"direzione in cui guarda il giocatore. (Ciò può evitare l'improvvisa "
"scomparsa dei mob)"
#: src/settings_translation_file.cpp
@@ -3221,23 +3537,26 @@ msgid ""
"and junglegrass, in all other mapgens this flag controls all decorations."
msgstr ""
"Attributi globali di generazione della mappa.\n"
-"In Mapgen v6 il valore 'decorations' controlla tutte le decorazioni\n"
-"eccetto alberi ed erba della giungla, in tutti gli altri questa opzione\n"
-"controlla tutte le decorazioni."
+"In Mapgen v6 il valore 'decorations' controlla tutte le decorazioni eccetto "
+"alberi\n"
+"ed erba della giungla, in tutti gli altri questa opzione controlla tutte le "
+"decorazioni."
#: 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 "Gradiente della curva della luce al livello massimo di luce."
+msgstr ""
+"Gradiente della curva della luce al livello massimo di luce.\n"
+"Controlla il contrasto dei massimi livelli di luce."
#: 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 "Gradiente della curva della luce al livello minimo di luce."
+msgstr ""
+"Gradiente della curva della luce al livello minimo di luce.\n"
+"Controlla il contrasto dei livelli di luce più bassi."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3268,7 +3587,6 @@ msgid "HUD toggle key"
msgstr "Tasto di scelta del visore"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- legacy: (try to) mimic old behaviour (default for release).\n"
@@ -3276,10 +3594,10 @@ msgid ""
"- 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"
+"- 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)."
@@ -3519,6 +3837,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Con quale velocità si muovono le onde dei liquidi. Più alto = più veloce.\n"
+"Se negativo, le onde dei liquidi si sposteranno all'indietro.\n"
+"Richiede l'abilitazione dei liquidi ondulanti."
#: src/settings_translation_file.cpp
msgid ""
@@ -3577,11 +3898,13 @@ msgid ""
"invisible\n"
"so that the utility of noclip mode is reduced."
msgstr ""
-"Se abilitata il sever effettuerà l'occlusion culling dei blocchi mappa\n"
-"basandosi sulla posizione degli occhi del giocatore. Questo può\n"
-"ridurre del 50-80% il numero dei blocchi inviati al client. Il client non\n"
-"riceverà più i blocchi più invisibili cosicché l'utilità della modalità\n"
-"incorporea è ridotta."
+"Se abilitata il server effettuerà l'occlusion culling dei blocchi mappa "
+"basandosi\n"
+"sulla posizione degli occhi del giocatore. Questo può ridurre del 50-80% il "
+"numero dei blocchi\n"
+"inviati al client. Il client non riceverà più la maggior parte degli "
+"invisibili\n"
+"cosicché l'utilità della modalità incorporea è ridotta."
#: src/settings_translation_file.cpp
msgid ""
@@ -3600,7 +3923,8 @@ msgid ""
"descending."
msgstr ""
"Se abilitata, si usa il tasto \"speciale\" invece di \"striscia\" per "
-"arrampicarsi o scendere."
+"arrampicarsi e\n"
+"scendere."
#: src/settings_translation_file.cpp
msgid ""
@@ -3619,8 +3943,8 @@ msgid ""
"If enabled, invalid world data won't cause the server to shut down.\n"
"Only enable this if you know what you are doing."
msgstr ""
-"Se abilitata, i dati non validi del mondo non provocheranno lo\n"
-"spegnimento del server.\n"
+"Se abilitata, i dati non validi del mondo non provocheranno lo spegnimento "
+"del server.\n"
"Attivala solo se sai cosa stai facendo."
#: src/settings_translation_file.cpp
@@ -3772,14 +4096,12 @@ msgid "Invert vertical mouse movement."
msgstr "Inverte il movimento verticale del mouse."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Percorso del carattere a spaziatura fissa"
+msgstr "Percorso del carattere corsivo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Percorso del carattere a spaziatura fissa"
+msgstr "Percorso del carattere corsivo a spaziatura fissa"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -3796,11 +4118,11 @@ msgid ""
"increases processing load.\n"
"At iterations = 20 this mapgen has a similar load to mapgen V7."
msgstr ""
-"Iterazioni della funzione ricorrente.\n"
-"Aumentarle aumenta l'ammontare del dettaglio fine, ma\n"
-"aumenta anche il carico di elaborazione.\n"
-"A iterazioni = 20 questo generatore di mappe ha un carico\n"
-"simile al generatore di mappe v7."
+"Iterazioni della funzione ricorsiva.\n"
+"Aumentarle aumenta l'ammontare del dettaglio fine,\n"
+"ma aumenta anche il carico di elaborazione.\n"
+"A iterazioni = 20 questo generatore di mappe ha un carico simile al "
+"generatore di mappe v7."
#: src/settings_translation_file.cpp
msgid "Joystick ID"
@@ -4613,15 +4935,15 @@ msgstr "Profondità delle caverne grandi"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Numero massimo di grotte di grandi dimensioni"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Numero minimo di caverne di grandi dimensioni"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Proporzione inondata della grotta grande"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4658,13 +4980,12 @@ msgstr ""
"sono aggiornati in generale sulla rete."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"Impostata su vero abilita le foglie ondeggianti.\n"
-"Necessita l'attivazione degli shader."
+"Lunghezza delle onde dei liquidi.\n"
+"Richiede l'attivazione dei liquidi ondeggianti."
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
@@ -4701,42 +5022,28 @@ msgstr ""
"- verbose (verboso)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost"
-msgstr "Aumento mediano della curva di luce"
+msgstr "Aumento della curva di luce"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost center"
-msgstr "Centro dell'aumento mediano della curva di luce"
+msgstr "Centro dell'aumento della curva di luce"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost spread"
-msgstr "Diffusione dell'aumento mediano della curva di luce"
+msgstr "Diffusione dell'aumento della curva di luce"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve gamma"
-msgstr "Aumento mediano della curva di luce"
+msgstr "Gamma della curva di luce"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve high gradient"
-msgstr "Aumento mediano della curva di luce"
+msgstr "Gradiente alto della curva di luce"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve low gradient"
-msgstr "Centro dell'aumento mediano della curva di luce"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Limite di code emerge su disco"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Limite di code emerge da generare"
+msgstr "Gradiente basso della curva di luce"
#: src/settings_translation_file.cpp
msgid ""
@@ -4746,8 +5053,7 @@ msgid ""
msgstr ""
"Limite della generazione della mappa, in nodi, in tutte e sei le direzioni "
"da (0,0,0).\n"
-"Sono generati solo i pezzi di mappa completamente all'interno del limite "
-"del\n"
+"Sono generati solo i pezzi di mappa completamente all'interno del limite del "
"generatore di mappe.\n"
"Il valore è immagazzinato per ciascun mondo."
@@ -4818,6 +5124,10 @@ msgid "Lower Y limit of dungeons."
msgstr "Limite inferiore Y dei sotterranei."
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr "Limite inferiore Y delle terre fluttuanti."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Script del menu principale"
@@ -4851,26 +5161,24 @@ msgstr ""
"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 ""
-"Attributi di generazione della mappa specifici del generatore di mappe "
-"Flat.\n"
-"Al mondo piatto si possono aggiungere laghi e colline occasionali."
+"Attributi di generazione della mappa specifici del generatore di mappe Flat."
+"\n"
+"Al mondo piatto possono essere aggiunti laghi e colline occasionali."
#: 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 ""
"Attributi di generazione della mappa specifici del generatore di mappe "
-"piatto.\n"
+"frattale.\n"
"'terrain' abilita la generazione di terreno non-frattale:\n"
-"oceano, isole e sotterranei."
+"oceano, isole e sottoterra."
#: src/settings_translation_file.cpp
msgid ""
@@ -4909,10 +5217,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
-"Attributi di generazione della mappa specifici del generatore di mappe v7.\n"
-"\"ridges\" abilita i fiumi."
+"Attributi di generazione mappa specifici per il generatore di mappe v7.\n"
+"'ridges': fiumi.\n"
+"'floatlands': masse di terra fluttuanti nell'atmosfera.\n"
+"'caverns': caverne giganti profondamente sottoterra."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -4999,10 +5311,6 @@ msgid "Mapgen debug"
msgstr "Debug del generatore mappa"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Valori del generatore mappa"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Nome del generatore mappa"
@@ -5045,18 +5353,18 @@ msgstr "Larghezza massima della barra di scelta rapida"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
msgstr ""
+"Limite massimo di grotte casuali di grandi dimensioni per pezzo di mappa."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Limite massimo di piccole grotte casuali per pezzo di mappa."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
-"Resistenza massima dei liquidi. Gestisce la decelerazione \n"
+"Resistenza massima dei liquidi. Controlla la decelerazione \n"
"quando si entra ad alta velocità in un liquido."
#: src/settings_translation_file.cpp
@@ -5077,20 +5385,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Numero massimo di blocchi da accodarsi che devono essere generati.\n"
-"Lascia vuoto per fare in modo che venga scelto automaticamente un\n"
-"ammontare adeguato."
+"Questo limite viene imposto per ciascun giocatore."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Numero massimo di blocchi da accodarsi che devono essere caricati da file.\n"
-"Lascia vuoto per fare in modo che venga scelto automaticamente un\n"
-"ammontare adeguato."
+"Questo limite viene imposto per ciascun giocatore."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5190,6 +5496,10 @@ msgid "Method used to highlight selected object."
msgstr "Metodo usato per evidenziare l'oggetto scelto."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr "Livello di registro minimo da scriversi nell'area di messaggistica."
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Minimappa"
@@ -5202,13 +5512,13 @@ msgid "Minimap scan height"
msgstr "Altezza di scansione della minimappa"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "Rumore 3D che stabilisce il numero di segrete per blocco di mondo."
+msgstr ""
+"Limite minimo di grotte casuali di grandi dimensioni per pezzo di mappa."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Limite minimo di piccole grotte casuali per pezzo di mappa."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
@@ -5297,8 +5607,8 @@ msgid ""
"When starting from the main menu, this is overridden."
msgstr ""
"Nome del giocatore.\n"
-"Quando si esegue un server, i client che si connettono con questo nome\n"
-"sono amministratori.\n"
+"Quando si esegue un server, i client che si connettono con questo nome sono "
+"amministratori.\n"
"Quando si avvia dal menu principale, questo viene scavalcato."
#: src/settings_translation_file.cpp
@@ -5309,8 +5619,8 @@ msgstr ""
"dei server."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
-msgstr "Piano di ritaglio vicino"
+msgid "Near plane"
+msgstr "Piano vicino"
#: src/settings_translation_file.cpp
msgid "Network"
@@ -5363,9 +5673,6 @@ msgstr "Numero di thread emerge"
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5376,23 +5683,20 @@ 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 ""
-"Numero di emerge thread da usare.\n"
-"Attenzione: Attualmente ci sono diversi bachi che possono provocare crash "
-"quando\n"
-"'num_emerge_threds' è maggiore di 1. Fintanto che questo avviso non viene "
-"rimosso \n"
-"si raccomanda vivamente di impostarlo al valore predefinito 1.\n"
+"Numero di thread di comparsa da usare.\n"
"Valore 0:\n"
-"- Selezione automatica. Il numero di emerge thread sarà\n"
-"- \"numero di processori - 2\", con un limite inferiore di 1.\n"
-"Qualunque altro valore:\n"
-"- Specifica il numero di emerge thread, con un limite inferiore di 1.\n"
-"Avvertimento: aumentare il numero di emerge thread aumenta la\n"
-"velocità del motore del generatore mappa, ma ciò potrebbe danneggiare\n"
-"le prestazioni del gioco interferendo con altri processi, specialmente in\n"
-"modalità giocatore singolo e/o quando si esegue codice Lua in \"on_generated"
-"\".\n"
-"Per molti utenti l'impostazione ottimale può essere \"1\"."
+"- Selezione automatica. Il numero di thread di comparsa sarà\n"
+"- 'numero di processori - 2', con un limite inferiore di 1.\n"
+"Qualsiasi altro valore:\n"
+"- Specifica il numero di thread di comparsa, con un limite inferiore di 1."
+"\n"
+"AVVISO: Aumentare il numero dei thread di comparsa aumenta la velocità del "
+"motore\n"
+"del generatore di mappe, ma questo potrebbe danneggiare le prestazioni del "
+"gioco interferendo con\n"
+"altri processi, specialmente in modalità locale e/o quando si esegue codice "
+"Lua in 'on_generated'.\n"
+"Per molti utenti l'impostazione ottimale può essere '1'."
#: src/settings_translation_file.cpp
msgid ""
@@ -5420,12 +5724,12 @@ msgstr "Liquidi opachi"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
-msgstr ""
+msgstr "Opacità (alfa) dell'ombra dietro il carattere predefinito, tra 0 e 255."
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
+msgstr "Opacità (alfa) dell'ombra dietro il carattere di riserva, tra 0 e 255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5467,10 +5771,6 @@ msgid "Parallax occlusion scale"
msgstr "Scala dell'occlusione di parallasse"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Intensità dell'occlusione di parallasse"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5478,18 +5778,30 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Percorso del carattere di riserva.\n"
+"Se l'impostazione \"freetype\" è abilitata: deve essere un carattere "
+"TrueType.\n"
+"Se l'impostazione \"freetype\" è disabilitata: deve essere un carattere "
+"bitmap o XML vettoriale.\n"
+"Questo carattere verrà utilizzato per alcune lingue o se il carattere "
+"predefinito non è disponibile."
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Percorso dove salvare le schermate."
+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 ""
+"Percorso dove salvare le schermate. Può essere un percorso assoluto o "
+"relativo.\n"
+"La cartella sarà create se non esiste già."
#: src/settings_translation_file.cpp
msgid ""
"Path to shader directory. If no path is defined, default location will be "
"used."
msgstr ""
-"Percorso della cartella degli shader. Se non se ne stabilisce nessuno,\n"
-"verrà usato quello predefinito."
+"Percorso della cartella degli shader. Se non se ne stabilisce nessuno, verrà "
+"usato quello predefinito."
#: src/settings_translation_file.cpp
msgid "Path to texture directory. All textures are first searched from here."
@@ -5504,6 +5816,13 @@ 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 ""
+"Percorso del carattere predefinito.\n"
+"Se l'impostazione \"freetype\" è abilitata: deve essere un carattere "
+"TrueType.\n"
+"Se l'impostazione \"freetype\" è disabilitata: deve essere un carattere "
+"bitmap o XML vettoriale.\n"
+"Il carattere di riserva verrà utilizzato se il carattere non può essere "
+"caricato."
#: src/settings_translation_file.cpp
msgid ""
@@ -5512,12 +5831,27 @@ 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 ""
+"Percorso del carattere a spaziatura fissa.\n"
+"Se l'impostazione \"freetype\" è abilitata: deve essere un carattere "
+"TrueType.\n"
+"Se l'impostazione \"freetype\" è disabilitata: deve essere un carattere "
+"bitmap o XML vettoriale.\n"
+"Questo carattere viene utilizzato ad es. per la console e lo schermo del "
+"profilatore."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
msgstr "Pausa alla perdita di fuoco della finestra"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr "Limite per giocatore di blocchi accodati per il caricamento dal disco"
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Limite per giocatore di blocchi accodati da generare"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Fisica"
@@ -5563,10 +5897,9 @@ msgid ""
"Prevent digging and placing from repeating when holding the mouse buttons.\n"
"Enable this when you dig or place too often by accident."
msgstr ""
-"Impedisce la ripetizione di scavo e posizionamento quando si tengono "
-"premuti\n"
+"Impedisce la ripetizione di scavo e posizionamento quando si tengono premuti "
"i pulsanti del mouse.\n"
-"Abilitalo quando scavi o piazzi troppo spesso per caso."
+"Abilitalo quando scavi o piazzi troppo spesso per sbaglio."
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
@@ -5600,8 +5933,24 @@ msgid "Profiling"
msgstr "Generazione di profili"
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "Prometheus listener address"
+msgstr "Indirizzo del listener Prometheus"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
msgstr ""
+"Indirizzo del listener Prometheus.\n"
+"Se Minetest viene compilato con l'opzione ENABLE_PROMETHEUS abilitata,\n"
+"abilita il listener delle statistiche per Prometheus su quell'indirizzo.\n"
+"Le statistiche possono essere recuperate su http://127.0.0.1:30000/metrics"
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr "Proporzione delle grotte di grandi dimensioni che contiene del liquido."
#: src/settings_translation_file.cpp
msgid ""
@@ -5611,8 +5960,7 @@ msgid ""
msgstr ""
"Raggio dell'area delle nuvole fissato in numero di 64 nodi quadrati nuvola.\n"
"Valori maggiori di 26 cominceranno a produrre interruzioni appuntite agli "
-"angoli\n"
-"delle aree nuvola."
+"angoli delle aree nuvola."
#: src/settings_translation_file.cpp
msgid "Raises terrain to make valleys around the rivers."
@@ -5631,9 +5979,8 @@ msgid "Recent Chat Messages"
msgstr "Messaggi di chat recenti"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Percorso di rapporto"
+msgstr "Percorso del carattere regolare"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5851,7 +6198,6 @@ msgid "Selection box width"
msgstr "Larghezza del riquadro di selezione"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -5873,25 +6219,25 @@ msgid ""
"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
"18 = 4D \"Mandelbulb\" Julia set."
msgstr ""
-"Seleziona uno dei 18 tipi di frattale.\n"
-"1 = 4D serie Mandelbrot \"arrotondata\".\n"
-"2 = 4D serie Julia \"arrotondata\".\n"
-"3 = 4D serie Mandelbrot \"squadrata\".\n"
-"4 = 4D serie Julia \"squadrata\".\n"
-"5 = 4D serie Mandelbrot \"cugino Mandy\".\n"
-"6 = 4D serie Julia \"cugino Mandy\".\n"
-"7 = 4D serie Mandelbrot \"variazione\".\n"
-"8 = 4D serie Julia \"variazione\".\n"
-"9 = 3D serie Mandelbrot \"Mandelbrot/Mandelbar\".\n"
-"10 = 3D serie Julia \"Mandelbrot/Mandelbar\".\n"
-"11 = 3D serie Mandelbrot \"Albero di Natale\".\n"
-"12 = 3D serie Julia \"Albero di Natale\".\n"
-"13 = 3D serie Mandelbrot \"Mandelbulb\".\n"
-"14 = 3D serie Julia \"Mandelbulb\".\n"
-"15 = 3D serie Mandelbrot \"coseno Mandelbulb\".\n"
-"16 = 3D serie Julia \"coseno Mandelbulb\".\n"
-"17 = 4D serie Mandelbrot \"Mandelbulb\".\n"
-"18 = 4D serie Julia \"Mandelbulb\"."
+"Scegli uno dei 18 tipi di frattale.\n"
+"1 = 4D Serie Mandelbrot \"arrotondata\".\n"
+"2 = 4D Serie Julia \"arrotondata\".\n"
+"3 = 4D Serie Mandelbrot \"squadrata\".\n"
+"4 = 4D Serie Julia \"squadrata\".\n"
+"5 = 4D Serie Mandelbrot \"cugino Mandy\".\n"
+"6 = 4D Serie Julia \"cugino Mandy\".\n"
+"7 = 4D Serie Mandelbrot \"variazione\".\n"
+"8 = 4D Serie Julia \"variazione\".\n"
+"9 = 3D Serie Mandelbrot \"Mandelbrot/Mandelbar\".\n"
+"10 = 3D Serie Julia \"Mandelbrot/Mandelbar\".\n"
+"11 = 3D Serie Mandelbrot \"Albero di Natale\".\n"
+"12 = 3D Serie Julia \"Albero di Natale\".\n"
+"13 = 3D Serie Mandelbrot \"Mandelbulb\".\n"
+"14 = 3D Serie Julia \"Mandelbulb\".\n"
+"15 = 3D Serie Mandelbrot \"Coseno Mandelbulb\".\n"
+"16 = 3D Serie Julia \"Coseno Mandelbulb\".\n"
+"17 = 4D Serie Mandelbrot \"Mandelbulb\".\n"
+"18 = 4D Serie Julia \"Mandelbulb\"."
#: src/settings_translation_file.cpp
msgid "Server / Singleplayer"
@@ -5944,7 +6290,6 @@ msgstr ""
"dai client."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
@@ -5953,16 +6298,15 @@ msgstr ""
"Necessita l'attivazione degli shader."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"Impostata su vero abilita l'acqua ondeggiante.\n"
+"Impostata su vero abilita i liquidi ondeggianti (come, ad esempio, l'acqua)."
+"\n"
"Necessita l'attivazione degli shader."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
@@ -5987,20 +6331,20 @@ msgstr ""
"Ciò funziona solo col supporto video 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 ""
-"Spostamento ombreggiatura carattere, se 0 allora l'ombra non sarà disegnata."
+"Scarto (in pixel) dell'ombreggiatura del carattere predefinito. Se è 0, "
+"allora l'ombra non sarà disegnata."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
"be drawn."
msgstr ""
-"Spostamento ombreggiatura carattere, se 0 allora l'ombra non sarà disegnata."
+"Scarto (in pixel) dell'ombreggiatura del carattere di riserva. Se è 0, "
+"allora l'ombra non sarà disegnata."
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6027,9 +6371,9 @@ msgid ""
"Altering this value is for special usage, leaving it unchanged is\n"
"recommended."
msgstr ""
-"Dimensione dei pezzi di mappa generati dal generatore mappe, fissata in\n"
+"Dimensione dei pezzi di mappa generati dal generatore mappe, dichiarata in "
"blocchi mappa (16 nodi).\n"
-"AVVERTIMENTO!: non c'è nessun vantaggio, e ci sono diversi pericoli,\n"
+"AVVISO: non c'è nessun beneficio, e ci sono diversi pericoli,\n"
"nell'aumentare questo valore al di sopra di 5.\n"
"Ridurre questo valore aumenta la densità di grotte e sotterranei.\n"
"L'alterazione di questo valore è per uso speciale, si raccomanda di\n"
@@ -6055,11 +6399,11 @@ msgstr "Pendenza e riempimento lavorano assieme per modificare le altezze."
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Numero massimo di grotte piccole"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Numero minimo di grotte piccole"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6132,14 +6476,24 @@ msgstr ""
"I file che non sono presenti saranno recuperati nel solito modo."
#: 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 ""
+"Fissa la dimensione predefinita della pila di nodi, oggetti e strumenti.\n"
+"Si noti che mod o giochi possono impostare esplicitamente una pila per "
+"alcuni (o tutti) gli oggetti."
+
+#: src/settings_translation_file.cpp
msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
msgstr ""
"Diffusione dell'aumento mediano della curva di luce.\n"
-"Scostamento tipo dell'aumento mediano gaussiano."
+"Controlla l'ampiezza del raggio da aumentare.\n"
+"Scostamento tipo dell'aumento della curva di luce gaussiano."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6158,6 +6512,10 @@ msgid "Step mountain spread noise"
msgstr "Rumore della diffusione del passo montano"
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr "Intensità della parallasse della modalità 3D."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Intensità delle normalmap generate."
@@ -6167,10 +6525,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Intensità della parallasse."
+"Intensità dell'incremento della curva di luce.\n"
+"I 3 parametri \"incremento\" definiscono un intervallo della luce\n"
+"che ne potenzia la luminosità."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6181,6 +6538,36 @@ msgid "Strip color codes"
msgstr "Elimina i codici di colore"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+"Livello di superficie dell'aqua facoltativa posizionata su uno strato solido "
+"di terra fluttuante.\n"
+"L'acqua è disabilitata in modo predefinito e sarà posizionata se questo "
+"valore è impostato\n"
+"al di sopra di 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (l'inizio dell'"
+"affusolamento\n"
+"superiore).\n"
+"***AVVISO, PERICOLO POTENZIALE PER MONDI E PRESTAZIONI SERVER***:\n"
+"Quando si abilita il posizionamento dell'acqua, le terre fluttuanti devono "
+"essere configurate e verificate\n"
+"per essere uno strato solido impostando 'mgv7_floatland_density' a 2.0 (o un "
+"altro\n"
+"valore richiesto dipendentemente da 'mgv7_np_floatland', per evitare\n"
+"flussi d'acqua estremamente intensi per il server e per evitare vasti "
+"allagamenti\n"
+"della superficie del mondo sottostante."
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "SQLite sincronizzato"
@@ -6249,10 +6636,10 @@ msgstr ""
"Il primo modo si addice meglio a cose come macchine, arredamento, ecc.,\n"
"mentre il secondo fa sì che scale e microblocchi si adattino meglio ai "
"dintorni.\n"
-"Comunque, dato che questa possibilità è nuova, automaticamente potrebbe\n"
-"non essere usata dai server più vecchi, questa opzione consente di imporla\n"
-"per alcuni tipi di nodo. Si noti però che questa è considerata SPERIMENTALE\n"
-"e potrebbe non funzionare bene."
+"Comunque, dato che questa possibilità è nuova, automaticamente potrebbe non "
+"essere usata dai server più vecchi,\n"
+"questa opzione consente di imporla per alcuni tipi di nodo. Si noti però\n"
+"che questa è considerata SPERIMENTALE e potrebbe non funzionare bene."
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
@@ -6293,6 +6680,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"L'altezza massima della superficie dei liquidi ondulanti.\n"
+"4.0 = L'altezza dell'onda è di due nodi.\n"
+"0.0 = L'onda non si muove affatto.\n"
+"Il valore predefinito è 1.0 (1/2 nodo).\n"
+"Richiede l'abilitazione dei liquidi ondulanti."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6315,14 +6707,15 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
"Il raggio del volume di blocchi attorno ciascun giocatore che è soggetto\n"
-"alle cose del blocco attivo, fissata in blocchi mappa (16 nodi).\n"
+"alle cose del blocco attivo, dichiarata in blocchi mappa (16 nodi).\n"
"Nei blocchi attivi vengono caricati gli oggetti ed eseguiti gli ABM.\n"
-"Questo è anche la distanza minima in cui sono mantenuti gli oggetti attivi "
+"Questo è anche l'intervallo minimo in cui sono mantenuti gli oggetti attivi "
"(mob).\n"
-"Questo dovrebbe essere configurato assieme ad active_object_range."
+"Questo dovrebbe essere configurato assieme ad "
+"active_object_send_range_blocks."
#: src/settings_translation_file.cpp
msgid ""
@@ -6333,11 +6726,10 @@ msgid ""
"On other platforms, OpenGL is recommended, and it’s the only driver with\n"
"shader support currently."
msgstr ""
-"Il back-end di rendering per Irrlicht.\n"
+"Il motore di resa per Irrlicht.\n"
"Dopo averlo cambiato è necessario un riavvio.\n"
"Nota: su Android, si resti con OGLES1 se incerti! Altrimenti l'app potrebbe "
-"non\n"
-"partire.\n"
+"non partire.\n"
"Su altre piattaforme, si raccomanda OpenGL, ed è attualmente l'unico driver\n"
"con supporto degli shader."
@@ -6449,10 +6841,9 @@ msgid ""
"node."
msgstr ""
"Per ridurre il ritardo, i trasferimenti di blocchi sono rallentati quando un "
-"giocatore\n"
-"sta costruendo qualcosa. Ciò determina per quanto a lungo sono rallentati "
-"dopo\n"
-"avere posizionato o rimosso un nodo."
+"giocatore sta costruendo qualcosa.\n"
+"Ciò determina per quanto a lungo sono rallentati dopo avere posizionato o "
+"rimosso un nodo."
#: src/settings_translation_file.cpp
msgid "Toggle camera mode key"
@@ -6475,7 +6866,6 @@ msgid "Trilinear filtering"
msgstr "Filtraggio trilineare"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"True = 256\n"
"False = 128\n"
@@ -6509,7 +6899,7 @@ msgstr ""
"inferiore,\n"
"ma è applicato solo al mondo di gioco, mantenendo intatta l'interfaccia "
"utente.\n"
-"Dovrebbe dare un aumento di prestazioni significativo al costo di immagini\n"
+"Dovrebbe dare un aumento di prestazioni significativo al costo di immagini "
"meno dettagliate.\n"
"Più si aumenta il valore, meno dettagliata sarà l'immagine."
@@ -6526,6 +6916,10 @@ msgid "Upper Y limit of dungeons."
msgstr "Livello Y superiore dei sotterranei."
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr "Livello Y superiore delle terre fluttuanti."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Usare l'aspetto 3D per le nuvole invece di quello piatto."
@@ -6549,9 +6943,9 @@ msgid ""
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
-"Usare il mip mapping per ridimensionare le immagini. Potrebbe aumentare\n"
-"leggermente le prestazioni, specialmente quando si usa un pacchetto di\n"
-"immagini ad alta risoluzione.\n"
+"Usare il mip mapping per ridimensionare le immagini. Potrebbe aumentare "
+"leggermente le prestazioni,\n"
+"specialmente quando si usa una raccolta di immagini ad alta risoluzione.\n"
"La correzione gamma del downscaling non è supportata."
#: src/settings_translation_file.cpp
@@ -6664,13 +7058,12 @@ msgid "Volume"
msgstr "Volume"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
-"Attiva la parallax occlusion mapping.\n"
-"Necessita l'attivazione degli shader."
+"Volume dei suoni.\n"
+"Necessita l'attivazione dell'audio."
#: src/settings_translation_file.cpp
msgid ""
@@ -6717,24 +7110,20 @@ msgid "Waving leaves"
msgstr "Foglie ondeggianti"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
msgstr "Liquidi ondeggianti"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Altezza di ondeggiamento dei liquidi"
+msgstr "Altezza dell'onda dei liquidi ondeggianti"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
-msgstr "Velocità di ondeggiamento dei liquidi"
+msgstr "Velocità dell'onda dei liquidi ondeggianti"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "Durata di ondeggiamento dei liquidi"
+msgstr "Lunghezza d'onda dei liquidi ondulanti"
#: src/settings_translation_file.cpp
msgid "Waving plants"
@@ -6760,9 +7149,8 @@ msgid ""
msgstr ""
"Quando gui_scaling_filter_txr2img è Vero, copia quelle immagini\n"
"dall'hardware al software per il ridimensionamento. Quando è Falso,\n"
-"ripiega sul vecchio metodo di ridimensionamento, per i driver video\n"
-"che non supportano correttamente lo scaricamento delle immagini\n"
-"dall'hardware."
+"ripiega sul vecchio metodo di ridimensionamento, per i driver video che\n"
+"non supportano correttamente lo scaricamento delle immagini dall'hardware."
#: src/settings_translation_file.cpp
msgid ""
@@ -6776,28 +7164,31 @@ msgid ""
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
-"Quando si usano i filtri bilineare/trilineare/anisotropico, le immagini a\n"
-"bassa risoluzione possono essere sfocate, così si esegue l'upscaling\n"
-"automatico con l'interpolazione nearest-neighbor per conservare\n"
-"pixel precisi. Questo imposta la dimensione minima delle immagini\n"
-"per le immagini upscaled; valori più alti hanno un aspetto più nitido,\n"
-"ma richiedono più memoria. Sono raccomandate le potenze di 2.\n"
-"Impostarla a un valore maggiore di 1 potrebbe non avere un effetto\n"
-"visibile, a meno che il filtraggio bilineare/trilineare/anisotropico sia\n"
-"abilitato.\n"
+"Quando si usano i filtri bilineare/trilineare/anisotropico, le immagini a "
+"bassa risoluzione\n"
+"possono essere sfocate, così si esegue l'upscaling automatico con "
+"l'interpolazione nearest-neighbor\n"
+"per conservare pixel chiari. Questo imposta la dimensione minima delle "
+"immagini\n"
+"per le immagini upscaled; valori più alti hanno un aspetto più nitido, ma "
+"richiedono più memoria.\n"
+"Sono raccomandate le potenze di 2. Impostarla a un valore maggiore di 1 "
+"potrebbe non avere\n"
+"un effetto visibile, a meno che il filtraggio bilineare/trilineare/"
+"anisotropico sia abilitato.\n"
"Questo viene anche usato come dimensione di base per le immagini\n"
"dei nodi per l'autoridimensionamento delle immagini con allineamento\n"
"relativo al mondo."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Whether FreeType fonts are used, requires FreeType support to be compiled "
"in.\n"
"If disabled, bitmap and XML vectors fonts are used instead."
msgstr ""
"Se si usano caratteri FreeType, richiede la compilazione col supporto "
-"FreeType."
+"FreeType.\n"
+"Se disabilitati, si utilizzano invece i caratteri bitmap e XML vettoriali."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -6837,6 +7228,12 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Se silenziare i suoni. È possibile de-silenziare i suoni in qualsiasi "
+"momento, a meno che\n"
+"il sistema audio non sia disabilitato (enable_sound=false).\n"
+"Nel gioco, puoi alternare lo stato silenziato col tasto di silenzio o "
+"usando\n"
+"il menu di pausa."
#: src/settings_translation_file.cpp
msgid ""
@@ -6884,14 +7281,15 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
-"Le immagini allineate al mondo possono essere ridimensionate per\n"
-"estendersi su diversi nodi. Comunque, il server potrebbe non inviare\n"
-"la scala che vuoi, specialmente se usi un pacchetto di texture\n"
-"progettato specialmente; con questa opzione, il client prova a\n"
-"stabilire automaticamente la scala basandosi sulla dimensione\n"
-"dell'immagine.\n"
+"Le immagini allineate al mondo possono essere ridimensionate per estendersi "
+"su diversi nodi.\n"
+"Comunque, il server potrebbe non inviare la scala che vuoi, specialmente se "
+"usi una raccolta di immagini\n"
+"progettata specificamente; con questa opzione, il client prova a stabilire "
+"automaticamente la scala\n"
+"basandosi sulla dimensione dell'immagine.\n"
"Si veda anche texture_min_size.\n"
-"Avvertimento: questa opzione è SPERIMENTALE!"
+"Avviso: questa opzione è SPERIMENTALE!"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
@@ -6918,6 +7316,20 @@ msgid "Y-distance over which caverns expand to full size."
msgstr "Distanza Y sopra cui le caverne si espandono a piena grandezza."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+"Distanza-Y sopra cui le terre fluttuanti si affusolano dalla piena densità a "
+"niente.\n"
+"L'affusolamento comincia a questa distanza dal limite Y.\n"
+"Per uno strato solido di terra fluttuante, questo controlla l'altezza di "
+"colline/montagne.\n"
+"Dev'essere inferiore o uguale alla metà della distanza tra i limiti Y."
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Livello Y della superficie media del terreno."
@@ -7019,18 +7431,6 @@ msgstr "Scadenza cURL"
#~ msgid "Floatland mountain height"
#~ msgstr "Altezza delle montagne delle terre fluttuanti"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Densità montuosa delle terre fluttuanti"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Densità montuosa delle terre fluttuanti"
-
-#~ msgid "Floatland level"
-#~ msgstr "Livello delle terre fluttuanti"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Rumore base delle terre fluttuanti"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Rumore base dell'altezza delle terre fluttuanti"
@@ -7088,3 +7488,21 @@ msgstr "Scadenza cURL"
#~ "Regola la codifica della gamma per le tabelle della luce. Numeri maggiori "
#~ "sono più chiari.\n"
#~ "Questa impostazione è solo per il client ed è ignorata dal server."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Percorso dove salvare le schermate."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Intensità dell'occlusione di parallasse"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Limite di code emerge su disco"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Scaricamento e installazione di $1, attendere prego..."
+
+#~ msgid "Back"
+#~ msgstr "Indietro"
+
+#~ msgid "Ok"
+#~ msgstr "OK"
diff --git a/po/ja/minetest.po b/po/ja/minetest.po
index db981bb4b..f274682c4 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-10-29 11:53+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-15 22:41+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 3.9.1\n"
+"X-Generator: Weblate 4.1\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr "リスãƒãƒ¼ãƒ³"
msgid "You died"
msgstr "死んã§ã—ã¾ã£ãŸ"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "OK"
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Luaスクリプトã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ:"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "メインメニュー"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "決定"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "å†æŽ¥ç¶š"
@@ -113,6 +113,10 @@ msgstr ""
"許å¯ã•れる文字㯠[a-z0-9_] ã®ã¿ã§ã™ã€‚"
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "ä»–ã®Modを探ã™"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
@@ -158,16 +162,16 @@ msgid "All packages"
msgstr "ã™ã¹ã¦"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "戻る"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "ãƒ¡ã‚¤ãƒ³ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¸æˆ»ã‚‹"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "$1をインストールã—ã¦ã„ã¾ã™ã€ãŠå¾…ã¡ãã ã•ã„..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "MinetestãŒcURLãªã—ã§ã‚³ãƒ³ãƒ‘イルã•れãŸå ´åˆã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„DBã¯ä½¿ç”¨ã§ãã¾ã›ã‚“"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "ダウンロード中..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -212,15 +216,51 @@ msgstr "削除"
msgid "Update"
msgstr "æ›´æ–°"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "見る"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "ワールドå「$1ã€ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "追加ã®åœ°å½¢"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "高所ã§ä½Žæ¸©"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "高所ã§ä¹¾ç‡¥"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "ãƒã‚¤ã‚ªãƒ¼ãƒ ã®äº¤éŒ¯"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "ãƒã‚¤ã‚ªãƒ¼ãƒ "
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "大ããªæ´žçªŸ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "洞窟"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "作æˆ"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "デコレーション"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Minetest Game ãªã©ã®ã‚²ãƒ¼ãƒ ã‚’ minetest.net ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ãã ã•ã„"
@@ -228,26 +268,144 @@ msgstr "Minetest Game ãªã©ã®ã‚²ãƒ¼ãƒ ã‚’ minetest.net ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ
msgid "Download one from minetest.net"
msgstr "minetest.netã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ãã ã•ã„"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "ダンジョン"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "平らãªåœ°å½¢"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "ç©ºã«æµ®ã‹ã¶å¤§é™¸"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "æµ®éŠå¤§é™¸ï¼ˆå®Ÿé¨“的)"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "ゲーム"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "éžãƒ•ラクタルãªåœ°å½¢ã®ç”Ÿæˆ: æµ·ã¨åœ°ä¸‹"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "丘"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "湿気ã®ã‚ã‚‹å·"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "å·å‘¨è¾ºã®æ¹¿åº¦ã‚’上ã’ã‚‹"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "æ¹–"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "低湿度ã¨é«˜ç†±ã¯æµ…ã„ã¾ãŸã¯ä¹¾ç‡¥ã—ãŸå·ã‚’ã‚‚ãŸã‚‰ã™"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
-msgstr "マップジェãƒãƒ¬-ã‚¿"
+msgstr "マップジェãƒãƒ¬ãƒ¼ã‚¿"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "マップジェãƒãƒ¬ãƒ¼ã‚¿ãƒ•ラグ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "マップジェãƒãƒ¬ãƒ¼ã‚¿å›ºæœ‰ã®ãƒ•ラグ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "å±±"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "æ³¥æµ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "トンãƒãƒ«ã¨æ´žçªŸã®ç¹‹ãŒã‚Š"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "ゲームãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "高度ã§ç†±ã‚’低下"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "é«˜åº¦ã§æ¹¿åº¦ã‚’低下"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "å·"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "æµ·é¢ã®é«˜ã•ã®å·"
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Seed値"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
-msgstr "警告: minimal development testã¯é–‹ç™ºè€…用ã§ã™ã€‚"
+msgid "Smooth transition between biomes"
+msgstr "ãƒã‚¤ã‚ªãƒ¼ãƒ é–“ã®å††æ»‘ãªç§»è¡Œ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr "地形上ã«ç¾ã‚Œã‚‹æ§‹é€ ç‰©ï¼ˆv6ã«ã‚ˆã£ã¦ç”Ÿæˆã•ã‚ŒãŸæœ¨ã‚„ジャングルã®è‰ã«å½±éŸ¿ãªã—)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "地形上ã«ç¾ã‚Œã‚‹æ§‹é€ ç‰©ã€é€šå¸¸ã¯æœ¨ã‚„æ¤ç‰©"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "温帯ã€ç ‚æ¼ "
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "温帯ã€ç ‚æ¼ ã€ã‚¸ãƒ£ãƒ³ã‚°ãƒ«"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "温帯ã€ç ‚æ¼ ã€ã‚¸ãƒ£ãƒ³ã‚°ãƒ«ã€ãƒ„ンドラã€ã‚¿ã‚¤ã‚¬"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "地形表é¢ã®ä¾µé£Ÿ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "木ã¨ã‚¸ãƒ£ãƒ³ã‚°ãƒ«ã®è‰"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "å·ã®æ·±ã•を多様ã«ã™ã‚‹"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "地下深ãã«ã‚ã‚‹éžå¸¸ã«å¤§ããªæ´žçªŸ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr "警告: The Development Testã¯é–‹ç™ºè€…用ã§ã™ã€‚"
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -399,14 +557,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Zã®åºƒãŒã‚Š"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "絶対値"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr "既定値"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "ç·©å’Œã™ã‚‹"
@@ -548,6 +717,10 @@ msgid "Host Server"
msgstr "ホストサーãƒ"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "コンテンツDBã‹ã‚‰ã‚²ãƒ¼ãƒ ã‚’インストール"
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "åå‰ / パスワード"
@@ -615,6 +788,7 @@ msgstr "åå‰ / パスワード"
msgid "Ping"
msgstr "応答速度"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP有効"
@@ -859,6 +1033,14 @@ msgstr "パスワードファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ: "
msgid "Provided world path doesn't exist: "
msgstr "ワールドãŒå­˜åœ¨ã—ã¾ã›ã‚“: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -895,6 +1077,7 @@ msgstr "- ãƒãƒ¼ãƒˆ: "
msgid "- Public: "
msgstr "- 公開サーãƒ: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -1011,7 +1194,7 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
-"ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æ“作:\n"
+"æ—¢å®šã®æ“作:\n"
"ã‚¿ãƒƒãƒæ“作:\n"
"- シングルタップ: ブロックã®ç ´å£Š\n"
"- ダブルタップ: 設置/使用\n"
@@ -1193,6 +1376,14 @@ msgid "Sound muted"
msgstr "消音"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "サウンドシステムã¯ç„¡åй"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "ã“ã®ãƒ“ルドã§ã¯ã‚µã‚¦ãƒ³ãƒ‰ システムãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„"
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "消音 å–り消ã—"
@@ -1224,7 +1415,7 @@ msgstr "ワイヤーフレーム 表示"
msgid "Zoom currently disabled by game or mod"
msgstr "ズームã¯ç¾åœ¨ã‚²ãƒ¼ãƒ ã¾ãŸã¯Modã«ã‚ˆã‚Šç„¡åй"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "決定"
@@ -1345,6 +1536,7 @@ msgstr "å·¦Shift"
msgid "Left Windows"
msgstr "å·¦Windows"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Alt"
@@ -1437,6 +1629,7 @@ msgstr "Pause"
msgid "Play"
msgstr "Play"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Print"
@@ -1473,6 +1666,7 @@ msgstr "å³Windows"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Select"
@@ -1715,10 +1909,15 @@ msgstr "消音"
msgid "Sound Volume: "
msgstr "音é‡: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "エンター "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "ja"
@@ -1742,7 +1941,6 @@ msgstr ""
"\"aux\"ボタンをタップã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1753,14 +1951,13 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-"(X,Y,Z)'スケール'å˜ä½ã§ã®ãƒ¯ãƒ¼ãƒ«ãƒ‰ã®ä¸­å¿ƒã‹ã‚‰ã®ãƒ•ラクタルã®ã‚ªãƒ•セット。\n"
-"望ã¿ã®ç‚¹ã‚’ (0,0) ã«ç§»å‹•ã—ã¦é©åˆ‡ãªã‚¹ãƒãƒ¼ãƒ³ãƒã‚¤ãƒ³ãƒˆã‚’作æˆã—ãŸã‚Šã€\n"
-"'スケール'を増やã—ã¦æœ›ã¿ã®ç‚¹ã«'ズームイン'ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã«\n"
+"(X,Y,Z)ワールドã®ä¸­å¿ƒã‹ã‚‰ã®ãƒ•ラクタルã®ã€Œã‚¹ã‚±ãƒ¼ãƒ«ã€å˜ä½ã®ã‚ªãƒ•セット。\n"
+"目的ã®ãƒã‚¤ãƒ³ãƒˆã‚’(0,0)ã«ç§»å‹•ã—ã¦é©åˆ‡ãªã‚¹ãƒãƒ¼ãƒ³ãƒã‚¤ãƒ³ãƒˆã‚’作æˆã—ãŸã‚Šã€\n"
+"「スケールã€ã‚’増やã—ã¦ç›®çš„ã®ãƒã‚¤ãƒ³ãƒˆã«ã€Œã‚ºãƒ¼ãƒ ã‚¤ãƒ³ã€ã—ãŸã‚Šã™ã‚‹ãŸã‚ã«\n"
"使用ã§ãã¾ã™ã€‚\n"
-"既定ã§ã¯æ—¢å®šã®ãƒ‘ラメータをæŒã¤ãƒžãƒ³ãƒ‡ãƒ«ãƒ–ロー集åˆã®ãŸã‚ã®é©åˆ‡ãª\n"
-"スãƒãƒ¼ãƒ³ãƒã‚¤ãƒ³ãƒˆã«åˆã‚ã›ã¦èª¿æ•´ã•れã¾ã™ã€ä»–ã®çжæ³ã§å¤‰æ›´ã‚’å¿…è¦ã¨ã™ã‚‹\n"
-"ã‹ã‚‚ã—れã¾ã›ã‚“。\n"
-"範囲ã¯ãŠã‚ˆã -2~2 ã§ã™ã€‚ノードã®ã‚ªãƒ•セット㫠'scale' を掛ã‘ã¾ã™ã€‚"
+"既定ã®ãƒ‘ラメータを使用ã—ã¦ãƒžãƒ³ãƒ‡ãƒ«ãƒ–ロ集åˆã®é©åˆ‡ãªã‚¹ãƒãƒ¼ãƒ³ãƒã‚¤ãƒ³ãƒˆã«\n"
+"åˆã‚ã›ã¦èª¿æ•´ã•れã¦ã„ã¾ã™ãŒã€ä»–ã®çжæ³ã§ã¯å¤‰æ›´ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚\n"
+"範囲ã¯ç´„-2〜2ã§ã™ã€‚ノードã®ã‚ªãƒ•セットã«ã€Œã‚¹ã‚±ãƒ¼ãƒ«ã€ã‚’掛ã‘ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -1825,6 +2022,10 @@ msgid "3D mode"
msgstr "3Dモード"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr "3Dモード視差強度"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "å·¨å¤§ãªæ´žçªŸã‚’定義ã™ã‚‹3Dノイズ。"
@@ -1837,6 +2038,18 @@ msgstr ""
"ã¾ãŸã€æµ®éŠå¤§é™¸ã®å±±åœ°ã®æ§‹é€ ã‚’定義ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+"æµ®éŠå¤§é™¸ã®æ§‹é€ ã‚’定義ã™ã‚‹3Dノイズ。\n"
+"既定ã‹ã‚‰å¤‰æ›´ã™ã‚‹ã¨ã€ãƒŽã‚¤ã‚ºã®ã€Œã‚¹ã‚±ãƒ¼ãƒ«ã€ï¼ˆè¦å®šã§ã¯ 0.7)ã®èª¿æ•´ãŒ\n"
+"å¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã€ã“ã®ãƒŽã‚¤ã‚ºã®å€¤ã®ç¯„囲ã¯ç´„ -2.0 ~ 2.0 ã§\n"
+"æµ®éŠå¤§é™¸ã®å…ˆç´°ã‚ŠãŒæœ€ã‚‚è‰¯ãæ©Ÿèƒ½ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "å·ã®å³¡è°·ã®å£ã®æ§‹é€ ã‚’定義ã™ã‚‹3Dノイズ。"
@@ -1897,8 +2110,8 @@ msgid "ABM interval"
msgstr "ABMã®é–“éš”"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
-msgstr "出ç¾ã™ã‚‹ã‚­ãƒ¥ãƒ¼ã®çµ¶å¯¾çš„ãªåˆ¶é™å€¤"
+msgid "Absolute limit of queued blocks to emerge"
+msgstr "キューã«å…¥ã‚Œã‚‰ã‚ŒãŸãƒ–ロックãŒå‡ºç¾ã™ã‚‹çµ¶å¯¾åˆ¶é™"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -1946,6 +2159,21 @@ msgstr ""
"4kスクリーンãªã©ã®ãŸã‚ã®ã€ç”»é¢ã®è§£åƒåº¦ã®è¨­å®šã§ã™ (éžX11/Android環境ã®ã¿)。"
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+"æµ®éŠå¤§é™¸å±¤ã®å¯†åº¦ã‚’調整ã—ã¾ã™ã€‚\n"
+"密度を高ã‚ã‚‹ãŸã‚ã«å€¤ã‚’増やã—ã¾ã™ã€‚æ­£ã¾ãŸã¯è² ã®å€¤ã‚’指定ã§ãã¾ã™ã€‚\n"
+"値 = 0.0: 50% ãŒæµ®éŠå¤§é™¸ã§ã™ã€‚\n"
+"値 = 2.0('mgv7_np_floatland' ã«ã‚ˆã£ã¦é«˜ããªã‚‹å ´åˆãŒã‚りã¾ã™ã€å¸¸ã«\n"
+"念ã®ãŸã‚テスト)浮éŠå¤§é™¸å±¤ã‚’密ã«ä½œæˆã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "詳細"
@@ -1957,10 +2185,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "高所ã®å¯’ã•"
+"「ガンマ補正ã€ã‚’é©ç”¨ã—ã¦ã€å…‰åº¦æ›²ç·šã‚’変更ã—ã¾ã™ã€‚\n"
+"値を大ããã™ã‚‹ã¨ã€ä¸­é–“å…‰ã¨ä½Žå…‰ãƒ¬ãƒ™ãƒ«ãŒæ˜Žã‚‹ããªã‚Šã¾ã™ã€‚\n"
+"値ãŒã€Œ1.0ã€ã®å ´åˆã€å…‰åº¦æ›²ç·šã¯å¤‰æ›´ã•れã¾ã›ã‚“。\n"
+"ã“れã¯ã€æ—¥å…‰ã¨äººå·¥å…‰ã«ã®ã¿å¤§ããªå½±éŸ¿ã‚’与ãˆã€\n"
+"自然ãªå¤œã®å…‰ã«ã¯ã»ã¨ã‚“ã©å½±éŸ¿ã‚’与ãˆã¾ã›ã‚“。"
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2114,24 +2343,20 @@ msgid "Block send optimize distance"
msgstr "ブロックé€ä¿¡æœ€é©åŒ–è·é›¢"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "固定幅フォントã®ãƒ‘ス"
+msgstr "å¤ªå­—ã¨æ–œä½“ã®ãƒ•ォントã®ãƒ‘ス"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "固定幅フォントã®ãƒ‘ス"
+msgstr "å¤ªå­—ã¨æ–œä½“ã®å›ºå®šå¹…フォントã®ãƒ‘ス"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "フォントパス"
+msgstr "太字フォントã®ãƒ‘ス"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "固定幅フォントã®ãƒ‘ス"
+msgstr "太字ã®å›ºå®šå¹…フォントã®ãƒ‘ス"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2147,12 +2372,13 @@ msgstr "ãƒãƒ³ãƒ—マッピング"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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.5ã®é–“ã®ãƒŽãƒ¼ãƒ‰æ•°ã§ã™ã€‚\n"
+"カメラ㨠'近クリッピングé¢' ã®è·é›¢ã€0~0.25ã®é–“ã®ãƒŽãƒ¼ãƒ‰æ•°ã§ã€\n"
+"GLESプラットフォームã§ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚\n"
"ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã“れを変更ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。\n"
"増加ã™ã‚‹ã¨ã€ä½Žæ€§èƒ½GPUã§ã®ç”»åƒã®ä¹±ã‚Œã‚’減らã™ã“ã¨ãŒã§ãã¾ã™ã€‚\n"
"0.1 = 既定値ã€0.25 = 低性能タブレットã«é©ã—ãŸå€¤ã§ã™ã€‚"
@@ -2218,6 +2444,8 @@ 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 ""
@@ -2235,10 +2463,18 @@ msgstr ""
"テクスãƒãƒ£ãƒ‘ックã®é¸æŠžã¯ã‚りã¾ã›ã‚“。å°ã•ãªç”»é¢ã§å¿…è¦ã‹ã‚‚ã—れã¾ã›ã‚“。"
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr "ãƒãƒ£ãƒƒãƒˆã®ãƒ•ォントサイズ"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "ãƒãƒ£ãƒƒãƒˆã‚­ãƒ¼"
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr "ãƒãƒ£ãƒƒãƒˆãƒ­ã‚°ã®ãƒ¬ãƒ™ãƒ«"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "ãƒãƒ£ãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æ•°ã®é™åº¦"
@@ -2437,6 +2673,9 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"トンãƒãƒ«ã®å¹…を制御ã—ã€å°ã•ã„値ã»ã©åºƒã„トンãƒãƒ«ã‚’作æˆã—ã¾ã™ã€‚\n"
+"値 >= 10.0 ã®å ´åˆã€ãƒˆãƒ³ãƒãƒ«ã®ç”ŸæˆãŒå®Œå…¨ã«ç„¡åйã«ãªã‚Šã€é›†ä¸­çš„ãª\n"
+"ノイズ計算ãŒå›žé¿ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2487,7 +2726,6 @@ msgid "Dec. volume key"
msgstr "音é‡ã‚’下ã’るキー"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Decrease this to increase liquid resistance to movement."
msgstr "ã“ã®å€¤ã‚’å°ã•ãã™ã‚‹ã¨ã€ç§»å‹•æ™‚ã®æ¶²ä½“抵抗ãŒå¢—加ã—ã¾ã™ã€‚"
@@ -2524,6 +2762,10 @@ msgid "Default report format"
msgstr "既定ã®ãƒ¬ãƒãƒ¼ãƒˆå½¢å¼"
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr "既定ã®ã‚¹ã‚¿ãƒƒã‚¯æ•°"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2690,6 +2932,8 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"IPv6サãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™ï¼ˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã‚µãƒ¼ãƒãƒ¼ã®ä¸¡æ–¹ã«å¯¾ã—ã¦ï¼‰ã€‚\n"
+"機能ã™ã‚‹ãŸã‚ã«ã¯IPv6接続ãŒå¿…è¦ã§ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -2777,6 +3021,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"頂点ãƒãƒƒãƒ•ァオブジェクトを有効ã«ã—ã¾ã™ã€‚\n"
+"ã“れã«ã‚ˆã‚Šã€ã‚°ãƒ©ãƒ•ィックスã®ãƒ‘フォーマンスãŒå¤§å¹…ã«å‘上ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -2787,14 +3033,14 @@ msgstr ""
"例: 0 æºã‚Œãªã—; 1.0 æ¨™æº–ã®æºã‚Œ; 2.0 標準ã®å€ã®æºã‚Œã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
-"IPv6 サーãƒã®å®Ÿè¡Œã‚’有効/無効ã«ã—ã¾ã™ã€‚\n"
-"bind_address ãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ç„¡è¦–ã•れã¾ã™ã€‚"
+"IPv6サーãƒãƒ¼ã®å®Ÿè¡Œã‚’有効/無効ã«ã—ã¾ã™ã€‚\n"
+"bind_addressãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ç„¡è¦–ã•れã¾ã™ã€‚\n"
+"enable_ipv6を有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -2803,6 +3049,10 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Hableã®ã€Œã‚¢ãƒ³ãƒãƒ£ãƒ¼ãƒ†ãƒƒãƒ‰2ã€ãƒ•ィルムトーンマッピングを有効ã«ã—ã¾ã™ã€‚\n"
+"写真フィルムã®ãƒˆãƒ¼ãƒ³ã‚«ãƒ¼ãƒ–ã¨ã€ã“れãŒãƒã‚¤ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯ãƒ¬ãƒ³ã‚¸ã‚¤ãƒ¡ãƒ¼ã‚¸ã®å¤–観ã«\n"
+"ã©ã®ã‚ˆã†ã«è¿‘ä¼¼ã™ã‚‹ã‹ã‚’シミュレートã—ã¾ã™ã€‚ミッドレンジã®ã‚³ãƒ³ãƒˆãƒ©ã‚¹ãƒˆãŒ\n"
+"ã‚ãšã‹ã«å¼·åŒ–ã•れã€ãƒã‚¤ãƒ©ã‚¤ãƒˆã¨ã‚·ãƒ£ãƒ‰ã‚¦ãŒå¾ã€…ã«åœ§ç¸®ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -2850,6 +3100,10 @@ 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"
@@ -2868,6 +3122,22 @@ msgstr ""
"ç›®ã«è¦‹ãˆã‚‹ã‚¹ãƒšãƒ¼ã‚¹ãŒç”Ÿã˜ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+"æµ®éŠå¤§é™¸ã®å…ˆç´°ã‚ŠæŒ‡æ•°ã€‚先細りã®å‹•作を変更ã—ã¾ã™ã€‚\n"
+"値 = 1.0ã¯ã€å‡ä¸€ã§ç·šå½¢ãªå…ˆç´°ã‚Šã‚’作æˆã—ã¾ã™ã€‚\n"
+"値 > 1.0ã¯ã€è¦å®šã®åˆ†é›¢ã•ã‚ŒãŸæµ®éŠå¤§é™¸ã«é©ã—ãŸæ»‘らã‹ãªå…ˆç´°ã‚Šã‚’\n"
+"作æˆã—ã¾ã™ã€‚\n"
+"値 < 1.0(例 0.25)ã¯ã€ã‚ˆã‚Šæ˜Žç¢ºãªè¡¨é¢ãƒ¬ãƒ™ãƒ«ã§å¹³å¦ãªä½Žåœ°ã‚’\n"
+"作æˆã—ã€å¯†ãªæµ®éŠå¤§é™¸å±¤ã«é©ã—ã¦ã„ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "ãƒãƒ¼ã‚ºãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ã®FPS"
@@ -2884,9 +3154,8 @@ msgid "Fall bobbing factor"
msgstr "è½ä¸‹æ™‚ã®ä¸Šä¸‹ã®æºã‚Œä¿‚æ•°"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "フォールãƒãƒƒã‚¯ãƒ•ォント"
+msgstr "フォールãƒãƒƒã‚¯ãƒ•ォントã®ãƒ‘ス"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -2986,6 +3255,34 @@ msgid "Fixed virtual joystick"
msgstr "ãƒãƒ¼ãƒãƒ£ãƒ«ãƒ‘ッドを固定"
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr "æµ®éŠå¤§é™¸ã®å¯†åº¦"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr "æµ®éŠå¤§é™¸ã®æœ€å¤§ Y"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr "æµ®éŠå¤§é™¸ã®æœ€å° Y"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr "æµ®éŠå¤§é™¸ãƒŽã‚¤ã‚º"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr "æµ®éŠå¤§é™¸ã®å…ˆç´°ã‚ŠæŒ‡æ•°"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr "æµ®éŠå¤§é™¸ã®å…ˆç´°ã‚Šè·é›¢"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr "æµ®éŠå¤§é™¸ã®æ°´ä½"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "飛行キー"
@@ -3007,11 +3304,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"
@@ -3027,15 +3324,23 @@ msgstr "フォントã®å¤§ãã•"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "既定ã®ãƒ•ォントã®ãƒ•ォント サイズ (pt)。"
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "フォールãƒãƒƒã‚¯ãƒ•ォントã®ãƒ•ォント サイズ (pt)。"
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "固定幅フォントã®ãƒ•ォントサイズ (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 ""
+"最近ã®ãƒãƒ£ãƒƒãƒˆãƒ†ã‚­ã‚¹ãƒˆã¨ãƒãƒ£ãƒƒãƒˆãƒ—ロンプトã®ãƒ•ォントサイズ(ãƒã‚¤ãƒ³ãƒˆï¼‰ã€‚\n"
+"値 0 ã¯è¦å®šã®ãƒ•ォントサイズを使用ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3178,18 +3483,20 @@ msgstr ""
"ã“ã®ãƒ•ラグãŒã™ã¹ã¦ã®è£…飾を制御ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Gradient of light curve at maximum light level.\n"
"Controls the contrast of the highest light levels."
-msgstr "最大光レベルã§ã®å…‰åº¦æ›²ç·šã®å‹¾é…。"
+msgstr ""
+"最大光レベルã§ã®å…‰åº¦æ›²ç·šã®å‹¾é…。\n"
+"最も高ã„光レベルã®ã‚³ãƒ³ãƒˆãƒ©ã‚¹ãƒˆã‚’制御ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Gradient of light curve at minimum light level.\n"
"Controls the contrast of the lowest light levels."
-msgstr "最å°å…‰ãƒ¬ãƒ™ãƒ«ã§ã®å…‰åº¦æ›²ç·šã®å‹¾é…。"
+msgstr ""
+"最å°å…‰ãƒ¬ãƒ™ãƒ«ã§ã®å…‰åº¦æ›²ç·šã®å‹¾é…。\n"
+"最も低ã„光レベルã®ã‚³ãƒ³ãƒˆãƒ©ã‚¹ãƒˆã‚’制御ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3220,7 +3527,6 @@ msgid "HUD toggle key"
msgstr "HUD表示切り替ãˆã‚­ãƒ¼"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- legacy: (try to) mimic old behaviour (default for release).\n"
@@ -3228,10 +3534,10 @@ msgid ""
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
"廃止予定ã®Lua API呼ã³å‡ºã—ã®å‡¦ç†:\n"
-"- legacy: å¤ã„振る舞ã„を模倣ã™ã‚‹(試ã¿ã‚‹) (ãƒªãƒªãƒ¼ã‚¹ã®æ—¢å®šå€¤)。\n"
-"- log: 廃止予定ã®å‘¼ã³å‡ºã—を模倣ã—ã¦ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’記録 (デãƒãƒƒã‚°ã®æ—¢å®š"
+"- legacy: å¤ã„振る舞ã„を模倣ã™ã‚‹(試ã¿ã‚‹) (ãƒªãƒªãƒ¼ã‚¹ç‰ˆã®æ—¢å®šå€¤)。\n"
+"- log: 廃止予定ã®å‘¼ã³å‡ºã—を模倣ã—ã¦ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’記録 (デãƒãƒƒã‚°ç‰ˆã®æ—¢å®š"
"値)。\n"
-"- error: 廃止予定ã®å‘¼ã³å‡ºã—ã®ä½¿ç”¨ã‚’中止ã™ã‚‹ (Modé–‹ç™ºè€…ã«æŽ¨å¥¨)。"
+"- error: 廃止予定ã®å‘¼ã³å‡ºã—ã®ä½¿ç”¨ã‚’中止ã™ã‚‹ (Mod開発者å‘ã‘ã«æŽ¨å¥¨)。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3469,6 +3775,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"液体波ã®ç§»å‹•速度。高ã„値=より速ã„。\n"
+"è² ã®å€¤ã®å ´åˆã€æ¶²ä½“æ³¢ã¯é€†æ–¹å‘ã«ç§»å‹•ã—ã¾ã™ã€‚\n"
+"æºã‚Œã‚‹æ¶²ä½“ を有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3714,14 +4023,12 @@ msgid "Invert vertical mouse movement."
msgstr "マウスã®ä¸Šä¸‹ã®å‹•ãã‚’å転ã•ã›ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "固定幅フォントã®ãƒ‘ス"
+msgstr "斜体フォントã®ãƒ‘ス"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "固定幅フォントã®ãƒ‘ス"
+msgstr "斜体ã®å›ºå®šå¹…フォントã®ãƒ‘ス"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4551,15 +4858,15 @@ msgstr "大ããªæ´žçªŸã®æ·±ã•"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "大ããªæ´žçªŸã®æœ€å¤§æ•°"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "大ããªæ´žçªŸã®æœ€å°æ•°"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "大ããªæ´žçªŸã®æµ¸æ°´å‰²åˆ"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4593,13 +4900,12 @@ msgid ""
msgstr "サーãƒã®é–“éš”ã®é•·ã•ã¨ã‚ªãƒ–ジェクトãŒé€šå¸¸ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§æ›´æ–°ã•れる間隔。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"有効ã«ã™ã‚‹ã¨è‘‰ã‚’æºã‚‰ã›ã¾ã™ã€‚\n"
-"ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãŒæœ‰åйã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
+"液体波ã®é•·ã•。\n"
+"æºã‚Œã‚‹æ¶²ä½“ を有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
@@ -4634,42 +4940,28 @@ msgstr ""
"- verbose"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost"
-msgstr "光度曲線ミッドブースト"
+msgstr "光度曲線ブースト"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost center"
-msgstr "光度曲線ミッドブーストã®ä¸­å¿ƒ"
+msgstr "光度曲線ブーストã®ä¸­å¿ƒ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost spread"
-msgstr "光度曲線ミッドブーストã®åºƒãŒã‚Š"
+msgstr "光度曲線ブーストã®åºƒãŒã‚Š"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve gamma"
-msgstr "光度曲線ミッドブースト"
+msgstr "光度曲線ã®ã‚¬ãƒ³ãƒž"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve high gradient"
-msgstr "光度曲線ミッドブースト"
+msgstr "光度曲線ã®é«˜å‹¾é…"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve low gradient"
-msgstr "光度曲線ミッドブーストã®ä¸­å¿ƒ"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "ディスク上ã«å‡ºç¾ã™ã‚‹ã‚­ãƒ¥ãƒ¼ã®åˆ¶é™"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "生æˆã•れã¦å‡ºç¾ã™ã‚‹ã‚­ãƒ¥ãƒ¼ã®åˆ¶é™"
+msgstr "光度曲線ã®ä½Žå‹¾é…"
#: src/settings_translation_file.cpp
msgid ""
@@ -4746,6 +5038,10 @@ msgid "Lower Y limit of dungeons."
msgstr "ダンジョンã®Y値ã®ä¸‹é™ã€‚"
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr "æµ®éŠå¤§é™¸ã® Y ã®ä¸‹é™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "メインメニュースクリプト"
@@ -4775,7 +5071,6 @@ msgid "Map generation attributes specific to Mapgen Carpathian."
msgstr "マップジェãƒãƒ¬ãƒ¼ã‚¿ 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."
@@ -4784,14 +5079,13 @@ msgstr ""
"æ™‚æŠ˜ã€æ¹–や丘を平らãªãƒ¯ãƒ¼ãƒ«ãƒ‰ã«è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
#: 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 ""
"マップジェãƒãƒ¬ãƒ¼ã‚¿ fractal ã«å›ºæœ‰ã®ãƒžãƒƒãƒ—生æˆå±žæ€§ã€‚\n"
-"'terrain' ã¯éžãƒ•ラクタルãªåœ°å½¢ãŒã§ãるよã†ã«ã—ã¾ã™:\n"
+"'terrain' ã¯éžãƒ•ラクタルãªåœ°å½¢ã®ç”Ÿæˆã‚’å¯èƒ½ã«ã—ã¾ã™:\n"
"æµ·ã€å³¶ãã—ã¦åœ°ä¸‹ã€‚"
#: src/settings_translation_file.cpp
@@ -4829,10 +5123,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
"マップジェãƒãƒ¬ãƒ¼ã‚¿ v7 ã«å›ºæœ‰ã®ãƒžãƒƒãƒ—生æˆå±žæ€§ã€‚\n"
-"'ridges' ã¯å·ãŒã§ãるよã†ã«ã—ã¾ã™ã€‚"
+"'ridges': å·ã€‚\n"
+"'floatlands': ç©ºã«æµ®ã‹ã¶å¤§é™¸ã€‚\n"
+"'caverns': 地下深ãã®å·¨å¤§ãªæ´žçªŸã€‚"
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -4919,10 +5217,6 @@ msgid "Mapgen debug"
msgstr "マップジェãƒãƒ¬ãƒ¼ã‚¿ã®ãƒ‡ãƒãƒƒã‚°"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "マップジェãƒãƒ¬ãƒ¼ã‚¿ãƒ•ラグ"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "マップジェãƒãƒ¬ãƒ¼ã‚¿å"
@@ -4964,14 +5258,13 @@ 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
-#, fuzzy
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
@@ -4994,18 +5287,18 @@ msgstr "読ã¿è¾¼ã¿ã®ãŸã‚ã«ã‚­ãƒ¥ãƒ¼ã«å…¥ã‚Œã‚‹ã“ã¨ãŒã§ãる最大ブ
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
-"生æˆã•れるキューã«å…¥ã‚Œã‚‹æœ€å¤§ãƒ–ロック数。\n"
-"é©åˆ‡ãªé‡ã‚’自動的ã«é¸æŠžã™ã‚‹ã«ã¯ã€ç©ºç™½ã‚’設定ã—ã¾ã™ã€‚"
+"生æˆã•れã¦ã‚­ãƒ¥ãƒ¼ã«å…¥ã‚Œã‚‰ã‚Œã‚‹æœ€å¤§ãƒ–ロック数。\n"
+"ã“ã®åˆ¶é™ã¯ãƒ—レイヤーã”ã¨ã«é©ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
-"ファイルã‹ã‚‰èª­ã¿è¾¼ã¾ã‚Œã‚‹ã‚­ãƒ¥ãƒ¼ã«å…¥ã‚Œã‚‹æœ€å¤§ãƒ–ロック数。\n"
-"é©åˆ‡ãªé‡ã‚’自動的ã«é¸æŠžã™ã‚‹ã«ã¯ã€ç©ºç™½ã‚’設定ã—ã¾ã™ã€‚"
+"ファイルã‹ã‚‰èª­ã¿è¾¼ã¾ã‚Œã¦ã‚­ãƒ¥ãƒ¼ã«å…¥ã‚Œã‚‰ã‚Œã‚‹æœ€å¤§ãƒ–ロック数。\n"
+"ã“ã®åˆ¶é™ã¯ãƒ—レイヤーã”ã¨ã«é©ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5098,6 +5391,10 @@ msgid "Method used to highlight selected object."
msgstr "é¸æŠžã—ãŸã‚ªãƒ–ジェクトを強調表示ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる方法。"
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr "ãƒãƒ£ãƒƒãƒˆã«æ›¸ãè¾¼ã¾ã‚Œã‚‹æœ€å°é™ã®ãƒ­ã‚°ãƒ¬ãƒ™ãƒ«ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "ミニマップ"
@@ -5110,13 +5407,12 @@ msgid "Minimap scan height"
msgstr "ミニマップã®ã‚¹ã‚­ãƒ£ãƒ³é«˜ã•"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "マップãƒãƒ£ãƒ³ã‚¯ã”ã¨ã®ãƒ€ãƒ³ã‚¸ãƒ§ãƒ³ã®æ•°ã‚’決定ã™ã‚‹3Dノイズ。"
+msgstr "マップãƒãƒ£ãƒ³ã‚¯ã‚ãŸã‚Šã®å¤§ããªæ´žçªŸã®ä¹±æ•°ã®æœ€å°å€¤ã€‚"
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "マップãƒãƒ£ãƒ³ã‚¯ã‚ãŸã‚Šã®å°ã•ãªæ´žçªŸã®ä¹±æ•°ã®æœ€å°å€¤ã€‚"
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
@@ -5215,8 +5511,8 @@ msgid ""
msgstr "プレイヤーãŒå‚加ã—ãŸã¨ãã«ã‚µãƒ¼ãƒä¸€è¦§ã«è¡¨ç¤ºã•れるサーãƒã®åå‰ã€‚"
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
-msgstr "クリッピングé¢ä»˜è¿‘"
+msgid "Near plane"
+msgstr "è¿‘ãã®é¢"
#: src/settings_translation_file.cpp
msgid "Network"
@@ -5269,9 +5565,6 @@ msgstr "出ç¾ã™ã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰æ•°"
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5283,9 +5576,6 @@ msgid ""
"'on_generated'. For many users the optimum setting may be '1'."
msgstr ""
"使用ã™ã‚‹å‡ºç¾ã‚¹ãƒ¬ãƒƒãƒ‰æ•°ã€‚\n"
-"警告: 'num_emerge_threads' ㌠1 より大ãã„ã¨ãã«ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã‚’引ãèµ·ã“ã™\n"
-"å¯èƒ½æ€§ã®ã‚ã‚‹ãƒã‚°ãŒç¾åœ¨è¤‡æ•°ã‚りã¾ã™ã€‚ã“ã®è­¦å‘ŠãŒå‰Šé™¤ã•れるã¾ã§ã¯\n"
-"ã“ã®å€¤ã‚’è¦å®šã® '1' ã«è¨­å®šã™ã‚‹ã“ã¨ã‚’å¼·ããŠå‹§ã‚ã—ã¾ã™ã€‚\n"
"値 0:\n"
"- è‡ªå‹•é¸æŠžã€‚ 出ç¾ã‚¹ãƒ¬ãƒƒãƒ‰æ•°ã¯\n"
"- 'プロセッサー数 - 2'ã€ä¸‹é™ã¯ 1 ã§ã™ã€‚\n"
@@ -5322,12 +5612,12 @@ msgstr "ä¸é€æ˜Žãªæ¶²ä½“"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
-msgstr ""
+msgstr "既定ã®ãƒ•ォントã®å½±ã®ä¸é€æ˜Žåº¦ï¼ˆé€éŽï¼‰ã¯0ã‹ã‚‰255ã®é–“ã§ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
+msgstr "フォールãƒãƒƒã‚¯ãƒ•ォントã®å½±ã®ä¸é€æ˜Žåº¦ï¼ˆé€éŽï¼‰ã¯0ã‹ã‚‰255ã®é–“ã§ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -5367,10 +5657,6 @@ msgid "Parallax occlusion scale"
msgstr "視差é®è”½ã‚¹ã‚±ãƒ¼ãƒ«"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "視差é®è”½å¼·åº¦"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5378,10 +5664,21 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"フォールãƒãƒƒã‚¯ãƒ•ォントã®ãƒ‘ス。\n"
+"「フリータイプフォントã€ãŒæœ‰åйãªå ´åˆï¼šTrueTypeフォントã§ãªã‘れã°ãªã‚Šã¾ã›"
+"ん。\n"
+"「フリータイプフォントã€ãŒç„¡åйãªå ´åˆï¼šãƒ“ットマップã¾ãŸã¯XMLベクターフォント\n"
+"ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n"
+"ã“ã®ãƒ•ォントã¯ç‰¹å®šã®è¨€èªžã§ä½¿ç”¨ã•れるã‹ã€è¦å®šã®ãƒ•ォントãŒä½¿ç”¨ã§ããªã„\n"
+"ã¨ãã«ä½¿ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "スクリーンショットをä¿å­˜ã™ã‚‹ãƒ‘ス。"
+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 ""
@@ -5404,6 +5701,12 @@ 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"
+"「フリータイプフォントã€ãŒæœ‰åйãªå ´åˆï¼šTrueTypeフォントã§ãªã‘れã°ãªã‚Šã¾ã›"
+"ん。\n"
+"「フリータイプフォントã€ãŒç„¡åйãªå ´åˆï¼šãƒ“ットマップã¾ãŸã¯XMLベクターフォント\n"
+"ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n"
+"ã“ã®ãƒ•ォールãƒãƒƒã‚¯ãƒ•ォントã¯ãƒ•ォントãŒèª­ã¿è¾¼ã‚ãªã„ã¨ãã«ä½¿ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -5412,12 +5715,26 @@ 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 ""
+"固定幅フォントã®ãƒ‘ス。\n"
+"「フリータイプフォントã€ãŒæœ‰åйãªå ´åˆï¼šTrueTypeフォントã§ãªã‘れã°ãªã‚Šã¾ã›"
+"ん。\n"
+"「フリータイプフォントã€ãŒç„¡åйãªå ´åˆï¼šãƒ“ットマップã¾ãŸã¯XMLベクターフォント\n"
+"ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n"
+"ã“ã®ãƒ•ォントã¯ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã‚„観測記録画é¢ãªã©ã§ä½¿ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
msgstr "ウィンドウフォーカス喪失時ã«ä¸€æ™‚åœæ­¢"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr "ファイルã‹ã‚‰èª­ã¿è¾¼ã¾ã‚Œã‚‹ã‚­ãƒ¥ãƒ¼ãƒ–ロックã®ãƒ—レイヤーã”ã¨ã®åˆ¶é™"
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr "生æˆã•れるキューブロックã®ãƒ—レイヤーã”ã¨ã®åˆ¶é™"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "物ç†"
@@ -5494,8 +5811,24 @@ msgid "Profiling"
msgstr "プロファイリング"
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "Prometheus listener address"
+msgstr "プロメテウスリスナーã®ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
msgstr ""
+"プロメテウスリスナーã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã€‚\n"
+"minetest ㌠ENABLE_PROMETHEUS オプションを有効ã«ã—ã¦ã‚³ãƒ³ãƒ‘イルã•れã¦ã„ã‚‹å ´åˆã€\n"
+"ãã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ãƒ—ロメテウスã®ãƒ¡ãƒˆãƒªãƒƒã‚¯ã‚¹ãƒªã‚¹ãƒŠãƒ¼ã‚’有効ã«ã—ã¾ã™ã€‚\n"
+"メトリック㯠http://127.0.0.1:30000/metrics ã§å–å¾—å¯èƒ½"
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr "大ããªæ´žçªŸã®æ¶²ä½“ã‚’å«ã‚€å‰²åˆã§ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -5523,9 +5856,8 @@ msgid "Recent Chat Messages"
msgstr "最近ã®ãƒãƒ£ãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "レãƒãƒ¼ãƒˆãƒ‘ス"
+msgstr "通常フォントã®ãƒ‘ス"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5737,7 +6069,6 @@ msgid "Selection box width"
msgstr "é¸æŠžãƒœãƒƒã‚¯ã‚¹ã®å¹…"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -5828,30 +6159,27 @@ msgid "Set the maximum character length of a chat message sent by clients."
msgstr "クライアントã‹ã‚‰é€ä¿¡ã•れるãƒãƒ£ãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æœ€å¤§æ–‡å­—数を設定ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
-"有効ã«ã™ã‚‹ã¨è‘‰ã‚’æºã‚‰ã›ã¾ã™ã€‚\n"
+"有効ã«ã™ã‚‹ã¨è‘‰ãŒæºã‚Œã¾ã™ã€‚\n"
"ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãŒæœ‰åйã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"有効ã«ã™ã‚‹ã¨æ°´ã‚’æºã‚‰ã›ã¾ã™ã€‚\n"
+"有効ã«ã™ã‚‹ã¨æ¶²ä½“ãŒæºã‚Œã¾ã™ï¼ˆæ°´ã®ã‚ˆã†ãªï¼‰ã€‚\n"
"ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãŒæœ‰åйã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
-"有効ã«ã™ã‚‹ã¨è‰èŠ±ã‚’æºã‚‰ã›ã¾ã™ã€‚\n"
+"有効ã«ã™ã‚‹ã¨è‰èŠ±ãŒæºã‚Œã¾ã™ã€‚\n"
"ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãŒæœ‰åйã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -5870,18 +6198,20 @@ msgstr ""
"ã“れã¯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 "フォントã®å½±ã®ã‚ªãƒ•セットã€0 ãªã‚‰ã°å½±ã¯æç”»ã•れã¾ã›ã‚“。"
+msgstr ""
+"既定ã®ãƒ•ォントã®å½±ã®ã‚ªãƒ•セット(ピクセルå˜ä½ï¼‰ã€‚ 0ã®å ´åˆã€å½±ã¯æç”»ã•れã¾ã›"
+"ん。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
"be drawn."
-msgstr "フォントã®å½±ã®ã‚ªãƒ•セットã€0 ãªã‚‰ã°å½±ã¯æç”»ã•れã¾ã›ã‚“。"
+msgstr ""
+"フォールãƒãƒƒã‚¯ãƒ•ォントã®å½±ã®ã‚ªãƒ•セット(ピクセルå˜ä½ï¼‰ã€‚ \n"
+"0ã®å ´åˆã€å½±ã¯æç”»ã•れã¾ã›ã‚“。"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -5935,11 +6265,11 @@ 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."
@@ -6007,14 +6337,24 @@ 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"
+"Mod ã¾ãŸã¯ã‚²ãƒ¼ãƒ ã¯ã€ç‰¹å®šã®ï¼ˆã¾ãŸã¯ã™ã¹ã¦ã®ï¼‰ã‚¢ã‚¤ãƒ†ãƒ ã®ã‚¹ã‚¿ãƒƒã‚¯æ•°ã‚’\n"
+"明示的ã«è¨­å®šã™ã‚‹å ´åˆãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。"
+
+#: src/settings_translation_file.cpp
msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
msgstr ""
-"光度曲線ミッドブーストã®åºƒãŒã‚Šã€‚\n"
-"ãƒŸãƒƒãƒ‰ãƒ–ãƒ¼ã‚¹ãƒˆã‚¬ã‚¦ã‚¹åˆ†å¸ƒã®æ¨™æº–å差。"
+"光度曲線ブースト範囲ã®åºƒãŒã‚Šã€‚\n"
+"ブーストã™ã‚‹ç¯„囲ã®å¹…を制御ã—ã¾ã™ã€‚\n"
+"å…‰åº¦æ›²ç·šãƒ–ãƒ¼ã‚¹ãƒˆã‚¬ã‚¦ã‚¹åˆ†å¸ƒã®æ¨™æº–å差。"
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6033,6 +6373,10 @@ msgid "Step mountain spread noise"
msgstr "ステップマウンテンã®åºƒãŒã‚ŠãƒŽã‚¤ã‚º"
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr "3Dモード視差ã®å¼·ã•ã§ã™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "生æˆã•ã‚ŒãŸæ³•線マップã®å¼·ã•ã§ã™ã€‚"
@@ -6042,10 +6386,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "視差ã®å¼·ã•ã§ã™ã€‚"
+"光度曲線ブーストã®å¼·åº¦ã€‚\n"
+"3ã¤ã®ã€Œãƒ–ーストã€ãƒ‘ラメーターã¯ã€æ˜Žã‚‹ã•をブーストã™ã‚‹\n"
+"光度曲線ã®ç¯„囲を定義ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6056,6 +6399,28 @@ msgid "Strip color codes"
msgstr "色コードをå–り除ã"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+"å¯†ãªæµ®éŠå¤§é™¸å±¤ã«é…ç½®ã•ã‚Œã‚‹ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æ°´ã®è¡¨é¢ãƒ¬ãƒ™ãƒ«ã€‚\n"
+"æ°´ã¯è¦å®šã§ç„¡åйã«ãªã£ã¦ãŠã‚Šã€ã“ã®å€¤ãŒ 'mgv7_floatland_ymax' - 'mgv7_floatland_taper'\n"
+"(上部ã®å…ˆç´°ã‚Šé–‹å§‹ç‚¹ï¼‰ã‚ˆã‚Šä¸Šã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿é…ç½®ã•れã¾ã™ã€‚\n"
+"***警告ã€ã‚µãƒ¼ãƒãƒ¼ã®ãƒ‘フォーマンスã¸ã®æ½œåœ¨çš„ãªå±é™ºæ€§***:\n"
+"æ°´ã®é…置を有効ã«ã™ã‚‹å ´åˆã€æµ®éŠå¤§é™¸ã‚’密ãªå±¤ã«ã™ã‚‹ãŸã‚ã«\n"
+"'mgv7_floatland_density' ã‚’2.0(ã¾ãŸã¯ 'mgv7_np_floatland' ã«å¿œã˜ã¦ä»–ã®å¿…è¦ãªå€¤ï¼‰ã«\n"
+"設定ã—ã¦ã€ã‚µãƒ¼ãƒãƒ¼ã«é›†ä¸­ã™ã‚‹æ¥µç«¯ãªæ°´ã®æµã‚Œã‚’é¿ã‘ã€ä¸‹ã®ä¸–界表é¢ã¸ã®å¤§è¦æ¨¡ãª\n"
+"洪水をé¿ã‘るよã†ã«ãƒ†ã‚¹ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "SQLiteåŒæœŸ"
@@ -6165,6 +6530,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"æºã‚Œã‚‹æ¶²ä½“ã®è¡¨é¢ã®æœ€å¤§é«˜ã•。\n"
+"4.0 =波高ã¯2ノードã§ã™ã€‚\n"
+"0.0 =æ³¢ã¯ã¾ã£ãŸãå‹•ãã¾ã›ã‚“。\n"
+"既定ã¯1.0(1/2ノード)ã§ã™ã€‚\n"
+"æºã‚Œã‚‹æ¶²ä½“ を有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6187,13 +6557,13 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
"アクティブブロックã®å¯¾è±¡ã¨ãªã‚‹å„プレイヤーã®å‘¨å›²ã®ãƒ–ロックã®é‡ã®åŠå¾„ã€\n"
"マップブロック(16ノード)ã§å®šã‚ã¾ã™ã€‚\n"
"アクティブブロックã®ã‚ªãƒ–ジェクトã¯ãƒ­ãƒ¼ãƒ‰ã•れã€ABMãŒå®Ÿè¡Œã•れã¾ã™ã€‚\n"
"ã“れã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–オブジェクト(モブ)ãŒç¶­æŒã•れる最å°ç¯„囲ã§ã‚‚ã‚りã¾ã™ã€‚\n"
-"ã“れ㯠active_object_range ã¨ä¸€ç·’ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
+"ã“れ㯠active_object_send_range_blocks ã¨ä¸€ç·’ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -6327,14 +6697,13 @@ msgid "Trilinear filtering"
msgstr "トライリニアフィルタリング"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"True = 256\n"
"False = 128\n"
"Usable to make minimap smoother on slower machines."
msgstr ""
-"有効 = 256\n"
-"無効 = 128\n"
+"True = 256\n"
+"False = 128\n"
"よりé…ã„マシンã§ãƒŸãƒ‹ãƒžãƒƒãƒ—を滑らã‹ã«ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -6375,6 +6744,10 @@ msgid "Upper Y limit of dungeons."
msgstr "ダンジョンã®Y値ã®ä¸Šé™ã€‚"
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr "æµ®éŠå¤§é™¸ã® Y ã®ä¸Šé™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "平らã§ã¯ãªã立体ãªé›²ã‚’使用ã—ã¾ã™ã€‚"
@@ -6510,13 +6883,12 @@ msgid "Volume"
msgstr "音é‡"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
-"視差é®è”½ãƒžãƒƒãƒ”ングを有効ã«ã—ã¾ã™ã€‚\n"
-"ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãŒæœ‰åйã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
+"ã™ã¹ã¦ã®éŸ³ã®éŸ³é‡ã€‚\n"
+"サウンド システムを有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -6561,24 +6933,20 @@ msgid "Waving leaves"
msgstr "æºã‚Œã‚‹è‘‰"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
msgstr "æºã‚Œã‚‹æ¶²ä½“"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "æºã‚Œã‚‹æ°´ã®æ³¢ã®é«˜ã•"
+msgstr "æºã‚Œã‚‹æ¶²ä½“ã®æ³¢ã®é«˜ã•"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
-msgstr "æºã‚Œã‚‹æ°´ã®æ³¢ã®é€Ÿåº¦"
+msgstr "æºã‚Œã‚‹æ¶²ä½“ã®æ³¢ã®é€Ÿåº¦"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "æºã‚Œã‚‹æ°´ã®æ³¢é•·"
+msgstr "æºã‚Œã‚‹æ¶²ä½“ã®æ³¢é•·"
#: src/settings_translation_file.cpp
msgid "Waving plants"
@@ -6631,14 +6999,15 @@ msgstr ""
"ã—ã¦ã‚‚使用ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Whether FreeType fonts are used, requires FreeType support to be compiled "
"in.\n"
"If disabled, bitmap and XML vectors fonts are used instead."
msgstr ""
-"フリータイプフォントを使用ã™ã‚‹ã«ã¯ã€ãƒ•リータイプをサãƒãƒ¼ãƒˆã—ã¦\n"
-"コンパイルã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
+"フリータイプフォントを使用ã™ã‚‹ã‹ã©ã†ã‹ã¯ã€ãƒ•リータイプをサãƒãƒ¼ãƒˆã—ã¦\n"
+"コンパイルã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ \n"
+"無効ã«ã—ãŸå ´åˆã€ä»£ã‚りã«ãƒ“ットマップãŠã‚ˆã³ XML ベクターフォントãŒä½¿ç”¨ã•れã¾"
+"ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -6679,6 +7048,10 @@ 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 ""
@@ -6759,6 +7132,18 @@ msgid "Y-distance over which caverns expand to full size."
msgstr "大ããªæ´žçªŸãŒæœ€å¤§ã‚µã‚¤ã‚ºã«æ‹¡å¤§ã™ã‚‹Yã®è·é›¢ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+"完全ãªå¯†åº¦ã‹ã‚‰ã‚¼ãƒ­ã¾ã§ã®æµ®éŠå¤§é™¸å…ˆç´°ã‚Šã® Yè·é›¢ã€‚\n"
+"先細りã¯ã€Y制é™ã‹ã‚‰ã“ã®è·é›¢ã§å§‹ã¾ã‚Šã¾ã™ã€‚\n"
+"å¯†ãªæµ®éŠå¤§é™¸å±¤ã®å ´åˆã€ã“れã¯ä¸˜/å±±ã®é«˜ã•を制御ã—ã¾ã™ã€‚\n"
+"Y制é™é–“ã®è·é›¢ã®åŠåˆ†ä»¥ä¸‹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。"
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "å¹³å‡åœ°å½¢é¢ã®Yレベル。"
@@ -6854,18 +7239,6 @@ msgstr "cURLタイムアウト"
#~ msgid "Floatland mountain height"
#~ msgstr "æµ®éŠå¤§é™¸ã®å±±ã®é«˜ã•"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "æµ®éŠå¤§é™¸ã®å±±æŒ‡æ•°"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "æµ®éŠå¤§é™¸ã®å±±ã®å¯†åº¦"
-
-#~ msgid "Floatland level"
-#~ msgstr "æµ®éŠå¤§é™¸ã®æ°´ä½"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "æµ®éŠå¤§é™¸ã®åŸºæº–ノイズ"
-
#~ msgid "Floatland base height noise"
#~ msgstr "æµ®éŠå¤§é™¸ã®åŸºæº–高ã•ノイズ"
@@ -6917,3 +7290,21 @@ msgstr "cURLタイムアウト"
#~ msgstr ""
#~ "ライトテーブルã®ã‚¬ãƒ³ãƒžè£œæ­£ã‚’調整ã—ã¾ã™ã€‚数値ãŒå¤§ãã„ã»ã©æ˜Žã‚‹ããªã‚Šã¾ã™ã€‚\n"
#~ "ã“ã®è¨­å®šã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå°‚用ã§ã‚りã€ã‚µãƒ¼ãƒã§ã¯ç„¡è¦–ã•れã¾ã™ã€‚"
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "スクリーンショットをä¿å­˜ã™ã‚‹ãƒ‘ス。"
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "視差é®è”½å¼·åº¦"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "ディスク上ã«å‡ºç¾ã™ã‚‹ã‚­ãƒ¥ãƒ¼ã®åˆ¶é™"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "$1をインストールã—ã¦ã„ã¾ã™ã€ãŠå¾…ã¡ãã ã•ã„..."
+
+#~ msgid "Back"
+#~ msgstr "戻る"
+
+#~ msgid "Ok"
+#~ msgstr "決定"
diff --git a/po/ja_KS/minetest.po b/po/ja_KS/minetest.po
index d4a10a617..2bb9891ae 100644
--- a/po/ja_KS/minetest.po
+++ b/po/ja_KS/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Japanese (Kansai) (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: 2020-01-11 18:26+0000\n"
"Last-Translator: rubenwardy <rubenwardy@gmail.com>\n"
"Language-Team: Japanese (Kansai) <https://hosted.weblate.org/projects/"
@@ -22,6 +22,10 @@ msgstr ""
msgid "You died"
msgstr ""
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr ""
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr ""
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr ""
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr ""
@@ -111,6 +111,10 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr ""
@@ -156,15 +160,15 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
+msgid "Back to Main Menu"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back to Main Menu"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
+msgid "Downloading..."
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
@@ -210,15 +214,51 @@ msgstr ""
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
@@ -226,25 +266,143 @@ msgstr ""
msgid "Download one from minetest.net"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -395,14 +553,25 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -544,6 +713,10 @@ msgid "Host Server"
msgstr ""
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr ""
@@ -611,6 +784,7 @@ msgstr ""
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
@@ -855,6 +1029,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -889,6 +1071,7 @@ msgstr ""
msgid "- Public: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1161,6 +1344,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1192,7 +1383,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1313,6 +1504,7 @@ msgstr ""
msgid "Left Windows"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1405,6 +1597,7 @@ msgstr ""
msgid "Play"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1441,6 +1634,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
@@ -1675,10 +1869,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "ja_KS"
@@ -1762,6 +1961,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1772,6 +1975,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1820,7 +2031,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1865,6 +2076,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1878,10 +2099,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2052,8 +2269,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2131,10 +2348,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2400,6 +2625,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2708,6 +2937,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2817,6 +3056,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2870,6 +3137,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4165,14 +4438,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4236,6 +4501,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4302,7 +4571,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4390,10 +4661,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4461,13 +4728,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4552,6 +4819,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4658,7 +4929,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4710,9 +4981,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4789,10 +5057,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4802,7 +5066,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4836,6 +5102,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4904,6 +5178,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5342,6 +5628,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5364,6 +5657,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5375,15 +5672,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5500,7 +5807,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5653,6 +5960,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -5972,6 +6283,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po
index 0fafbac99..016dd43ed 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-03-15 18:36+0000\n"
+"Last-Translator: Robin Townsend <iantownsend@disroot.org>\n"
"Language-Team: Lojban <https://hosted.weblate.org/projects/minetest/minetest/"
"jbo/>\n"
"Language: jbo\n"
@@ -12,16 +12,20 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 3.9-dev\n"
+"X-Generator: Weblate 4.0-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
-msgstr "nu tolcanci"
+msgstr "tolcanci"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
msgstr ".i do morsi"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -31,23 +35,19 @@ msgstr ""
#: builtin/fstk/ui.lua
msgid "An error occurred:"
-msgstr ".i la'e di'e nabmi"
+msgstr ".i da nabmi"
#: builtin/fstk/ui.lua
msgid "Main menu"
msgstr "ralju liste"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "je'e"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
-msgstr "nu samjo'e"
+msgstr "za'u re'u samjo'e"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr ".i lo samse'u cu cpedu lo nu za'u re'u co'a samjo'e"
+msgstr ".i le samtcise'u cu cpedu pa nu za'u re'u co'a samjo'e"
#: builtin/mainmenu/common.lua src/client/game.cpp
msgid "Loading..."
@@ -89,27 +89,27 @@ msgstr ""
#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
#: src/gui/guiPasswordChange.cpp
msgid "Cancel"
-msgstr "nu sisti"
+msgstr "sisti"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr "se nitcu"
+msgstr "jai se nitcu"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
-msgstr "nu ro co'e cu ganda"
+msgstr "ro co'e cu ganda"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "nu lo se samtcise'a bakfu cu ganda"
+msgstr "le se samtcise'a bakfu cu ganda"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr "nu ro co'e cu katci"
+msgstr "ro co'e cu katci"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "nu lo se samtcise'a bakfu cu katci"
+msgstr "le se samtcise'a bakfu cu katci"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
@@ -118,6 +118,10 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "se samtcise'a"
@@ -128,7 +132,7 @@ msgstr "na'e se nitcu"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr ".i no da skicu be lo se kelci ku vlapoi"
+msgstr "to'i no da ve skicu le se kelci toi"
#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
@@ -137,7 +141,7 @@ msgstr ".i nitcu no da"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr ".i no da skicu be lo se samtcise'a ku vlapoi"
+msgstr "to'i no da ve skicu le se samtcise'a bakfu toi"
#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
@@ -151,7 +155,7 @@ msgstr "na'e se nitcu"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
msgid "Save"
-msgstr "nu vreji"
+msgstr "co'a vreji"
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
@@ -163,23 +167,24 @@ msgstr "katci"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
-msgstr "cmima lu'i ro bakfu"
+msgstr "se cmima ro bakfu"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "nu xruti"
+msgid "Back to Main Menu"
+msgstr "xruti fi tu'a le ralju liste"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back to Main Menu"
-msgstr "nu xruti fi tu'a lo ralju liste"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr ".i ca'o kibycpa la'o zoi. $1 .zoi je cu samtcise'a ri .i .e'o denpa"
+#, fuzzy
+msgid "Downloading..."
+msgstr ".i ca'o samymo'i"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr ".i da nabmi fi lo nu kibycpa la'o zoi. $1 .zoi"
+msgstr ".i da nabmi fi le nu kibycpa la'o zoi. $1 .zoi"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -188,7 +193,7 @@ msgstr "se kelci"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install"
-msgstr "nu samtcise'a"
+msgstr "samtcise'a"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -197,7 +202,7 @@ msgstr "se samtcise'a"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr ".i na kakne lo ka ce'u kibycpa su'o bakfu"
+msgstr ".i na kakne le ka kibycpa pa bakfu"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
@@ -206,62 +211,221 @@ msgstr ".i no da ckaji lo se sisku"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
-msgstr "nu sisku"
+msgstr "sisku"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
msgid "Texture packs"
msgstr "jvinu bakfu"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
-msgstr "nu to'e samtcise'a"
+msgstr "to'e samtcise'a"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr ".i pa munje xa'o cmene zoi zoi. $1 .zoi"
+msgstr ".i zoi zoi. $1 .zoi xa'o cmene pa munje"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
-msgstr "nu cupra"
+msgstr "cupra"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "datni"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
-".i ko kibycpa pa se kelci be mu'u la .maintest. se kelci la'o zoi. minetest."
-"net .zoi"
+".i ko kibycpa pa se kelci to mupli fa la .maintest. se kelci toi la'o zoi. "
+"minetest.net .zoi"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr ".i ko kibycpa pa se kelci la'o zoi. minetest.net .zoi"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "se kelci"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+#, fuzzy
msgid "Mapgen"
-msgstr "te cupra lo munje"
+msgstr "te cupra le munje"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr ".i do cuxna no se kelci"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
msgid "Seed"
msgstr "cunso jai krasi"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr ".i la'o zoi. Minimal development test .zoi na'o selpli lo favgau .o'i"
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
-msgstr "cmene lo munje"
+msgstr "cmene le munje"
#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no games installed."
@@ -269,13 +433,13 @@ msgstr ".i do samtcise'a no se kelci"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr ".i .au ju'o pei do vimcu la'o zoi. $1 .zoi"
+msgstr ".i xu do djica le nu vimcu la'o zoi. $1 .zoi"
#: builtin/mainmenu/dlg_delete_content.lua
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
#: src/client/keycode.cpp
msgid "Delete"
-msgstr "nu vimcu"
+msgstr "vimcu"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
@@ -287,16 +451,15 @@ msgstr ""
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr ".i .au ju'o pei do vimcu la'o zoi. $1 .zoi"
+msgstr ".i xu do djica le nu vimcu la'o zoi. $1 .zoi noi munje"
#: builtin/mainmenu/dlg_rename_modpack.lua
-#, fuzzy
msgid "Accept"
-msgstr "fitytu'i"
+msgstr "mulno"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "nu basti fi lo ka ce'u cmene lo se samtcise'a bakfu"
+msgstr "basti fi lo ka cmene le se samtcise'a bakfu"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
@@ -306,7 +469,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr ""
+msgstr "to'i no da ve skicu le te tcimi'e toi"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
@@ -326,7 +489,7 @@ msgstr "ganda"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
-msgstr "nu bixygau"
+msgstr "binxo"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
@@ -350,15 +513,15 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
-msgstr ""
+msgstr ".i ko samci'a da poi drani le ka lerpoi fi pa mulna'u"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
-msgstr ".i ko samci'a pa namcu lerpoi poi drani"
+msgstr ".i ko samci'a da poi drani fi le ka lerpoi fi pa namcu"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr "nu xruti fi lo zmiselcu'a"
+msgstr "xruti fi le zmiselcu'a"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
@@ -366,11 +529,11 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
-msgstr "nu cuxna pa datnyveimei"
+msgstr "cuxna fi lu'i le datnyveimei"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
-msgstr "nu cuxna pa datnyvei"
+msgstr "cuxna fi lu'i le datnyvei"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Show technical names"
@@ -378,11 +541,11 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr ".i lo namcu cu zmadu .ei li $1"
+msgstr ".i sarcu fa le nu le namcu cu dubjavmau li $1"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr ".i lo namcu cu mleca .ei li $1"
+msgstr ".i sarcu fa le nu le namcu na zmadu li $1"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
@@ -408,21 +571,32 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
-msgstr "me la'o zoi. $1 .zoi noi katci"
+msgstr "$1 to'i katci toi"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
@@ -431,7 +605,8 @@ msgstr "se samtcise'a fi la'o zoi. $1 .zoi"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
msgstr ""
-".i da nabmi fi lo nu $1 co'a cmima lo se datnyveimei be la'o zoi. $2 .zoi"
+".i da nabmi fi le nu setca la'o zoi. $1 .zoi lu'i ro se datnyveimei be la'o "
+"zoi. $2 .zoi"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
@@ -474,12 +649,14 @@ msgid "Browse online content"
msgstr ""
#: builtin/mainmenu/tab_content.lua
+#, fuzzy
msgid "Content"
-msgstr "se samtcise'a"
+msgstr "kakne le ka se samtcise'a"
#: builtin/mainmenu/tab_content.lua
+#, fuzzy
msgid "Disable Texture Pack"
-msgstr "nu lo jvinu bakfu cu ganda"
+msgstr "le jvinu bakfu cu ganda"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
@@ -487,23 +664,24 @@ msgstr "datni"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr "ca'o mo'u se samtcise'a"
+msgstr "pu mo'u se samtcise'a"
#: builtin/mainmenu/tab_content.lua
+#, fuzzy
msgid "No dependencies."
msgstr ".i nitcu no da"
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr "to'i no da skicu be lo bakfu ku vlapoi toi"
+msgstr "to'i no da ve skicu le bakfu toi"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
-msgstr "nu basti fi lo ka ce'u cmene"
+msgstr "basti fi le ka cmene"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr ""
+msgstr "to'e samtcise'a le bakfu"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
@@ -511,7 +689,7 @@ msgstr ""
#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
-msgstr ""
+msgstr "liste lu'i ro ca gunka"
#: builtin/mainmenu/tab_credits.lua
msgid "Core Developers"
@@ -519,11 +697,11 @@ msgstr ""
#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
-msgstr "lo finti liste"
+msgstr "liste lu'i ro gunka"
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
-msgstr ""
+msgstr "liste lu'i ro pu je nai ca gunka"
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Core Developers"
@@ -539,11 +717,11 @@ msgstr ""
#: builtin/mainmenu/tab_local.lua
msgid "Configure"
-msgstr ""
+msgstr "tcimi'e"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative Mode"
-msgstr "le nu finti kelci"
+msgstr "finti se kelci"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
msgid "Enable Damage"
@@ -555,13 +733,16 @@ msgid "Host Game"
msgstr "cfari fa lo nu kelci"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Host Server"
-msgstr "lo samtcise'u"
+msgstr "co'a samtcise'u"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
-msgstr "lo cmene .e lo lerpoijaspu"
+msgstr "cmene .i lerpoijaspu"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -569,42 +750,39 @@ msgstr "cnino"
#: builtin/mainmenu/tab_local.lua
msgid "No world created or selected!"
-msgstr ".i lo no munje cu puzi zbasu gi'a cuxna"
+msgstr ".i do no munje cu cupra ja cu cuxna"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Play Game"
-msgstr "cfari fa lo nu kelci"
+msgstr "co'a kelci"
#: builtin/mainmenu/tab_local.lua
msgid "Port"
-msgstr "lo judrnporte"
+msgstr "judrnporte"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select World:"
-msgstr "cuxna lo munje"
+msgstr ".i ko cuxna fi lu'i le munje"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr "lo samtcise'u judrnporte"
+msgstr "judrnporte le samtcise'u"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
-msgstr "nu co'a kelci"
+msgstr "co'a kelci"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Address / Port"
-msgstr "lo samjudri jo'u judrnporte"
+msgstr "judri .i judrnporte"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
-msgstr "samjongau"
+msgstr "co'a samjo'e"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Creative mode"
-msgstr "le nu finti kelci"
+msgstr "finti se kelci"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
@@ -612,25 +790,25 @@ msgstr ""
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Del. Favorite"
-msgstr ""
+msgstr "co'u cmima lu'i ro nelci se tcita"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Favorite"
-msgstr ""
+msgstr "nelci se tcita"
#: builtin/mainmenu/tab_online.lua
msgid "Join Game"
-msgstr "nu co'a kelci kansa"
+msgstr "co'a kansa fi le ka kelci"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
-#, fuzzy
msgid "Name / Password"
-msgstr "lo cmene .e lo lerpoijaspu"
+msgstr "cmene .i lerpoijaspu"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Ping"
-msgstr ""
+msgstr ".pin. temci"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
@@ -654,7 +832,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "All Settings"
-msgstr ""
+msgstr "se cmima ro te tcimi'e"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
@@ -662,16 +840,15 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Are you sure to reset your singleplayer world?"
-msgstr ".i .au ju'o pei do xruti lo do nonselkansa munje"
+msgstr ".i xu do djica le nu xruti le do nonselkansa munje"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Bilinear Filter"
-msgstr "lo puvyrelyli'iju'e"
+msgstr "puvyrelyli'iju'e"
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
@@ -702,6 +879,7 @@ msgid "Mipmap"
msgstr "lo puvrmipmepi"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Mipmap + Aniso. Filter"
msgstr "lo puvrmipmepi .e lo puvytolmanfyju'e"
@@ -733,10 +911,12 @@ msgid "None"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Opaque Leaves"
msgstr "lo tolkli pezli"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Opaque Water"
msgstr "lo tolkli djacu"
@@ -751,7 +931,7 @@ msgstr "lo kantu"
#: builtin/mainmenu/tab_settings.lua
msgid "Reset singleplayer world"
-msgstr "kraga'igau le za'e pavykelci munje"
+msgstr "xruti le nonselkansa munje"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
@@ -759,17 +939,19 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
-msgstr ""
+msgstr "te tcimi'e"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr "lo ti'orkemsamtci"
+msgstr "ti'orkemsamtci"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "ti'orkemsamtci to na kakne toi"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Simple Leaves"
msgstr "lo sampu pezli"
@@ -796,9 +978,8 @@ msgid "Touchthreshold: (px)"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Trilinear Filter"
-msgstr "lo puvycibli'iju'e"
+msgstr "puvycibli'iju'e"
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
@@ -825,11 +1006,11 @@ msgstr ""
#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
-msgstr "lo ralju"
+msgstr "ralju"
#: builtin/mainmenu/tab_simple_main.lua
msgid "Start Singleplayer"
-msgstr ""
+msgstr "co'a nonselkansa kelci"
#: src/client/client.cpp
msgid "Connection timed out."
@@ -837,17 +1018,20 @@ msgstr ""
#: src/client/client.cpp
msgid "Done!"
-msgstr ""
+msgstr ".i mulno"
#: src/client/client.cpp
+#, fuzzy
msgid "Initializing nodes"
msgstr ".i ca'o samymo'i lo me la'o gy.node.gy."
#: src/client/client.cpp
+#, fuzzy
msgid "Initializing nodes..."
msgstr ".i ca'o samymo'i lo me la'o gy.node.gy."
#: src/client/client.cpp
+#, fuzzy
msgid "Loading textures..."
msgstr ".i ca'o samymo'i le tengu datnyvei"
@@ -858,30 +1042,34 @@ msgstr ""
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr ""
+".i da nabmi fi le nu co'a jorne to la'a cu'i le temci cu dukse le ka clani "
+"toi"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
msgstr ""
+".i na cumki fa le nu le se kelci cu jai se facki je cu se samymo'i .i ky. du "
+"la'o zoi."
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr ""
+msgstr ".i le se kelci ve skicu vreji na drani"
#: src/client/clientlauncher.cpp
msgid "Main Menu"
-msgstr ""
+msgstr "ralju liste"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr ""
+msgstr ".i do cuxna no munje .i do ciska no judri .i do zukte no da"
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr ".i le plicme cu dukse le ka clani"
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr ""
+msgstr ".i ko ckaji le ka da zo'u jdice le du'u da cmene"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
@@ -891,6 +1079,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -900,16 +1096,16 @@ msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
+"\n"
+".i sarcu fa le nu do cipcta la'o zoi. debug.txt .zoi kei tu'a le tcila"
#: src/client/game.cpp
-#, fuzzy
msgid "- Address: "
-msgstr "lo samjudri jo'u judrnporte"
+msgstr "- judri: "
#: src/client/game.cpp
-#, fuzzy
msgid "- Creative Mode: "
-msgstr "le nu finti kelci"
+msgstr "- finti se kelci: "
#: src/client/game.cpp
msgid "- Damage: "
@@ -920,23 +1116,22 @@ msgid "- Mode: "
msgstr ""
#: src/client/game.cpp
-#, fuzzy
msgid "- Port: "
-msgstr "lo judrnporte"
+msgstr "- judrnporte: "
#: src/client/game.cpp
-#, fuzzy
msgid "- Public: "
-msgstr "gubni"
+msgstr "- gubni: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
+#, fuzzy
msgid "- PvP: "
-msgstr ""
+msgstr "- kakne le ka simxu le ka xrani: "
#: src/client/game.cpp
-#, fuzzy
msgid "- Server Name: "
-msgstr "lo samtcise'u"
+msgstr "- cmene le samtcise'u: "
#: src/client/game.cpp
#, fuzzy
@@ -958,7 +1153,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Change Password"
-msgstr "gafygau lo lerpoijaspu"
+msgstr "basti fi le ka lerpoijaspu"
#: src/client/game.cpp
#, fuzzy
@@ -976,7 +1171,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr ".i ca'o troci lo za'i samjo'e lo samse'u"
+msgstr ".i ca'o samjo'e le samse'u"
#: src/client/game.cpp
msgid "Continue"
@@ -1003,11 +1198,11 @@ msgstr ""
#: src/client/game.cpp
msgid "Creating client..."
-msgstr ".i lo samtciselse'u cu se zbasu"
+msgstr ".i ca'o cupra le samtciselse'u"
#: src/client/game.cpp
msgid "Creating server..."
-msgstr ".i lo samtcise'u cu se zbasu"
+msgstr ".i ca'o cupra le samtcise'u"
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
@@ -1047,11 +1242,11 @@ msgstr ""
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr ""
+msgstr "sisti tu'a le se kelci"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr "tolcfagau"
+msgstr "sisti tu'a le samtci"
#: src/client/game.cpp
msgid "Fast mode disabled"
@@ -1090,16 +1285,15 @@ msgstr "selpli"
#: src/client/game.cpp
msgid "Game info:"
-msgstr ""
+msgstr ".i datni le se kelci"
#: src/client/game.cpp
msgid "Game paused"
-msgstr ""
+msgstr ".i ca'o denpa fo le nu kelci"
#: src/client/game.cpp
-#, fuzzy
msgid "Hosting server"
-msgstr ".i lo samtcise'u cu se zbasu"
+msgstr ".i le samtci pe do cu samtcise'u"
#: src/client/game.cpp
#, fuzzy
@@ -1169,11 +1363,11 @@ msgstr ".i ca'o samymo'i tu'a lo me la'o gy.node.gy."
#: src/client/game.cpp
msgid "Off"
-msgstr ""
+msgstr "ganda"
#: src/client/game.cpp
msgid "On"
-msgstr ""
+msgstr "katci"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
@@ -1189,19 +1383,19 @@ msgstr ""
#: src/client/game.cpp
msgid "Remote server"
-msgstr ""
+msgstr ".i da poi na du le samtci pe do cu samtcise'u"
#: src/client/game.cpp
msgid "Resolving address..."
-msgstr ".i ca'o troci lo nu facki lo samjudri"
+msgstr ".i ca'o sisku le ka se judri da kau"
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr ""
+msgstr ".i ca'o sisti"
#: src/client/game.cpp
msgid "Singleplayer"
-msgstr "pa kelci"
+msgstr "nonselkansa"
#: src/client/game.cpp
msgid "Sound Volume"
@@ -1213,6 +1407,14 @@ msgid "Sound muted"
msgstr "lo ni sance "
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Sound unmuted"
msgstr "lo ni sance "
@@ -1245,27 +1447,25 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
-#, fuzzy
+#: src/client/game.cpp
msgid "ok"
msgstr "je'e"
#: src/client/gameui.cpp
-#, fuzzy
msgid "Chat hidden"
-msgstr "samta'a"
+msgstr ".i ca mipri le tavla .uidje"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr ".i ca viska le tavla .uidje"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr ".i ca mipri le crakemsazycimde"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr ".i ca viska le crakemsazycimde"
#: src/client/gameui.cpp
msgid "Profiler hidden"
@@ -1348,12 +1548,13 @@ msgid "Insert"
msgstr ""
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+#, fuzzy
msgid "Left"
msgstr "za'i zu'e muvdu"
#: src/client/keycode.cpp
msgid "Left Button"
-msgstr "lo zulselpevysmacu"
+msgstr "zulselpevysmacu"
#: src/client/keycode.cpp
msgid "Left Control"
@@ -1371,13 +1572,14 @@ msgstr ""
msgid "Left Windows"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
#: src/client/keycode.cpp
msgid "Middle Button"
-msgstr "lo mijyselpevysmacu"
+msgstr "mijyselpevysmacu"
#: src/client/keycode.cpp
msgid "Num Lock"
@@ -1444,6 +1646,7 @@ msgid "Numpad 9"
msgstr ""
#: src/client/keycode.cpp
+#, fuzzy
msgid "OEM Clear"
msgstr "la'o gy.OEM Clear.gy."
@@ -1463,6 +1666,7 @@ msgstr ""
msgid "Play"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1472,12 +1676,13 @@ msgid "Return"
msgstr ""
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+#, fuzzy
msgid "Right"
msgstr "za'i ri'u muvdu"
#: src/client/keycode.cpp
msgid "Right Button"
-msgstr "lo prityselpevysmacu"
+msgstr "prityselpevysmacu"
#: src/client/keycode.cpp
msgid "Right Control"
@@ -1499,6 +1704,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
@@ -1528,10 +1734,12 @@ msgid "Up"
msgstr ""
#: src/client/keycode.cpp
+#, fuzzy
msgid "X Button 1"
msgstr "la'o gy.X Button 1.gy."
#: src/client/keycode.cpp
+#, fuzzy
msgid "X Button 2"
msgstr "la'o gy.X Button 2.gy."
@@ -1541,7 +1749,7 @@ msgstr ""
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
-msgstr ".i lo lerpoijaspu na mintu"
+msgstr ".i lu'i le re lerpoijaspu na simxu le ka mintu"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
@@ -1575,6 +1783,7 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+#, fuzzy
msgid "Backward"
msgstr "za'i ti'a muvdu"
@@ -1585,7 +1794,7 @@ msgstr "gafygau lo lerpoijaspu"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
-msgstr "samta'a"
+msgstr "tavla"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Command"
@@ -1593,7 +1802,7 @@ msgstr "minde"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Console"
-msgstr ""
+msgstr "samtrotci"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
@@ -1608,10 +1817,12 @@ msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+#, fuzzy
msgid "Drop"
msgstr "mu'e falcru"
#: src/gui/guiKeyChangeMenu.cpp
+#, fuzzy
msgid "Forward"
msgstr "za'i ca'u muvdu"
@@ -1625,11 +1836,11 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inventory"
-msgstr "lo dacti uidje"
+msgstr "sorcu"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Jump"
-msgstr "mu'e plipe"
+msgstr "plipe"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Key already in use"
@@ -1650,23 +1861,23 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Next item"
-msgstr ""
+msgstr "se lamli'e fi lu'i le dacti"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
-msgstr ""
+msgstr "lamli'e fi lu'i le dacti"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Range select"
-msgstr "mu'e cuxna fi le'i se kuspe"
+msgstr "cuxna fi lu'i le se kuspe"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr ""
+msgstr "vidnyxra"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
-msgstr "za'i masno cadzu"
+msgstr "masno cadzu"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Special"
@@ -1683,10 +1894,12 @@ msgid "Toggle chat log"
msgstr "mu'e co'a jonai mo'u sutra"
#: src/gui/guiKeyChangeMenu.cpp
+#, fuzzy
msgid "Toggle fast"
msgstr "mu'e co'a jonai mo'u sutra"
#: src/gui/guiKeyChangeMenu.cpp
+#, fuzzy
msgid "Toggle fly"
msgstr "mu'e co'a jonai mo'u vofli"
@@ -1710,28 +1923,32 @@ msgid "Toggle pitchmove"
msgstr "mu'e co'a jonai mo'u sutra"
#: src/gui/guiKeyChangeMenu.cpp
+#, fuzzy
msgid "press key"
-msgstr "ko da'ergau le batke"
+msgstr ".i ko da'ergau pa batke"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
-msgstr "gafygau"
+msgstr "basti"
#: src/gui/guiPasswordChange.cpp
+#, fuzzy
msgid "Confirm Password"
msgstr "le rapli lerpoijaspu"
#: src/gui/guiPasswordChange.cpp
+#, fuzzy
msgid "New Password"
msgstr "lo cnino lerpoijaspu"
#: src/gui/guiPasswordChange.cpp
+#, fuzzy
msgid "Old Password"
msgstr "lo slabu lerpoijaspu"
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
-msgstr ""
+msgstr "sisti"
#: src/gui/guiVolumeChange.cpp
#, fuzzy
@@ -1739,13 +1956,19 @@ msgid "Muted"
msgstr "ko da'ergau le batke"
#: src/gui/guiVolumeChange.cpp
+#, fuzzy
msgid "Sound Volume: "
msgstr "lo ni sance "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "jbo"
@@ -1830,6 +2053,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1840,6 +2067,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1877,18 +2112,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr ""
+msgstr ".i benji le notci ro se samtcise'u ca ro nu le samtcise'u cu samfli"
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
msgstr ""
+".i benji le notci ro se samtcise'u ca ro nu le samtcise'u co'u samtcise'u"
#: src/settings_translation_file.cpp
msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1933,6 +2169,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1946,10 +2192,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -1971,7 +2213,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr ""
+msgstr "gubysku zo'e pe tu'a le samtcise'u"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
@@ -2001,7 +2243,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
-msgstr ""
+msgstr "krefu samjo'e te preti ba ro nu samfli"
#: src/settings_translation_file.cpp
msgid ""
@@ -2054,11 +2296,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Basic"
-msgstr ""
+msgstr "jicmu"
#: src/settings_translation_file.cpp
msgid "Basic privileges"
-msgstr ""
+msgstr "jicmu se curmi"
#: src/settings_translation_file.cpp
msgid "Beach noise"
@@ -2069,9 +2311,8 @@ msgid "Beach noise threshold"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bilinear filtering"
-msgstr "lo puvyrelyli'iju'e"
+msgstr "puvyrelyli'iju'e"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2124,8 +2365,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2203,11 +2444,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Chat key"
msgstr "samta'a"
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2281,9 +2530,8 @@ msgid "Cloud radius"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Clouds"
-msgstr "le bliku dilnu"
+msgstr "dilnu"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
@@ -2296,7 +2544,7 @@ msgstr "lo ralju"
#: src/settings_translation_file.cpp
msgid "Colored fog"
-msgstr ""
+msgstr "le bumgapci cu skari"
#: src/settings_translation_file.cpp
msgid ""
@@ -2406,9 +2654,8 @@ msgid "Crash message"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Creative"
-msgstr "zbasu"
+msgstr "finti se kelci"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
@@ -2473,9 +2720,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Default password"
-msgstr "lo cnino lerpoijaspu"
+msgstr "zmiselcu'a fi lu'i ro lerpoijaspu"
#: src/settings_translation_file.cpp
msgid "Default privileges"
@@ -2486,6 +2732,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2796,6 +3046,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2906,6 +3166,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2959,6 +3247,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4157,7 +4451,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Language"
-msgstr ""
+msgstr "bangu"
#: src/settings_translation_file.cpp
msgid "Large cave depth"
@@ -4258,14 +4552,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4329,6 +4615,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Main menu script"
msgstr "lo ralju"
@@ -4397,7 +4687,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4485,10 +4777,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4556,13 +4844,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4647,6 +4935,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4755,12 +5047,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Network"
-msgstr ""
+msgstr "te samjo'e"
#: src/settings_translation_file.cpp
msgid ""
@@ -4807,9 +5099,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4886,10 +5175,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4899,7 +5184,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4933,6 +5220,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4953,7 +5248,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Player name"
-msgstr ""
+msgstr "plicme"
#: src/settings_translation_file.cpp
msgid "Player transfer distance"
@@ -5002,6 +5297,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5251,29 +5558,24 @@ msgid "Server / Singleplayer"
msgstr "pa kelci"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Server URL"
-msgstr "lo samtcise'u"
+msgstr "veirjudri le samtcise'u"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Server address"
-msgstr "lo samtcise'u judrnporte"
+msgstr "judri le samtcise'u"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Server description"
-msgstr "lo samtcise'u judrnporte"
+msgstr "ve skicu le samtcise'u"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Server name"
-msgstr "lo samtcise'u"
+msgstr "cmene le samtcise'u"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Server port"
-msgstr "lo samtcise'u judrnporte"
+msgstr "judrnporte le samtcise'u"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
@@ -5317,9 +5619,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Shader path"
-msgstr "lo ti'orkemsamtci"
+msgstr "judri le ti'orkemsamtci"
#: src/settings_translation_file.cpp
msgid ""
@@ -5454,6 +5755,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5476,6 +5784,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5487,15 +5799,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5612,7 +5934,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5766,6 +6088,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6093,6 +6419,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6127,3 +6461,12 @@ msgstr ""
#, fuzzy
#~ msgid "Enable VBO"
#~ msgstr "selpli"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr ".i ca'o kibycpa la'o zoi. $1 .zoi je cu samtcise'a ri .i ko denpa"
+
+#~ msgid "Back"
+#~ msgstr "xruti"
+
+#~ msgid "Ok"
+#~ msgstr "je'e"
diff --git a/po/kk/minetest.po b/po/kk/minetest.po
index 90a282677..3f68fbc97 100644
--- a/po/kk/minetest.po
+++ b/po/kk/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Kazakh (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2020-01-11 18:26+0000\n"
-"Last-Translator: rubenwardy <rubenwardy@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-07-06 21:41+0000\n"
+"Last-Translator: Fontan 030 <pomanfedurin@gmail.com>\n"
"Language-Team: Kazakh <https://hosted.weblate.org/projects/minetest/minetest/"
"kk/>\n"
"Language: kk\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 3.10.1\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,21 +22,21 @@ msgstr ""
msgid "You died"
msgstr ""
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
-msgstr ""
+msgstr "Lua Ñкриптінде қате кездеÑті:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
-msgstr ""
+msgstr "Қате кездеÑті:"
#: builtin/fstk/ui.lua
msgid "Main menu"
-msgstr ""
-
-#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr ""
+msgstr "БаÑты мәзір"
#: builtin/fstk/ui.lua
msgid "Reconnect"
@@ -48,7 +48,7 @@ msgstr ""
#: builtin/mainmenu/common.lua src/client/game.cpp
msgid "Loading..."
-msgstr ""
+msgstr "Жүктелуде..."
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -82,7 +82,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/tab_content.lua
msgid "Dependencies:"
@@ -111,16 +111,20 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
-msgid "Mod:"
+msgid "Find More Mods"
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "Мод:"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr ""
+msgstr "Ойын ÑипаттамаÑÑ‹ жоқ."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
@@ -141,7 +145,7 @@ msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
msgid "Save"
-msgstr ""
+msgstr "Сақтау"
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
@@ -149,22 +153,22 @@ msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr ""
+msgstr "қоÑылған"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
+msgid "Back to Main Menu"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back to Main Menu"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
+msgid "Downloading..."
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
@@ -174,7 +178,7 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
-msgstr ""
+msgstr "Ойындар"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install"
@@ -183,7 +187,7 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr ""
+msgstr "Модтар"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
@@ -196,7 +200,7 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
-msgstr ""
+msgstr "Іздеу"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -204,10 +208,14 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
-msgstr ""
+msgstr "Жою"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
+msgstr "Жаңарту"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -215,10 +223,42 @@ msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
@@ -226,25 +266,143 @@ msgstr ""
msgid "Download one from minetest.net"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
+msgstr "Ойын"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Көлдер"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -263,7 +421,7 @@ msgstr ""
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
#: src/client/keycode.cpp
msgid "Delete"
-msgstr ""
+msgstr "Жою"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
@@ -373,7 +531,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
-msgstr ""
+msgstr "X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X spread"
@@ -381,7 +539,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
-msgstr ""
+msgstr "Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y spread"
@@ -389,20 +547,31 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
-msgstr ""
+msgstr "Z"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -485,7 +654,7 @@ msgstr ""
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
-msgstr ""
+msgstr "Ðтауын өзгерту"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
@@ -544,12 +713,16 @@ msgid "Host Server"
msgstr ""
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr ""
#: builtin/mainmenu/tab_local.lua
msgid "New"
-msgstr ""
+msgstr "Жаңа"
#: builtin/mainmenu/tab_local.lua
msgid "No world created or selected!"
@@ -611,6 +784,7 @@ msgstr ""
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
@@ -621,7 +795,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr ""
+msgstr "3D бұлттар"
#: builtin/mainmenu/tab_settings.lua
msgid "4x"
@@ -681,7 +855,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "No"
-msgstr ""
+msgstr "Жоқ"
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
@@ -729,7 +903,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
-msgstr ""
+msgstr "Баптаулар"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
@@ -781,7 +955,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Yes"
-msgstr ""
+msgstr "Иә"
#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
@@ -833,7 +1007,7 @@ 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."
@@ -841,7 +1015,7 @@ msgstr ""
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr "Ойыншының аты тым ұзын."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
@@ -855,6 +1029,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -889,6 +1071,7 @@ msgstr ""
msgid "- Public: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -935,7 +1118,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Continue"
-msgstr ""
+msgstr "ЖалғаÑтыру"
#: src/client/game.cpp
#, c-format
@@ -1002,11 +1185,11 @@ msgstr ""
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr ""
+msgstr "Мәзірге шығу"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr ""
+msgstr "Ойыннан шығу"
#: src/client/game.cpp
msgid "Fast mode disabled"
@@ -1038,7 +1221,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Fog enabled"
-msgstr ""
+msgstr "Тұман қоÑылды"
#: src/client/game.cpp
msgid "Game info:"
@@ -1074,7 +1257,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Minimap hidden"
-msgstr ""
+msgstr "Миникарта жаÑырылды"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x1"
@@ -1150,7 +1333,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Singleplayer"
-msgstr ""
+msgstr "Бір ойыншы"
#: src/client/game.cpp
msgid "Sound Volume"
@@ -1161,6 +1344,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1192,25 +1383,25 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
#: src/client/gameui.cpp
msgid "Chat hidden"
-msgstr ""
+msgstr "Чат жаÑырылды"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "Чат көрÑетілді"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "HUD жаÑырылды"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "HUD көрÑетілді"
#: src/client/gameui.cpp
msgid "Profiler hidden"
@@ -1311,8 +1502,9 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Left Windows"
-msgstr ""
+msgstr "Сол Win"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1403,8 +1595,9 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Play"
-msgstr ""
+msgstr "Ойнау"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1441,6 +1634,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
@@ -1459,7 +1653,7 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Space"
-msgstr ""
+msgstr "Ð‘Ð¾Ñ Ð¾Ñ€Ñ‹Ð½"
#: src/client/keycode.cpp
msgid "Tab"
@@ -1675,10 +1869,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "kk"
@@ -1755,13 +1954,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D clouds"
-msgstr ""
+msgstr "3D бұлттар"
#: src/settings_translation_file.cpp
msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1772,6 +1975,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1820,7 +2031,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1865,6 +2076,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1878,10 +2099,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -1919,11 +2136,11 @@ 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 ""
@@ -2052,8 +2269,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2131,10 +2348,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2400,6 +2625,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2708,6 +2937,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2817,6 +3056,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2826,7 +3093,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Fog"
-msgstr ""
+msgstr "Тұман"
#: src/settings_translation_file.cpp
msgid "Fog start"
@@ -2870,6 +3137,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -2929,7 +3202,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "FreeType fonts"
-msgstr ""
+msgstr "FreeType қаріптері"
#: src/settings_translation_file.cpp
msgid ""
@@ -3004,11 +3277,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Graphics"
-msgstr ""
+msgstr "Графика"
#: src/settings_translation_file.cpp
msgid "Gravity"
-msgstr ""
+msgstr "ГравитациÑ"
#: src/settings_translation_file.cpp
msgid "Ground level"
@@ -4165,14 +4438,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4236,6 +4501,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4302,7 +4571,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4390,10 +4661,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4461,13 +4728,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4552,6 +4819,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4658,7 +4929,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4710,9 +4981,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4789,10 +5057,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4802,7 +5066,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4836,10 +5102,18 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Physics"
+msgid "Per-player limit of queued blocks load from disk"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "Физика"
+
+#: src/settings_translation_file.cpp
msgid "Pitch move key"
msgstr ""
@@ -4904,6 +5178,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5342,6 +5628,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5364,6 +5657,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5375,15 +5672,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5500,7 +5807,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5653,6 +5960,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -5972,6 +6283,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
diff --git a/po/kn/minetest.po b/po/kn/minetest.po
index e72e01826..91fc52c2a 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: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: 2019-11-10 15:04+0000\n"
"Last-Translator: Krock <mk939@ymail.com>\n"
"Language-Team: Kannada <https://hosted.weblate.org/projects/minetest/"
@@ -22,6 +22,10 @@ msgstr "ಮತà³à²¤à³† ಹà³à²Ÿà³à²Ÿà³"
msgid "You died"
msgstr "ನೀನೠಸತà³à²¤à³à²¹à³‹à²¦à³†"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -37,10 +41,6 @@ msgid "Main menu"
msgstr "ಮà³à²–à³à²¯ ಮೆನà³"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "ಸರಿ"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "ಮರà³à²¸à²‚ಪರà³à²•ಿಸà³"
@@ -121,6 +121,10 @@ msgstr ""
"ಮಾತà³à²° chararacters [a-z0-9_] ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—ಿದೆ."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "ಮಾಡà³:"
@@ -169,16 +173,17 @@ msgid "All packages"
msgstr "ಎಲà³à²²à²¾ ಪà³à²¯à²¾à²•ೇಜà³à²—ಳà³"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "ಹಿಂದೆ"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "ಮà³à²–à³à²¯ ಮೆನà³à²—ೆ ಹಿಂತಿರà³à²—ಿ"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "$1 ಡೌನà³à²²à³‹à²¡à³ ಮತà³à²¤à³ ಇನà³à²¸à³à²Ÿà²¾à²²à³ ಮಾಡಲಾಗà³à²¤à³à²¤à²¿à²¦à³†, ದಯವಿಟà³à²Ÿà³ ನಿರೀಕà³à²·à²¿à²¸à²¿..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "ಲೋಡೠಆಗà³à²¤à³à²¤à²¿à²¦à³†..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -223,15 +228,51 @@ msgstr "ಅನà³à²‡à²¨à³à²¸à³à²Ÿà²¾à²²à³"
msgid "Update"
msgstr "ನವೀಕರಿಸಿ"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
@@ -239,25 +280,143 @@ msgstr ""
msgid "Download one from minetest.net"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -408,14 +567,25 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -557,6 +727,10 @@ msgid "Host Server"
msgstr ""
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr ""
@@ -624,6 +798,7 @@ msgstr ""
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
@@ -868,6 +1043,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -902,6 +1085,7 @@ msgstr ""
msgid "- Public: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1174,6 +1358,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1205,7 +1397,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1326,6 +1518,7 @@ msgstr ""
msgid "Left Windows"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1418,6 +1611,7 @@ msgstr ""
msgid "Play"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1454,6 +1648,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
@@ -1688,10 +1883,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "kn"
@@ -1775,6 +1975,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1785,6 +1989,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1833,7 +2045,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1878,6 +2090,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1891,10 +2113,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2065,8 +2283,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2144,10 +2362,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2413,6 +2639,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2721,6 +2951,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2830,6 +3070,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2883,6 +3151,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4178,14 +4452,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4249,6 +4515,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4315,7 +4585,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4403,10 +4675,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4474,13 +4742,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4565,6 +4833,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4671,7 +4943,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4723,9 +4995,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4802,10 +5071,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4815,7 +5080,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4849,6 +5116,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4917,6 +5192,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5355,6 +5642,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5377,6 +5671,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5388,15 +5686,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5513,7 +5821,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5666,6 +5974,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -5985,6 +6297,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6015,3 +6335,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL timeout"
msgstr ""
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "$1 ಡೌನà³à²²à³‹à²¡à³ ಮತà³à²¤à³ ಇನà³à²¸à³à²Ÿà²¾à²²à³ ಮಾಡಲಾಗà³à²¤à³à²¤à²¿à²¦à³†, ದಯವಿಟà³à²Ÿà³ ನಿರೀಕà³à²·à²¿à²¸à²¿..."
+
+#~ msgid "Back"
+#~ msgstr "ಹಿಂದೆ"
+
+#~ msgid "Ok"
+#~ msgstr "ಸರಿ"
diff --git a/po/ko/minetest.po b/po/ko/minetest.po
index 499d57dcb..c28e410a4 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: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -23,6 +23,10 @@ msgstr "리스í°"
msgid "You died"
msgstr "사ë§í–ˆìŠµë‹ˆë‹¤."
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -38,10 +42,6 @@ msgid "Main menu"
msgstr "주 메뉴"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "확ì¸"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "재접ì†"
@@ -119,6 +119,10 @@ msgstr ""
"는 [a-z0-9_]만 사용할 수 있습니다."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "모드:"
@@ -169,18 +173,18 @@ msgid "All packages"
msgstr "모든 패키지"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "뒤로"
-
-#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
msgid "Back to Main Menu"
msgstr "주 메뉴"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
-msgid "Downloading and installing $1, please wait..."
-msgstr "$1 를(ì„) 다운로드중입니다. 기다려주세요..."
+msgid "Downloading..."
+msgstr "불러오는 중..."
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
@@ -228,16 +232,57 @@ msgstr "설치"
msgid "Update"
msgstr "ì—…ë°ì´íЏ"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "\"$1\" ì´ë¦„ì˜ ì„¸ê³„ê°€ ì´ë¯¸ 존재합니다"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "강 소리"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "강 소리"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "ë™êµ´ ìž¡ìŒ #1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "ë™êµ´ ìž¡ìŒ #1"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "만들기"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
+msgid "Decorations"
+msgstr "모드 정보:"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "minetest.netì—서 minetest_game ê°™ì€ ì„œë¸Œ ê²Œìž„ì„ ë‹¤ìš´ë¡œë“œí•˜ì„¸ìš”."
@@ -245,26 +290,153 @@ msgstr "minetest.netì—서 minetest_game ê°™ì€ ì„œë¸Œ ê²Œìž„ì„ ë‹¤ìš´ë¡œë“œí•˜
msgid "Download one from minetest.net"
msgstr "minetest.netì—서 다운로드 하세요"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "강 소리"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floating landmasses in the sky"
+msgstr "Floatlandì˜ ì‚° 밀집ë„"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "Floatlandì˜ ë†’ì´"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "게임"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "비디오 드ë¼ì´ë²„"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "세계 ìƒì„±ê¸°"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Mapgen ì´ë¦„"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "No game selected"
msgstr "범위 ì„ íƒ"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "ê°• í¬ê¸°"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "시드"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "지형 높ì´"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "ê°• 깊ì´"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "경고: 'minimal develop test'는 개발ìžë¥¼ 위한 것입니다."
#: builtin/mainmenu/dlg_create_world.lua
@@ -423,15 +595,26 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
msgid "defaults"
msgstr "기본 게임"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -596,6 +779,10 @@ msgid "Host Server"
msgstr "서버 호스트하기"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "ì´ë¦„/비밀번호"
@@ -665,6 +852,7 @@ msgstr "ì´ë¦„/비밀번호"
msgid "Ping"
msgstr "í•‘"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP 가능"
@@ -915,6 +1103,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "월드 경로가 존재하지 않습니다: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -953,6 +1149,7 @@ msgstr "- í¬íЏ: "
msgid "- Public: "
msgstr "ì¼ë°˜"
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -1265,6 +1462,14 @@ msgid "Sound muted"
msgstr "볼륨 조절"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Sound unmuted"
msgstr "볼륨 조절"
@@ -1297,7 +1502,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "확ì¸"
@@ -1422,6 +1627,7 @@ msgstr "왼쪽 쉬프트"
msgid "Left Windows"
msgstr "왼쪽 창"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "메뉴"
@@ -1516,6 +1722,7 @@ msgstr "ì¼ì‹œ 중지"
msgid "Play"
msgstr "시작"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
#, fuzzy
msgid "Print"
@@ -1554,6 +1761,7 @@ msgstr "오른쪽 창"
msgid "Scroll Lock"
msgstr "스í¬ë¡¤ ë½"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "ì„ íƒ"
@@ -1802,10 +2010,15 @@ msgstr "ìŒì†Œê±°"
msgid "Sound Volume: "
msgstr "볼륨 조절: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "들어가기 "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "ko"
@@ -1889,6 +2102,11 @@ msgid "3D mode"
msgstr "3D 모드"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Normalmaps ê°•ë„"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1899,6 +2117,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1959,7 +2185,7 @@ msgid "ABM interval"
msgstr "맵 저장 간격"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2006,6 +2232,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "고급"
@@ -2019,10 +2255,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr "í•­ìƒ ë¹„í–‰í•˜ê³  빠르게"
@@ -2206,8 +2438,8 @@ msgstr "범프맵핑"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2291,11 +2523,21 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "글꼴 í¬ê¸°"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "채팅"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat log level"
+msgstr "디버그 로그 수준"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Chat message count limit"
msgstr "ì ‘ì† ì‹œ status메시지"
@@ -2575,6 +2817,11 @@ msgid "Default report format"
msgstr "기본 보고서 형ì‹"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "기본 게임"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2915,6 +3162,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "ì¼ì‹œì •ì§€ 메뉴ì—서 FPS"
@@ -3031,6 +3288,41 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "Floatlandì˜ ì‚° 밀집ë„"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "Floatlandì˜ ì‚° 높ì´"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "Floatlandì˜ ì‚° 높ì´"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Floatlandì˜ ë†’ì´"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "Floatlandì˜ ì‚° 밀집ë„"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Floatlandì˜ ì‚° 밀집ë„"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Floatlandì˜ ë†’ì´"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "비행 키"
@@ -3084,6 +3376,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4661,14 +4959,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
@@ -4734,6 +5024,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "주 메뉴 스í¬ë¦½íЏ"
@@ -4801,7 +5095,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4897,10 +5193,6 @@ msgid "Mapgen debug"
msgstr "맵젠 디버그"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Mapgen ì´ë¦„"
@@ -4968,13 +5260,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5066,6 +5358,10 @@ msgid "Method used to highlight selected object."
msgstr "ì„ íƒí•œ 개체를 ê°•ì¡° 표시 하는 ë° ì‚¬ìš© 하는 방법입니다."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "미니맵"
@@ -5180,7 +5476,7 @@ msgid ""
msgstr "서버ì´ë¦„ì€ í”Œë ˆì´ì–´ê°€ 서버 ë¦¬ìŠ¤íŠ¸ì— ë“¤ì–´ê°ˆ 때 나타납니다."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5232,9 +5528,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5314,11 +5607,6 @@ msgid "Parallax occlusion scale"
msgstr "시차 êµí•© 규모"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Parallax occlusion strength"
-msgstr "시차 êµí•© ê°•ë„"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5328,8 +5616,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "스í¬ë¦°ìƒ· 저장 경로입니다."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5363,6 +5653,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "물리학"
@@ -5443,6 +5741,18 @@ msgid "Profiling"
msgstr "프로 파ì¼ë§"
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5950,6 +6260,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5973,6 +6290,11 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "ìžë™ìœ¼ë¡œ ìƒì„±ë˜ëŠ” ë…¸ë©€ë§µì˜ ê°•ë„."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "ìžë™ìœ¼ë¡œ ìƒì„±ë˜ëŠ” ë…¸ë©€ë§µì˜ ê°•ë„."
@@ -5984,10 +6306,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
msgstr "엄격한 프로토콜 검사"
@@ -5996,6 +6314,20 @@ msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr ""
@@ -6118,7 +6450,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6287,6 +6619,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "í‰í‰í•˜ê²Œ 보는 ëŒ€ì‹ ì— 3D 구름 효과를 사용합니다."
@@ -6645,6 +6981,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6708,21 +7052,25 @@ msgstr ""
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "글꼴 ê·¸ë¦¼ìž íˆ¬ëª…ë„ (불투명 함, 0ê³¼ 255 사ì´)."
-#~ msgid "Floatland mountain height"
-#~ msgstr "Floatlandì˜ ì‚° 높ì´"
-
-#, fuzzy
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Floatlandì˜ ì‚° 밀집ë„"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Floatlandì˜ ì‚° 밀집ë„"
-
-#~ msgid "Floatland level"
-#~ msgstr "Floatlandì˜ ë†’ì´"
-
#~ msgid "Enable VBO"
#~ msgstr "VBO ì ìš©"
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr "í„°ë„ ë„ˆë¹„ë¥¼ ì¡°ì ˆ, ìž‘ì€ ìˆ˜ì¹˜ëŠ” ë„“ì€ í„°ë„ì„ ë§Œë“­ë‹ˆë‹¤."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "스í¬ë¦°ìƒ· 저장 경로입니다."
+
+#, fuzzy
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "시차 êµí•© ê°•ë„"
+
+#, fuzzy
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "$1 를(ì„) 다운로드중입니다. 기다려주세요..."
+
+#~ msgid "Back"
+#~ msgstr "뒤로"
+
+#~ msgid "Ok"
+#~ msgstr "확ì¸"
diff --git a/po/ky/minetest.po b/po/ky/minetest.po
index 0210492ee..1d4de9d90 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: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: 2019-11-10 15:04+0000\n"
"Last-Translator: Krock <mk939@ymail.com>\n"
"Language-Team: Kyrgyz <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -23,6 +23,10 @@ msgstr "Кайтадан жаралуу"
msgid "You died"
msgstr "Сиз өлдүңүз."
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr ""
@@ -37,10 +41,6 @@ msgid "Main menu"
msgstr "Башкы меню"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr ""
-
-#: builtin/fstk/ui.lua
#, fuzzy
msgid "Reconnect"
msgstr "Туташуу"
@@ -119,6 +119,10 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr ""
@@ -166,20 +170,21 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Ðртка"
-
-#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
msgid "Back to Main Menu"
msgstr "Башкы меню"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
+msgid "Downloading..."
+msgstr "Жүктөлүүдө..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
msgid "Failed to download $1"
msgstr "Дүйнөнү инициалдаштыруу катаÑÑ‹"
@@ -223,15 +228,51 @@ msgstr ""
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Жаратуу"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
@@ -239,25 +280,144 @@ msgstr ""
msgid "Download one from minetest.net"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Оюн"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Оң Windows"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -413,14 +573,25 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -572,6 +743,10 @@ msgid "Host Server"
msgstr ""
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Ðты/ÑырÑөзү"
@@ -648,6 +823,7 @@ msgstr "Ðты/ÑырÑөзү"
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
#, fuzzy
msgid "PvP enabled"
@@ -924,6 +1100,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -964,6 +1148,7 @@ msgstr ""
msgid "- Public: "
msgstr "Жалпылык"
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1265,6 +1450,14 @@ msgid "Sound muted"
msgstr "Үн көлөмү"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Sound unmuted"
msgstr "Үн көлөмү"
@@ -1297,7 +1490,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1423,6 +1616,7 @@ msgstr "Сол Shift"
msgid "Left Windows"
msgstr "Сол Windows"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Меню"
@@ -1516,6 +1710,7 @@ msgstr "Пауза"
msgid "Play"
msgstr "Ойноо"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "БаÑма"
@@ -1552,6 +1747,7 @@ msgstr "Оң Windows"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Тандоо"
@@ -1798,10 +1994,15 @@ msgstr "баÑкычты баÑыңыз"
msgid "Sound Volume: "
msgstr "Үн көлөмү: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "ky"
@@ -1886,6 +2087,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1896,6 +2101,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1944,7 +2157,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1989,6 +2202,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Кошумча"
@@ -2002,10 +2225,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2183,8 +2402,8 @@ msgstr "Mip-текÑтуралоо"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2262,11 +2481,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Chat key"
msgstr "БаÑкычтарды өзгөртүү"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "БаÑкычтарды өзгөртүү"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2549,6 +2777,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2860,6 +3092,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2970,6 +3212,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -3023,6 +3293,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4326,14 +4602,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4397,6 +4665,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Main menu script"
msgstr "Башкы меню"
@@ -4465,7 +4737,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4553,10 +4827,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4624,13 +4894,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4716,6 +4986,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4824,7 +5098,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4876,9 +5150,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4955,10 +5226,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4968,7 +5235,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5002,6 +5271,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -5071,6 +5348,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5523,6 +5812,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5545,6 +5841,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5556,15 +5856,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5681,7 +5991,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5835,6 +6145,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6161,6 +6475,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6207,3 +6529,6 @@ msgstr ""
#, fuzzy
#~ msgid "Enable VBO"
#~ msgstr "Баарын күйгүзүү"
+
+#~ msgid "Back"
+#~ msgstr "Ðртка"
diff --git a/po/lo/minetest.po b/po/lo/minetest.po
index 1452369a8..731a7957d 100644
--- a/po/lo/minetest.po
+++ b/po/lo/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Lao (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: 2020-01-11 18:26+0000\n"
"Last-Translator: rubenwardy <rubenwardy@gmail.com>\n"
"Language-Team: Lao <https://hosted.weblate.org/projects/minetest/minetest/lo/"
@@ -22,6 +22,10 @@ msgstr ""
msgid "You died"
msgstr ""
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr ""
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr ""
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr ""
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr ""
@@ -111,6 +111,10 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr ""
@@ -156,15 +160,15 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
+msgid "Back to Main Menu"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back to Main Menu"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
+msgid "Downloading..."
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
@@ -210,15 +214,51 @@ msgstr ""
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
@@ -226,25 +266,143 @@ msgstr ""
msgid "Download one from minetest.net"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -395,14 +553,25 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -544,6 +713,10 @@ msgid "Host Server"
msgstr ""
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr ""
@@ -611,6 +784,7 @@ msgstr ""
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
@@ -855,6 +1029,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -889,6 +1071,7 @@ msgstr ""
msgid "- Public: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1161,6 +1344,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1192,7 +1383,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1313,6 +1504,7 @@ msgstr ""
msgid "Left Windows"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1405,6 +1597,7 @@ msgstr ""
msgid "Play"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1441,6 +1634,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
@@ -1675,10 +1869,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "lo"
@@ -1762,6 +1961,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1772,6 +1975,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1820,7 +2031,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1865,6 +2076,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1878,10 +2099,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2052,8 +2269,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2131,10 +2348,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2400,6 +2625,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2708,6 +2937,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2817,6 +3056,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2870,6 +3137,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4165,14 +4438,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4236,6 +4501,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4302,7 +4571,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4390,10 +4661,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4461,13 +4728,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4552,6 +4819,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4658,7 +4929,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4710,9 +4981,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4789,10 +5057,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4802,7 +5066,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4836,6 +5102,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4904,6 +5178,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5342,6 +5628,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5364,6 +5657,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5375,15 +5672,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5500,7 +5807,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5653,6 +5960,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -5972,6 +6283,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
diff --git a/po/lt/minetest.po b/po/lt/minetest.po
index 8a81c9c72..c4c658629 100644
--- a/po/lt/minetest.po
+++ b/po/lt/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Lithuanian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-11-10 15:04+0000\n"
-"Last-Translator: Krock <mk939@ymail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-05-10 12:32+0000\n"
+"Last-Translator: restcoser <restcoser.mail@gmail.com>\n"
"Language-Team: Lithuanian <https://hosted.weblate.org/projects/minetest/"
"minetest/lt/>\n"
"Language: lt\n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > "
"19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? "
"1 : 2);\n"
-"X-Generator: Weblate 3.10-dev\n"
+"X-Generator: Weblate 4.1-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -25,6 +25,10 @@ msgstr "Prisikelti"
msgid "You died"
msgstr "Jūs numirėte."
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -40,10 +44,6 @@ msgid "Main menu"
msgstr "Pagrindinis meniu"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Gerai"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Prisijungti iš naujo"
@@ -125,6 +125,10 @@ msgstr ""
"rašmenys [a-z0-9_] yra leidžiami."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Papildinys:"
@@ -173,18 +177,18 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Atgal"
-
-#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
msgid "Back to Main Menu"
msgstr "Pagrindinis meniu"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
-msgid "Downloading and installing $1, please wait..."
-msgstr "AtsiunÄiama $1, praÅ¡ome palaukti..."
+msgid "Downloading..."
+msgstr "Įkeliama..."
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
@@ -230,6 +234,10 @@ msgstr "Įdiegti"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
+msgstr "Atnaujinti"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -237,11 +245,44 @@ msgid "A world named \"$1\" already exists"
msgstr "Pasaulis, pavadintas „$1“ jau yra"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Sukurti"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
+msgid "Decorations"
+msgstr "Papildinio informacija:"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Atsisiųskite sub žaidimą, tokį kaip minetest_game, iš minetest.net"
@@ -249,26 +290,147 @@ msgstr "Atsisiųskite sub žaidimą, tokį kaip minetest_game, iš minetest.net"
msgid "Download one from minetest.net"
msgstr "Atsisiųsti vieną iš minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Žaidimas"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Žemėlapių generavimas"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Žemėlapių generavimas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "No game selected"
msgstr "Intervalo pasirinkimas"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Dešinieji langai"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "SÄ—kla"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Dėmesio: Minimalus kūrimo bandymas yra skirtas vystytojams."
#: builtin/mainmenu/dlg_create_world.lua
@@ -426,15 +588,26 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
msgid "defaults"
msgstr "keisti žaidimą"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -602,6 +775,10 @@ msgid "Host Server"
msgstr "Serveris"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Vardas/slaptažodis"
@@ -676,6 +853,7 @@ msgstr "Vardas / Slaptažodis :"
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP įjungtas"
@@ -933,9 +1111,17 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "Pateiktas pasaulio kelias neegzistuoja: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr "yes"
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -974,6 +1160,7 @@ msgstr "Prievadas"
msgid "- Public: "
msgstr "Viešas"
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1285,6 +1472,14 @@ msgid "Sound muted"
msgstr "Garso lygis"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Sound unmuted"
msgstr "Garso lygis"
@@ -1317,7 +1512,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "gerai"
@@ -1445,6 +1640,7 @@ msgstr "Kairysis Shift"
msgid "Left Windows"
msgstr "Kairieji langai"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Meniu"
@@ -1538,6 +1734,7 @@ msgstr "Pause"
msgid "Play"
msgstr "Žaisti"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Spausdinti"
@@ -1574,6 +1771,7 @@ msgstr "Dešinieji langai"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Pasirinkti"
@@ -1820,10 +2018,15 @@ msgstr "paspauskite klavišą"
msgid "Sound Volume: "
msgstr "Garso lygis: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Įvesti"
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "lt"
@@ -1908,6 +2111,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1918,6 +2125,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1966,7 +2181,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2011,6 +2226,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -2024,10 +2249,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2202,8 +2423,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2281,11 +2502,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Chat key"
msgstr "Nustatyti klavišus"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Nustatyti klavišus"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2569,6 +2799,11 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "keisti žaidimą"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2881,6 +3116,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2936,7 +3181,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Field of view"
-msgstr ""
+msgstr "Matymo laukas"
#: src/settings_translation_file.cpp
msgid "Field of view in degrees."
@@ -2990,6 +3235,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -3043,6 +3316,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4347,14 +4626,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4418,6 +4689,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Main menu script"
msgstr "Pagrindinis meniu"
@@ -4486,7 +4761,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4583,10 +4860,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4654,13 +4927,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4746,6 +5019,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4853,7 +5130,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4905,9 +5182,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4985,10 +5259,6 @@ msgid "Parallax occlusion scale"
msgstr "ParalaksinÄ— okliuzija"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4998,7 +5268,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5032,6 +5304,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -5101,6 +5381,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5554,6 +5846,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5576,6 +5875,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5587,15 +5890,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5712,7 +6025,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5865,6 +6178,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6189,6 +6506,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6234,3 +6559,13 @@ msgstr ""
#, fuzzy
#~ msgid "Enable VBO"
#~ msgstr "Įjungti papildinį"
+
+#, fuzzy
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "AtsiunÄiama $1, praÅ¡ome palaukti..."
+
+#~ msgid "Back"
+#~ msgstr "Atgal"
+
+#~ msgid "Ok"
+#~ msgstr "Gerai"
diff --git a/po/lv/minetest.po b/po/lv/minetest.po
new file mode 100644
index 000000000..5e63284a3
--- /dev/null
+++ b/po/lv/minetest.po
@@ -0,0 +1,6395 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-04 16:41+0000\n"
+"Last-Translator: Uko Koknevics <TheZeus121@gmail.com>\n"
+"Language-Team: Latvian <https://hosted.weblate.org/projects/minetest/"
+"minetest/lv/>\n"
+"Language: lv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
+"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
+"X-Generator: Weblate 4.1-dev\n"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr "Atdzīvoties"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr "JÅ«s nomirÄt"
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr "RadÄs kļūme Lua skriptÄ:"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr "RadÄs kļūme:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "GalvenÄ izvÄ“lne"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Atjaunot savienojumu"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Serveris ir pieprasījis savienojuma atjaunošanu:"
+
+#: builtin/mainmenu/common.lua src/client/game.cpp
+msgid "Loading..."
+msgstr "IelÄde..."
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Protokola versiju neatbilstība. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Serveris pieprasa protokola versiju $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Serveris atbalsta protokola versijas starp $1 un $2. "
+
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+"Pamēģiniet atkÄrtoti ieslÄ“gt publisko serveru sarakstu un pÄrbaudiet "
+"interneta savienojumu."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Mēs atbalstam tikai protokola versiju $1."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Mēs atbalstam protokola versijas starp $1 un $2."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr "Atcelt"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr "Atkarības:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr "Atspējot visus"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr "Atspējot modu komplektu"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Iespējot visus"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr "Iespējot modu komplektu"
+
+#: 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 ""
+"NeizdevÄs iespÄ“jot modu \"$1\", jo tas satur neatļautus simbolus. Tikai "
+"sekojošie simboli ir atļauti: [a-z0-9_]."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "Mods:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr "Nav (neobligÄto) atkarÄ«bu"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr "Nav atrasts spēles apraksts."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr "Nav obligÄto atkarÄ«bu"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr "Nav atrasts modu komplekta apraksts."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr "Nav neobligÄto atkarÄ«bu"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr "NeobligÄtÄs atkarÄ«bas:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "SaglabÄt"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Pasaule:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "iespējots"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr "Visi papildinÄjumi"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr "Atpakaļ uz Galveno Izvēlni"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "IelÄde..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr "NeizdevÄs lejuplÄdÄ“t $1"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Spēles"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr "Instalēt"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Mods"
+msgstr "Modi"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr "NevarÄ“ja iegÅ«t papildinÄjumus"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr "Nav resultÄtu"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr "Meklēt"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr "Tekstūru komplekti"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr "Atinstalēt"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr "Atjaunot"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "Pasaule ar nosaukumu “$1†jau eksistē"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "OktÄvas"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Izveidot"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "InformÄcija:"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a game, such as Minetest Game, from minetest.net"
+msgstr "LejuplÄdÄ“jiet spÄ“les, kÄ piemÄ“ram, “Minetest Gameâ€, no minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Varat tÄs lejuplÄdÄ“t no minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "Spēle"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Kartes ģenerators"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr "Nav izvēlētas spēles"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr "Sēkla"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
+msgstr ""
+"UzmanÄ«bu: “Minimal development test†ir domÄts priekÅ¡ spÄ“les izstrÄdÄtÄjiem."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Pasaules nosaukums"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no games installed."
+msgstr "Jums nav instalēta neviena spēle."
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "Vai JÅ«s esat pÄrliecinÄts, ka vÄ“laties izdzÄ“st “$1â€?"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
+#: src/client/keycode.cpp
+msgid "Delete"
+msgstr "Izdzēst"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr "pkgmgr: neizdevÄs izdzÄ“st “$1â€"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr "pkgmgr: nepieejama atraÅ¡anÄs vieta “$1â€"
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "Vai izdzēst pasauli “$1�"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr "Piekrist"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr "PÄrsaukt modu komplektu:"
+
+#: 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 ""
+"Å im modu komplektam ir noteikts nosaukums, kas uzdots failÄ modpack.conf, un "
+"tas anulÄ“s jebkÄdu pÄrsaukÅ¡anu Å¡eit."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Nav iestatījuma apraksta)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr "2D Troksnis"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Atpakaļ uz Iestatījumu lapu"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "PÄrlÅ«kot"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Atspējots"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Izmainīt"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Iespējots"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr "OktÄvas"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr "Nobīde"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistance"
+msgstr "Noturība"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Lūdzu ievadiet derīgu veselu skaitli."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Lūdzu ievadiet derīgu skaitli."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Atiestatīt uz noklusējumu"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr "Mērogs"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr "Izvēlēties mapi"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr "Izvēlēties failu"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "RÄdÄ«t tehniskos nosaukumus"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr "VÄ“rtÄ«bai jÄbÅ«t vismaz $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr "VÄ“rtÄ«bai jÄbÅ«t ne lielÄkai par $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr "X"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr "Izkaisījums pa X asi"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr "Y"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr "Izkaisījums pa Y asi"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr "Z"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr "Izkaisījums pa Z asi"
+
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "absvalue"
+msgstr "absolÅ«tÄ vÄ“rtÄ«ba"
+
+#. ~ "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 "noklusējuma"
+
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "eased"
+msgstr "atvieglots"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr "$1 (Iespējots)"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr "$1 modi"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr "NeizdevÄs instalÄ“t $1 uz $2"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr "Moda instalÄcija: NeizdevÄs atrast Ä«sto moda nosaukumu priekÅ¡ “$1â€"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr ""
+"Moda instalÄcija: NeizdevÄs atrast derÄ«gu mapes nosaukumu priekÅ¡ modu "
+"komplekta “$1â€"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: Unsupported file type \"$1\" or broken archive"
+msgstr "InstalÄcija: NeatbalstÄ«ts faila tips “$1†vai arÄ« sabojÄts arhÄ«vs"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: file: \"$1\""
+msgstr "InstalÄcija: fails: “$1â€"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr "NeizdevÄs atrast derÄ«gu modu vai modu komplektu"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr "NeizdevÄs ieinstalÄ“t $1 kÄ tekstÅ«ru paku"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr "NeizdevÄs instalÄ“t spÄ“li kÄ $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr "NeizdevÄs instalÄ“t modu kÄ $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr "NeizdevÄs instalÄ“t modu komplektu kÄ $1"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Browse online content"
+msgstr "PÄrlÅ«kot tieÅ¡saistes saturu"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Content"
+msgstr "Saturs"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Disable Texture Pack"
+msgstr "Atspējot tekstūru komplektu"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Information:"
+msgstr "InformÄcija:"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Installed Packages:"
+msgstr "InstalÄ“tie papildinÄjumi:"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No dependencies."
+msgstr "Nav atkarību."
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No package description available"
+msgstr "Nav atrasts papildinÄjuma apraksts"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Rename"
+msgstr "PÄrsaukt"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Uninstall Package"
+msgstr "AtinstalÄ“t papildinÄjumu"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Use Texture Pack"
+msgstr "Iespējot tekstūru komplektu"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "Aktīvie dalībnieki"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "Pamata izstrÄdÄtÄji"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Pateicības"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr "Bijušie dalībnieki"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "BijuÅ¡ie pamata izstrÄdÄtÄji"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Announce Server"
+msgstr "Paziņot par serveri"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Bind Address"
+msgstr "Piesaistes adrese"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Configure"
+msgstr "Iestatīt"
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative Mode"
+msgstr "Radošais režīms"
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Enable Damage"
+msgstr "IespÄ“jot bojÄjumus"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Game"
+msgstr "SpÄ“lÄ“t (kÄ serveris)"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Server"
+msgstr "Palaist serveri"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Name/Password"
+msgstr "VÄrds/Parole"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "New"
+msgstr "Jauns"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+msgstr "Pasaule nav ne izveidota, ne izvēlēta!"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Play Game"
+msgstr "Spēlēt"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Port"
+msgstr "Ports"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select World:"
+msgstr "Izvēlieties pasauli:"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Server Port"
+msgstr "Servera ports"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Start Game"
+msgstr "SÄkt spÄ“li"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Address / Port"
+msgstr "Adrese / Ports"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr "Pieslēgties"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr "Radošais režīms"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr "BojÄjumi iespÄ“joti"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr "Izdzēst no izlases"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr "Pievienot izlasei"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Join Game"
+msgstr "Pievienoties spēlei"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr "VÄrds / Parole"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Ping"
+msgstr "Pings"
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "PvP iespējots"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "3D mÄkoņi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "All Settings"
+msgstr "Visi iestatījumi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "GludinÄÅ¡ana:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr ""
+"Vai esat pÄrliecinÄts, ka vÄ“laties atiestatÄ«t savu viena spÄ“lÄ“tÄja pasauli?"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
+msgstr "AtcerÄ“ties ekrÄna izmÄ“ru"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr "BilineÄrais filtrs"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr "“Bump Mappingâ€"
+
+#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
+msgid "Change Keys"
+msgstr "Nomainīt kontroles"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "Savienots stikls"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "Skaistas lapas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Generate Normal Maps"
+msgstr "Izveidot normÄl-kartes"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr "“Mipmapâ€"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr "“Mipmap†+ anizotr. filtrs"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "NÄ“"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "Bez filtra"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "Bez “mipmapâ€"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "Bloku izcelšana"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr "Bloku konturēšana"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "None"
+msgstr "Nekas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "Necaurredzamas lapas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "Necaurredzams ūdens"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "Tekstūru dziļums"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr "Daļiņas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Reset singleplayer world"
+msgstr "AtiestatÄ«t viena spÄ“lÄ“tÄja pasauli"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr "EkrÄns:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "Iestatījumi"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr "Å eideri"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (unavailable)"
+msgstr "Å eideri (nepieejami)"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "VienkÄrÅ¡as lapas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "Gluds apgaismojums"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "Teksturēšana:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "Lai iespÄ“jotu Å¡eiderus, jÄizmanto OpenGL draiveris."
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "Toņu atbilstība"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold: (px)"
+msgstr "PieskÄrienslieksnis: (px)"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "TrilineÄrais filtrs"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr "Viļņojošas lapas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Liquids"
+msgstr "Viļņojoši šķidrumi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr "Viļņojoši augi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "JÄ"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr "Iestatīt modus"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr "GalvenÄ izvÄ“lne"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "SÄkt viena spÄ“lÄ“tÄja spÄ“li"
+
+#: src/client/client.cpp
+msgid "Connection timed out."
+msgstr "Savienojuma noildze."
+
+#: src/client/client.cpp
+msgid "Done!"
+msgstr "Gatavs!"
+
+#: src/client/client.cpp
+msgid "Initializing nodes"
+msgstr "Inicializē blokus"
+
+#: src/client/client.cpp
+msgid "Initializing nodes..."
+msgstr "Inicializē blokus..."
+
+#: src/client/client.cpp
+msgid "Loading textures..."
+msgstr "IelÄdÄ“ tekstÅ«ras..."
+
+#: src/client/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "PÄrbÅ«vÄ“ Å¡eiderus..."
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "Savienojuma kļūme (noildze?)"
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "NevarÄ“ja atrast vai ielÄdÄ“t spÄ“li \""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "NederÄ«ga spÄ“les specifikÄcija."
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "GalvenÄ izvÄ“lne"
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "Nav izvēlēta ne pasaule, ne adrese. Nav, ko darīt."
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "SpÄ“lÄ“tÄja vÄrds ir pÄrÄk garÅ¡."
+
+#: src/client/clientlauncher.cpp
+msgid "Please choose a name!"
+msgstr "LÅ«dzu, izvÄ“lieties vÄrdu!"
+
+#: src/client/clientlauncher.cpp
+msgid "Provided password file failed to open: "
+msgstr "NeizdevÄs atvÄ“rt iestatÄ«to paroļu failu: "
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "SniegtÄ pasaules atraÅ¡anÄs vieta neeksistÄ“: "
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
+#: src/client/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "no"
+
+#: src/client/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"VairÄk informÄcijas failÄ debug.txt."
+
+#: src/client/game.cpp
+msgid "- Address: "
+msgstr "- Adrese: "
+
+#: src/client/game.cpp
+msgid "- Creative Mode: "
+msgstr "- Radošais režīms: "
+
+#: src/client/game.cpp
+msgid "- Damage: "
+msgstr "- BojÄjumi: "
+
+#: src/client/game.cpp
+msgid "- Mode: "
+msgstr "- Režīms: "
+
+#: src/client/game.cpp
+msgid "- Port: "
+msgstr "- Ports: "
+
+#: src/client/game.cpp
+msgid "- Public: "
+msgstr "- Publisks: "
+
+#. ~ PvP = Player versus Player
+#: src/client/game.cpp
+msgid "- PvP: "
+msgstr "- PvP: "
+
+#: src/client/game.cpp
+msgid "- Server Name: "
+msgstr "- Severa nosaukums: "
+
+#: src/client/game.cpp
+msgid "Automatic forward disabled"
+msgstr "AutomÄtiskÄ pÄrvietoÅ¡anÄs izslÄ“gta"
+
+#: src/client/game.cpp
+msgid "Automatic forward enabled"
+msgstr "AutomÄtiskÄ pÄrvietoÅ¡anÄs ieslÄ“gta"
+
+#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr "Kameras atjaunošana atspējota"
+
+#: src/client/game.cpp
+msgid "Camera update enabled"
+msgstr "Kameras atjaunošana iespējota"
+
+#: src/client/game.cpp
+msgid "Change Password"
+msgstr "Nomainīt paroli"
+
+#: src/client/game.cpp
+msgid "Cinematic mode disabled"
+msgstr "Kino režīms izslēgts"
+
+#: src/client/game.cpp
+msgid "Cinematic mode enabled"
+msgstr "Kino režīms ieslēgts"
+
+#: src/client/game.cpp
+msgid "Client side scripting is disabled"
+msgstr "Klienta puses skriptēšana ir atspējota"
+
+#: src/client/game.cpp
+msgid "Connecting to server..."
+msgstr "Savienojas ar serveri..."
+
+#: src/client/game.cpp
+msgid "Continue"
+msgstr "TurpinÄt"
+
+#: src/client/game.cpp
+#, c-format
+msgid ""
+"Controls:\n"
+"- %s: move forwards\n"
+"- %s: move backwards\n"
+"- %s: move left\n"
+"- %s: move right\n"
+"- %s: jump/climb\n"
+"- %s: sneak/go down\n"
+"- %s: drop item\n"
+"- %s: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- %s: chat\n"
+msgstr ""
+"Kontroles:\n"
+"- %s: uz priekšu\n"
+"- %s: uz atpakaļu\n"
+"- %s: pa kreisi\n"
+"- %s: pa labi\n"
+"- %s: lekt/kÄpt\n"
+"- %s: lavīties/nolaisties\n"
+"- %s: nomest priekšmetu\n"
+"- %s: inventÄrs\n"
+"- Pele: griezties/skatīties\n"
+"- Peles kreisÄ poga: rakt/sist\n"
+"- Peles labÄ poga: likt/izmantot\n"
+"- Peles rullītis: izvēlēties priekšmetu\n"
+"- %s: Äats\n"
+
+#: src/client/game.cpp
+msgid "Creating client..."
+msgstr "Izveido klientu..."
+
+#: src/client/game.cpp
+msgid "Creating server..."
+msgstr "Izveido serveri..."
+
+#: src/client/game.cpp
+msgid "Debug info and profiler graph hidden"
+msgstr "AtkļūdoÅ¡anas informÄcija un profilēšanas grafiks paslÄ“pti"
+
+#: src/client/game.cpp
+msgid "Debug info shown"
+msgstr "AtkļūdoÅ¡anas informÄcija parÄdÄ«ta"
+
+#: src/client/game.cpp
+msgid "Debug info, profiler graph, and wireframe hidden"
+msgstr ""
+"AtkļūdoÅ¡anas informÄcija, profilēšanas grafiks un karkasattÄ“lojums atspÄ“joti"
+
+#: src/client/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"Noklusējuma kontroles:\n"
+"Ne izvēlnē:\n"
+"- pieskÄriens: aktivizÄ“ pogu\n"
+"- dubultpieskÄriens: nolikt/izmantot\n"
+"- vilkt ar pirksto: skatÄ«ties apkÄrt\n"
+"IzvÄ“lnÄ“/inventÄrÄ:\n"
+"- dubultpieskÄriens (Ärpus izvÄ“lnes)\n"
+" --> aizvērt izvēlni\n"
+"- pieskÄriens priekÅ¡metiem, pieskÄriens kastÄ«tei:\n"
+" --> pÄrvietot priekÅ¡metus\n"
+"- pieskÄriens&vilkÅ¡ana, ar otru pirkstu pieskÄriens:\n"
+" --> novietot vienu priekšmetu kastītē\n"
+
+#: src/client/game.cpp
+msgid "Disabled unlimited viewing range"
+msgstr "Atspējots neierobežots redzamības diapazons"
+
+#: src/client/game.cpp
+msgid "Enabled unlimited viewing range"
+msgstr "Iespējots neierobežots redzamības diapazons"
+
+#: src/client/game.cpp
+msgid "Exit to Menu"
+msgstr "Iziet uz izvēlni"
+
+#: src/client/game.cpp
+msgid "Exit to OS"
+msgstr "Iziet uz OS"
+
+#: src/client/game.cpp
+msgid "Fast mode disabled"
+msgstr "Ātrais režīms izslēgts"
+
+#: src/client/game.cpp
+msgid "Fast mode enabled"
+msgstr "Ātrais režīms ieslēgts"
+
+#: src/client/game.cpp
+msgid "Fast mode enabled (note: no 'fast' privilege)"
+msgstr "Ātrais režīms ieslēgts (bet: nav “fast†privilēģijas)"
+
+#: src/client/game.cpp
+msgid "Fly mode disabled"
+msgstr "Lidošanas režīms izslēgts"
+
+#: src/client/game.cpp
+msgid "Fly mode enabled"
+msgstr "Lidošanas režīms ieslēgts"
+
+#: src/client/game.cpp
+msgid "Fly mode enabled (note: no 'fly' privilege)"
+msgstr "Lidošanas režīms ieslēgts (bet: nav “fly†privilēģijas)"
+
+#: src/client/game.cpp
+msgid "Fog disabled"
+msgstr "Migla atspējota"
+
+#: src/client/game.cpp
+msgid "Fog enabled"
+msgstr "Migla iespējota"
+
+#: src/client/game.cpp
+msgid "Game info:"
+msgstr "SpÄ“les informÄcija:"
+
+#: src/client/game.cpp
+msgid "Game paused"
+msgstr "Spēle nopauzēta"
+
+#: src/client/game.cpp
+msgid "Hosting server"
+msgstr "LokÄls serveris"
+
+#: src/client/game.cpp
+msgid "Item definitions..."
+msgstr "Priekšmetu apraksti..."
+
+#: src/client/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
+
+#: src/client/game.cpp
+msgid "Media..."
+msgstr "Mēdiji..."
+
+#: src/client/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
+
+#: src/client/game.cpp
+msgid "Minimap currently disabled by game or mod"
+msgstr "Minikarte šobrīd atspējota vai nu spēlei, vai modam"
+
+#: src/client/game.cpp
+msgid "Minimap hidden"
+msgstr "Minikarte paslēpta"
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x1"
+msgstr "Minikarte radara režīmÄ, palielinÄjums x1"
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x2"
+msgstr "Minikarte radara režīmÄ, palielinÄjums x2"
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x4"
+msgstr "Minikarte radara režīmÄ, palielinÄjums x4"
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x1"
+msgstr "Minikarte virsmas režīmÄ, palielinÄjums x1"
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x2"
+msgstr "Minikarte virsmas režīmÄ, palielinÄjums x2"
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x4"
+msgstr "Minikarte virsmas režīmÄ, palielinÄjums x4"
+
+#: src/client/game.cpp
+msgid "Noclip mode disabled"
+msgstr "“Noclip†režīms izslēgts"
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled"
+msgstr "“Noclip†režīms ieslēgts"
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled (note: no 'noclip' privilege)"
+msgstr "“Noclip†režīms ieslēgts (bet: nav “noclip†privilēģijas)"
+
+#: src/client/game.cpp
+msgid "Node definitions..."
+msgstr "Bloku apraksti..."
+
+#: src/client/game.cpp
+msgid "Off"
+msgstr "Izslēgts"
+
+#: src/client/game.cpp
+msgid "On"
+msgstr "Ieslēgts"
+
+#: src/client/game.cpp
+msgid "Pitch move mode disabled"
+msgstr "KustÄ«ba uz augÅ¡u/leju pÄ“c skatīšanÄs virziena izslÄ“gta"
+
+#: src/client/game.cpp
+msgid "Pitch move mode enabled"
+msgstr "KustÄ«ba uz augÅ¡u/leju pÄ“c skatīšanÄs virziena ieslÄ“gta"
+
+#: src/client/game.cpp
+msgid "Profiler graph shown"
+msgstr "Profilēšanas grafiks parÄdÄ«ts"
+
+#: src/client/game.cpp
+msgid "Remote server"
+msgstr "AttÄlinÄts serveris"
+
+#: src/client/game.cpp
+msgid "Resolving address..."
+msgstr "Atrisina adresi..."
+
+#: src/client/game.cpp
+msgid "Shutting down..."
+msgstr "Beidz darbu..."
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr "Viena spÄ“lÄ“tÄja režīms"
+
+#: src/client/game.cpp
+msgid "Sound Volume"
+msgstr "Skaņas skaļums"
+
+#: src/client/game.cpp
+msgid "Sound muted"
+msgstr "Skaņa izslēgta"
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound unmuted"
+msgstr "Skaņa ieslēgta"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range changed to %d"
+msgstr "Redzamības diapazons nomainīts uz %d"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at maximum: %d"
+msgstr "RedzamÄ«bas diapazons ir maksimÄls: %d"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at minimum: %d"
+msgstr "RedzamÄ«bas diapazons ir minimÄls: %d"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Volume changed to %d%%"
+msgstr "Skaļums nomainīts uz %d%%"
+
+#: src/client/game.cpp
+msgid "Wireframe shown"
+msgstr "Karkasattēlojums iespējots"
+
+#: src/client/game.cpp
+msgid "Zoom currently disabled by game or mod"
+msgstr "TuvinÄÅ¡ana Å¡obrÄ«d atspÄ“jota vai nu spÄ“lei, vai modam"
+
+#: src/client/game.cpp
+msgid "ok"
+msgstr "ok"
+
+#: src/client/gameui.cpp
+msgid "Chat hidden"
+msgstr "Čats paslēpts"
+
+#: src/client/gameui.cpp
+msgid "Chat shown"
+msgstr "ÄŒats parÄdÄ«ts"
+
+#: src/client/gameui.cpp
+msgid "HUD hidden"
+msgstr "Spēles saskarne paslēpta"
+
+#: src/client/gameui.cpp
+msgid "HUD shown"
+msgstr "SpÄ“les saskarne parÄdÄ«ta"
+
+#: src/client/gameui.cpp
+msgid "Profiler hidden"
+msgstr "ProfilÄ“tÄjs paslÄ“pts"
+
+#: src/client/gameui.cpp
+#, c-format
+msgid "Profiler shown (page %d of %d)"
+msgstr "ProfilÄ“tÄjs parÄdÄ«ts (lapa %d no %d)"
+
+#: src/client/keycode.cpp
+msgid "Apps"
+msgstr "Menu"
+
+#: src/client/keycode.cpp
+msgid "Backspace"
+msgstr "Backspace"
+
+#: src/client/keycode.cpp
+msgid "Caps Lock"
+msgstr "Caps Lock"
+
+#: src/client/keycode.cpp
+msgid "Clear"
+msgstr "Notīrīt"
+
+#: src/client/keycode.cpp
+msgid "Control"
+msgstr "Ctrl"
+
+#: src/client/keycode.cpp
+msgid "Down"
+msgstr "Uz leju"
+
+#: src/client/keycode.cpp
+msgid "End"
+msgstr "End"
+
+#: src/client/keycode.cpp
+msgid "Erase EOF"
+msgstr "Erase EOF"
+
+#: src/client/keycode.cpp
+msgid "Execute"
+msgstr "Execute"
+
+#: src/client/keycode.cpp
+msgid "Help"
+msgstr "Help"
+
+#: src/client/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/client/keycode.cpp
+msgid "IME Accept"
+msgstr "IME Accept"
+
+#: src/client/keycode.cpp
+msgid "IME Convert"
+msgstr "IME Convert"
+
+#: src/client/keycode.cpp
+msgid "IME Escape"
+msgstr "IME Escape"
+
+#: src/client/keycode.cpp
+msgid "IME Mode Change"
+msgstr "IME Mode Change"
+
+#: src/client/keycode.cpp
+msgid "IME Nonconvert"
+msgstr "IME Nonconvert"
+
+#: src/client/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Left"
+msgstr "Pa kreisi"
+
+#: src/client/keycode.cpp
+msgid "Left Button"
+msgstr "KreisÄ poga"
+
+#: src/client/keycode.cpp
+msgid "Left Control"
+msgstr "Kreisais Ctrl"
+
+#: src/client/keycode.cpp
+msgid "Left Menu"
+msgstr "Kreisais Alt"
+
+#: src/client/keycode.cpp
+msgid "Left Shift"
+msgstr "Kreisais Shift"
+
+#: src/client/keycode.cpp
+msgid "Left Windows"
+msgstr "KreisÄ Windows poga"
+
+#. ~ Key name, common on Windows keyboards
+#: src/client/keycode.cpp
+msgid "Menu"
+msgstr "Alt"
+
+#: src/client/keycode.cpp
+msgid "Middle Button"
+msgstr "VidÄ“jÄ poga"
+
+#: src/client/keycode.cpp
+msgid "Num Lock"
+msgstr "Num Lock"
+
+#: src/client/keycode.cpp
+msgid "Numpad *"
+msgstr "Ciparbloka *"
+
+#: src/client/keycode.cpp
+msgid "Numpad +"
+msgstr "Ciparbloka +"
+
+#: src/client/keycode.cpp
+msgid "Numpad -"
+msgstr "Ciparbloka -"
+
+#: src/client/keycode.cpp
+msgid "Numpad ."
+msgstr "Ciparbloka ."
+
+#: src/client/keycode.cpp
+msgid "Numpad /"
+msgstr "Ciparbloka /"
+
+#: src/client/keycode.cpp
+msgid "Numpad 0"
+msgstr "Ciparbloka 0"
+
+#: src/client/keycode.cpp
+msgid "Numpad 1"
+msgstr "Ciparbloka 1"
+
+#: src/client/keycode.cpp
+msgid "Numpad 2"
+msgstr "Ciparbloka 2"
+
+#: src/client/keycode.cpp
+msgid "Numpad 3"
+msgstr "Ciparbloka 3"
+
+#: src/client/keycode.cpp
+msgid "Numpad 4"
+msgstr "Ciparbloka 4"
+
+#: src/client/keycode.cpp
+msgid "Numpad 5"
+msgstr "Ciparbloka 5"
+
+#: src/client/keycode.cpp
+msgid "Numpad 6"
+msgstr "Ciparbloka 6"
+
+#: src/client/keycode.cpp
+msgid "Numpad 7"
+msgstr "Ciparbloka 7"
+
+#: src/client/keycode.cpp
+msgid "Numpad 8"
+msgstr "Ciparbloka 8"
+
+#: src/client/keycode.cpp
+msgid "Numpad 9"
+msgstr "Ciparbloka 9"
+
+#: src/client/keycode.cpp
+msgid "OEM Clear"
+msgstr "OEM Clear"
+
+#: src/client/keycode.cpp
+msgid "Page down"
+msgstr "Page down"
+
+#: src/client/keycode.cpp
+msgid "Page up"
+msgstr "Page up"
+
+#: src/client/keycode.cpp
+msgid "Pause"
+msgstr "Pause"
+
+#: src/client/keycode.cpp
+msgid "Play"
+msgstr "Play"
+
+#. ~ "Print screen" key
+#: src/client/keycode.cpp
+msgid "Print"
+msgstr "Print Screen"
+
+#: src/client/keycode.cpp
+msgid "Return"
+msgstr "Return"
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Right"
+msgstr "Pa labi"
+
+#: src/client/keycode.cpp
+msgid "Right Button"
+msgstr "LabÄ poga"
+
+#: src/client/keycode.cpp
+msgid "Right Control"
+msgstr "Labais Ctrl"
+
+#: src/client/keycode.cpp
+msgid "Right Menu"
+msgstr "Labais Alt"
+
+#: src/client/keycode.cpp
+msgid "Right Shift"
+msgstr "Labais Shift"
+
+#: src/client/keycode.cpp
+msgid "Right Windows"
+msgstr "LabÄ Windows poga"
+
+#: src/client/keycode.cpp
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
+
+#. ~ Key name
+#: src/client/keycode.cpp
+msgid "Select"
+msgstr "Select"
+
+#: src/client/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
+
+#: src/client/keycode.cpp
+msgid "Sleep"
+msgstr "Sleep"
+
+#: src/client/keycode.cpp
+msgid "Snapshot"
+msgstr "Snapshot"
+
+#: src/client/keycode.cpp
+msgid "Space"
+msgstr "Atstarpe"
+
+#: src/client/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
+
+#: src/client/keycode.cpp
+msgid "Up"
+msgstr "Uz augšu"
+
+#: src/client/keycode.cpp
+msgid "X Button 1"
+msgstr "X Poga 1"
+
+#: src/client/keycode.cpp
+msgid "X Button 2"
+msgstr "X Poga 2"
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Zoom"
+msgstr "Zoom"
+
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "Paroles nesakrīt!"
+
+#: src/gui/guiConfirmRegistration.cpp
+msgid "Register and Join"
+msgstr "Reģistrēties un pievienoties"
+
+#: src/gui/guiConfirmRegistration.cpp
+#, c-format
+msgid ""
+"You are about to join this server with the name \"%s\" for the first time.\n"
+"If you proceed, a new account using your credentials will be created on this "
+"server.\n"
+"Please retype your password and click 'Register and Join' to confirm account "
+"creation, or click 'Cancel' to abort."
+msgstr ""
+"JÅ«s tÅ«lÄ«t pievienosieties Å¡im serverim ar vÄrdu \"%s\" pirmo reizi.\n"
+"Ja JÅ«s turpinÄsiet, Å¡ajÄ serverÄ« tiks izveidots jauns lietotÄjs ar jÅ«su "
+"pierakstīšanÄs informÄciju.\n"
+"Lūdzu ievadiet savu paroli vēlreiz un nospiediet “Reģistrēties un "
+"pievienotiesâ€, lai apstiprinÄtu lietotÄja izveidi, vai arÄ« nospiediet "
+"“Atceltâ€, lai pÄrtrauktu Å¡o darbÄ«bu."
+
+#: src/gui/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "TurpinÄt"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "\"Special\" = climb down"
+msgstr "“SpeciÄlais†= kÄpt lejÄ"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Autoforward"
+msgstr "Auto-iešana"
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Automatic jumping"
+msgstr "AutomÄtiskÄ lekÅ¡ana"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "Atmuguriski"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Change camera"
+msgstr "Mainīt kameru"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "ÄŒats"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "Komanda"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "Konsole"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. range"
+msgstr "Sam. diapazonu"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. volume"
+msgstr "Sam. skaļumu"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "Nospied “lekt†divreiz, lai lidotu"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "Mest"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "Uz priekšu"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. range"
+msgstr "Pal. diapazonu"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. volume"
+msgstr "Pal. skaļumu"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "InventÄrs"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "Lekt"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "Šis taustiņš jau tiek izmantots"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"Taustiņu iestatījumi. (Ja šī izvēlne salūzt, izdzēsiet iestatījumus no "
+"minetest.conf)"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Local command"
+msgstr "LokÄlÄ komanda"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Mute"
+msgstr "Skaņa"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Next item"
+msgstr "NÄk. priekÅ¡mets"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Prev. item"
+msgstr "Iepr. priekšmets"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "Redzamības diapazons"
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "EkrÄnÅ¡Äviņš"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "Lavīties"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Special"
+msgstr "SpeciÄlais"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle HUD"
+msgstr "Spēles saskarne"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle chat log"
+msgstr "ÄŒata logs"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "Ä€trÄ pÄrvietoÅ¡anÄs"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "Lidot"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fog"
+msgstr "Migla"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle minimap"
+msgstr "Minikarte"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr "“Noclipâ€"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle pitchmove"
+msgstr "PÄrvietoties pÄ“c skatīšanÄs leņķa"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "nospiediet pogu"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Change"
+msgstr "Nomainīt"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "ApstiprinÄt paroli"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "JaunÄ parole"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "VecÄ parole"
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Exit"
+msgstr "Iziet"
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Muted"
+msgstr "ApklusinÄts"
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "Skaņas skaļums: "
+
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
+#: src/gui/modalMenu.cpp
+msgid "Enter "
+msgstr "Ievadiet "
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
+#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
+msgid "LANG_CODE"
+msgstr "lv"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Fixes the position of virtual joystick.\n"
+"If disabled, virtual joystick will center to first-touch's position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Use virtual joystick to trigger \"aux\" button.\n"
+"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"circle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Can be used to move a desired point to (0, 0) to create a\n"
+"suitable spawn point, or to allow 'zooming in' on a desired\n"
+"point by increasing 'scale'.\n"
+"The default is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) scale of fractal in nodes.\n"
+"Actual fractal size will be 2 to 3 times larger.\n"
+"These numbers can be made very large, the fractal does\n"
+"not have to fit inside the world.\n"
+"Increase these to 'zoom' into the detail of the fractal.\n"
+"Default is for a vertically-squashed shape suitable for\n"
+"an island, set all 3 numbers equal for the raw shape."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of ridged mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of step mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that locates the river valleys and channels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise that determines number of dungeons per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D support.\n"
+"Currently supported:\n"
+"- none: no 3d output.\n"
+"- anaglyph: cyan/magenta color 3d.\n"
+"- interlaced: odd/even line based polarisation screen support.\n"
+"- topbottom: split screen top/bottom.\n"
+"- sidebyside: split screen side by side.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer based 3d.\n"
+"Note that the interlaced mode requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ABM interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of queued blocks to emerge"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration of gravity, in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Address to connect to.\n"
+"Leave this blank to start a local server.\n"
+"Note that the address field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Adds particles when digging a node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Alters the light curve by applying 'gamma correction' to it.\n"
+"Higher values make middle and lower light levels brighter.\n"
+"Value '1.0' leaves the light curve unaltered.\n"
+"This only has significant effect on daylight and artificial\n"
+"light, it has very little effect on natural night light."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amount of messages a player may send per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce to this serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name to tooltip."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Apple trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"At this distance the server will aggressively optimize which blocks are sent "
+"to\n"
+"clients.\n"
+"Small values potentially improve performance a lot, at the expense of "
+"visible\n"
+"rendering glitches (some blocks will not be rendered under water and in "
+"caves,\n"
+"as well as sometimes on land).\n"
+"Setting this to a value greater than max_block_send_distance disables this\n"
+"optimization.\n"
+"Stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically jump up single-node obstacles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autosave screen size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autoscaling mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome API temperature and humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Block send optimize distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "BÅ«vÄ“t iekÅ¡Ä spÄ“lÄ“tÄjÄ"
+
+#: src/settings_translation_file.cpp
+msgid "Builtin"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n"
+"Only works on GLES platforms. Most users will not need to change this.\n"
+"Increasing can reduce artifacting on weaker GPUs.\n"
+"0.1 = Default, 0.25 = Good value for weaker tablets."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern taper"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern upper limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Center of light curve boost range.\n"
+"Where 0.0 is minimum light level, 1.0 is maximum light level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"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 ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message count limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message kick threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message max length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chatcommands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side node lookup range restriction"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of flags to hide in the content repository.\n"
+"\"nonfree\" can be used to hide packages which do not qualify as 'free "
+"software',\n"
+"as defined by the Free Software Foundation.\n"
+"You can also specify content ratings.\n"
+"These flags are independent from Minetest versions,\n"
+"so see a full list at https://content.minetest.net/help/content_flags/"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Flag Blacklist"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Continuous forward movement, toggled by autoforward key.\n"
+"Press the autoforward key again or the backwards movement to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "Vadība"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls sinking speed in liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls width of tunnels, a smaller value creates wider tunnels.\n"
+"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
+"intensive noise calculations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Creative"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log file size threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default report format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas where trees have apples."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas with sandy beaches."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines full size of caverns, smaller values create larger caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines large-scale river channel structure."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines location and terrain of optional hills and lakes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the base ground level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the depth of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river valley."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines tree areas and tree density."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Delay between mesh updates on the client in ms. Increasing this will slow\n"
+"down the rate of mesh updates, thus reducing jitter on slower clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay in sending blocks after building"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desert noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Deserts occur when np_biome exceeds this value.\n"
+"When the 'snowbiomes' flag is enabled, this is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Digging particles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug information."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable IPv6 support (for both client and server).\n"
+"Required for IPv6 connections to work at all."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for new created maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod channels support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable register confirmation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable register confirmation when connecting to server.\n"
+"If disabled, new account will be registered automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable vertex buffer objects.\n"
+"This should greatly improve graphics performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable view bobbing and amount of view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server.\n"
+"Ignored if bind_address is set.\n"
+"Needs enable_ipv6 to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
+"Simulates the tone curve of photographic film and how this approximates the\n"
+"appearance of high dynamic range images. Mid-range contrast is slightly\n"
+"enhanced, highlights and shadows are gradually compressed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables bumpmapping for textures. Normalmaps need to be supplied by the "
+"texture pack\n"
+"or need to be auto-generated.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables the sound system.\n"
+"If disabled, this completely disables all sounds everywhere and the in-game\n"
+"sound controls will be non-functional.\n"
+"Changing this setting requires a restart."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Factor noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "Ä€trÄ pÄrvietoÅ¡anÄs"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via the \"special\" key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the\n"
+"Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed virtual joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "Lidošana"
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog start"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font bold by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font italic by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the default font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the fallback font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the monospace font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fractal type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fraction of the visible distance at which fog starts to be rendered"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FreeType fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes).\n"
+"\n"
+"Setting this larger than active_block_range will also cause the server\n"
+"to maintain active objects up to this distance in the direction the\n"
+"player is looking. (This can avoid mobs suddenly disappearing from view)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Global callbacks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at maximum light level.\n"
+"Controls the contrast of the highest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scale factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated Lua API calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Have the profiler instrument itself:\n"
+"* Instrument an empty function.\n"
+"This estimates the overhead, that instrumentation is adding (+1 function "
+"call).\n"
+"* Instrument the sampler being used to update the statistics."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height select noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness3 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness4 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar next key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar previous key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 10 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 11 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 14 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 15 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 16 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 17 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 18 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 19 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 2 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 20 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 21 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 23 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 24 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 25 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 26 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 27 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 28 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 29 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 3 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 30 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 31 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 32 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 4 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 5 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 6 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 7 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 8 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 9 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How fast liquid waves will move. Higher = faster.\n"
+"If negative, liquid waves will move backwards.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
+"are\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled the server will perform map block occlusion culling based on\n"
+"on the eye position of the player. This can reduce the number of blocks\n"
+"sent to the client 50-80%. The client will not longer receive most "
+"invisible\n"
+"so that the utility of noclip mode is reduced."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled together with fly mode, player is able to fly through solid "
+"nodes.\n"
+"This requires the \"noclip\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
+"down and\n"
+"descending."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, invalid world data won't cause the server to shut down.\n"
+"Only enable this if you know what you are doing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, makes move directions relative to the player's pitch when flying "
+"or swimming."
+msgstr ""
+"Ja iespÄ“jota, liek visÄm kustÄ«bÄm peldot un lidojot bÅ«t relatÄ«vÄm pret "
+"spÄ“lÄ“tÄja skatīšanÄs virziena."
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+"Ja iespÄ“jots, varat novietot blokus, kur JÅ«s stÄvat.\n"
+"Å is ir noderÄ«gi, kad jÄbÅ«vÄ“ Å¡aurÄs vietÄs."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the CSM restriction for node range is enabled, get_node calls are "
+"limited\n"
+"to this distance from the player to the node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the file size of debug.txt exceeds the number of megabytes specified in\n"
+"this setting when it is opened, the file is moved to debug.txt.1,\n"
+"deleting an older debug.txt.1 if it exists.\n"
+"debug.txt is only moved if this setting is positive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inc. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Initial vertical speed when jumping, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument chatcommands on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Active Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrumentation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Increasing this increases the amount of fine detail, but also\n"
+"increases processing load.\n"
+"At iterations = 20 this mapgen has a similar load to mapgen V7."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick ID"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick button repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick frustum sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"W component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"X component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Y component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Z component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"Will also disable autoforward, when active.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for muting the game.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type local commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 19th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 20th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 23rd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 24th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 25th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 26th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 27th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 28th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 29th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 30th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 31st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 32nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the eighth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fourth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the next item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the previous item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the second hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the seventh hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the sixth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the third hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling autoforward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camera update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the large chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key to use view zoom when possible.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave proportion flooded"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large chat console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over\n"
+"network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Level of logging to be written to debug.txt:\n"
+"- <nothing> (no logging)\n"
+"- none (messages with no level)\n"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost center"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost spread"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve high gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve low gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
+"Only mapchunks completely within the mapgen limit are generated.\n"
+"Value is stored per-world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sinking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Load the game profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Load the game profiler to collect game profiling data.\n"
+"Provides a /profiler command to access the compiled profile.\n"
+"Useful for mod developers and server operators."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Loading Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes all liquids opaque"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen Carpathian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Flat.\n"
+"Occasional lakes and hills can be added to the flat world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Fractal.\n"
+"'terrain' enables the generation of non-fractal terrain:\n"
+"ocean, islands and underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill': Reduces heat with altitude.\n"
+"'humid_rivers': Increases humidity around rivers.\n"
+"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n"
+"to become shallower and occasionally dry.\n"
+"'altitude_dry': Reduces humidity with altitude."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen v5."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"The 'snowbiomes' flag enables the new 5 biome system.\n"
+"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
+"the 'jungles' flag is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generation delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks that are simultaneously sent per client.\n"
+"The maximum total count is calculated dynamically:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can be connected simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of recent chat messages to show"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneous block sends per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum size of the out chat queue"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum size of the out chat queue.\n"
+"0 to disable queueing and -1 to make the queue size unlimited."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod channels"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the hudbar elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain variation noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain zero level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mud noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this.\n"
+"Current mapgens in a highly unstable state:\n"
+"- The optional floatlands of v7 (disabled by default)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Near plane"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps sampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use.\n"
+"Value 0:\n"
+"- Automatic selection. The number of emerge threads will be\n"
+"- 'number of processors - 2', with a lower limit of 1.\n"
+"Any other value:\n"
+"- Specifies the number of emerge threads, with a lower limit of 1.\n"
+"WARNING: Increasing the number of emerge threads increases engine mapgen\n"
+"speed, but this may harm game performance by interfering with other\n"
+"processes, especially in singleplayer and/or when running Lua code in\n"
+"'on_generated'. For many users the optimum setting may be '1'."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Online Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Opaque liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Open the pause menu when the window's focus is lost. Does not pause if a "
+"formspec is\n"
+"open."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path of the fallback font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font will be used for certain languages or if the default font is "
+"unavailable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to shader directory. If no path is defined, default location will be "
+"used."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the default font.\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"
+"The fallback font will be used if the font cannot be loaded."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the monospace font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font is used for e.g. the console and profiler screen."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pause on lost window focus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move mode"
+msgstr "KustÄ«ba uz augÅ¡u/leju pÄ“c skatīšanÄs virziena"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+"SpÄ“lÄ“tÄjs var lidot ignorÄ“jot gravitÄciju.\n"
+"Šim ir vajadzīga “fly†privilēģija servera pusē."
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Port to connect to (UDP).\n"
+"Note that the port field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prevent digging and placing from repeating when holding the mouse buttons.\n"
+"Enable this when you dig or place too often by accident."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Print the engine's profiling data in regular intervals (in seconds).\n"
+"0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Recent Chat Messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Regular font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Remove color codes from incoming chat messages\n"
+"Use this to stop players from being able to use color in their messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Report path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Restricts the access of certain client-side functions on servers.\n"
+"Combine the byteflags below to restrict client-side features, or set to 0\n"
+"for no restrictions:\n"
+"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n"
+"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n"
+"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n"
+"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n"
+"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge underwater noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridged mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River valley width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hill size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hills spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Safe digging and placing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sandy beaches occur when np_beach exceeds this value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save window size automatically when modified."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale GUI by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Screenshot quality. Only used for JPEG format.\n"
+"1 means worst quality; 100 means best quality.\n"
+"Use 0 for default quality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Seabed noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Selects one of 18 fractal types.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server side occlusion culling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Set the maximum character length of a chat message sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shader path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visual effects and may increase performance on some "
+"video\n"
+"cards.\n"
+"This only works with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
+"be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n"
+"WARNING!: There is no benefit, and there are several dangers, in\n"
+"increasing this value above 5.\n"
+"Reducing this value increases cave and dungeon density.\n"
+"Altering this value is for special usage, leaving it unchanged is\n"
+"recommended."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of the MapBlock cache of the mesh generator. Increasing this will\n"
+"increase the cache hit %, reducing the data being copied from the main\n"
+"thread, thus reducing jitter."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale humidity variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale temperature variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when looking around. Also called look or mouse smoothing.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Special key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Special key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread of light curve boost range.\n"
+"Controls the width of the range to be boosted.\n"
+"Standard deviation of the light curve boost Gaussian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Steepness noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Strength of light curve boost.\n"
+"The 3 'boost' parameters define a range of the light\n"
+"curve that is boosted in brightness."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strip color codes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Temperature variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain alternative noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain base noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain higher noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for hills.\n"
+"Controls proportion of world area covered by hills.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for lakes.\n"
+"Controls proportion of world area covered by lakes.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain persistence noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Textures on a node may be aligned either to the node or to the world.\n"
+"The former mode suits better things like machines, furniture, etc., while\n"
+"the latter makes stairs and microblocks fit surroundings better.\n"
+"However, as this possibility is new, thus may not be used by older servers,\n"
+"this option allows enforcing it for certain node types. Note though that\n"
+"that is considered EXPERIMENTAL and may not work properly."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The URL for the content repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other biome filler node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The file path relative to your worldpath in which profiles will be saved to."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The identifier of the joystick to use"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The length in pixels it takes for touch screen interaction to start."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The maximum height of the surface of waving liquids.\n"
+"4.0 = Wave height is two nodes.\n"
+"0.0 = Wave doesn't move at all.\n"
+"Default is 1.0 (1/2 node).\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The radius of the volume of blocks around every player that is subject to "
+"the\n"
+"active block stuff, stated in mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run.\n"
+"This is also the minimum range in which active objects (mobs) are "
+"maintained.\n"
+"This should be configured together with active_object_send_range_blocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The rendering back-end for Irrlicht.\n"
+"A restart is required after changing this.\n"
+"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
+"otherwise.\n"
+"On other platforms, OpenGL is recommended, and it’s the only driver with\n"
+"shader support currently."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The sensitivity of the joystick axes for moving the\n"
+"ingame view frustum around."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated events\n"
+"when holding down a joystick button combination."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right\n"
+"mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The type of joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
+"enabled. Also the vertical distance over which humidity drops by 10 if\n"
+"'altitude_dry' is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Third of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time of day when a new world is started, in millihours (0-23999)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Touch screen threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Usable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Undersampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Undersampling is similar to using a lower screen resolution, but it applies\n"
+"to the game world only, keeping the GUI intact.\n"
+"It should give a significant performance boost at the cost of less detailed "
+"image.\n"
+"Higher values result in a less detailed image."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Use 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 ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VSync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley profile"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley slope"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of biome filler depth."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of maximum mountain height (in nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of number of caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies depth of biome surface nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical climbing speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View distance in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View zoom key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Virtual joystick triggers aux button"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W coordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking and flying speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wavelength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"properly support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled.\n"
+"This is also used as the base node texture size for world-aligned\n"
+"texture autoscaling."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether FreeType fonts are used, requires FreeType support to be compiled "
+"in.\n"
+"If disabled, bitmap and XML vectors fonts are used instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to mute sounds. You can unmute sounds at any time, unless the\n"
+"sound system is disabled (enable_sound=false).\n"
+"In-game, you can toggle the mute state with the mute key or by using the\n"
+"pause menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selection box lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Windows systems only: Start Minetest with the command line window in the "
+"background.\n"
+"Contains the same information as the file debug.txt (default name)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World start time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World-aligned textures may be scaled to span several nodes. However,\n"
+"the server may not send the scale you want, especially if you use\n"
+"a specially-designed texture pack; with this option, the client tries\n"
+"to determine the scale automatically basing on the texture size.\n"
+"See also texture_min_size.\n"
+"Warning: This option is EXPERIMENTAL!"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World-aligned textures mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-distance over which caverns expand to full size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of cavern upper limit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of higher terrain that creates cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of lower terrain and seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#~ msgid "Back"
+#~ msgstr "Atpakaļ"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "LejuplÄdÄ“jas un instalÄ“jas $1, lÅ«dzu uzgaidiet..."
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
diff --git a/po/minetest.pot b/po/minetest.pot
index 8732b061c..3f343389a 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: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -25,6 +25,10 @@ msgstr ""
msgid "Respawn"
msgstr ""
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
msgstr ""
@@ -45,10 +49,6 @@ msgstr ""
msgid "An error occurred:"
msgstr ""
-#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr ""
-
#: builtin/mainmenu/common.lua src/client/game.cpp
msgid "Loading..."
msgstr ""
@@ -129,6 +129,10 @@ msgid "Cancel"
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
msgstr ""
@@ -155,6 +159,10 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr ""
@@ -177,61 +185,144 @@ msgid "Failed to download $1"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
+msgid "Back to Main Menu"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Install"
+msgid "No results"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Update"
+msgid "No packages could be retrieved"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Uninstall"
+msgid "Downloading..."
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
-msgid "Search"
+msgid "Install"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back to Main Menu"
+msgid "Update"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "No results"
+msgid "Uninstall"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "No packages could be retrieved"
+msgid "View"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "World name"
+msgid "Caverns"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Seed"
+msgid "Very large caverns deep in the underground"
msgstr ""
-#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Mapgen"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-msgid "Game"
+msgid "Altitude chill"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Create"
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -243,7 +334,53 @@ msgid "Download one from minetest.net"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -251,6 +388,27 @@ msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr ""
@@ -342,14 +500,25 @@ msgstr ""
msgid "Lacunarity"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
@@ -519,6 +688,10 @@ msgid "Previous Contributors"
msgstr ""
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Configure"
msgstr ""
@@ -610,6 +783,7 @@ msgstr ""
msgid "Damage enabled"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
@@ -858,6 +1032,14 @@ msgstr ""
msgid "Invalid gamespec."
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr ""
@@ -915,11 +1097,19 @@ msgid "Sound unmuted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1181,6 +1371,7 @@ msgstr ""
msgid "- Creative Mode: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1268,6 +1459,7 @@ msgstr ""
msgid "Control"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1316,10 +1508,12 @@ msgstr ""
msgid "Down"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1678,10 +1872,15 @@ msgstr ""
msgid "Muted"
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr ""
@@ -2954,14 +3153,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Parallax occlusion iterations"
msgstr ""
@@ -3105,13 +3296,13 @@ msgid "View distance in nodes."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -3309,6 +3500,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Console height"
msgstr ""
@@ -3770,11 +3969,23 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Screenshot folder"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3881,6 +4092,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Saving map received from server"
msgstr ""
@@ -4168,6 +4391,17 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Damage"
msgstr ""
@@ -4349,7 +4583,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4909,6 +5143,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "IPv6"
msgstr ""
@@ -5031,10 +5273,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
@@ -5379,7 +5617,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5393,6 +5633,80 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
msgstr ""
@@ -5445,6 +5759,18 @@ msgid "3D noise defining structure of river canyon walls."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian"
msgstr ""
@@ -5818,10 +6144,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
"enabled. Also the vertical distance over which humidity drops by 10 if\n"
@@ -5931,7 +6253,7 @@ msgid "Dump the mapgen debug information."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5939,23 +6261,23 @@ msgid "Maximum number of blocks that can be queued for loading."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
+msgid "Per-player limit of queued blocks load from disk"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
+msgid "Per-player limit of queued blocks to generate"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5965,9 +6287,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
diff --git a/po/ms/minetest.po b/po/ms/minetest.po
index b33b8ca3a..fb3989a3f 100644
--- a/po/ms/minetest.po
+++ b/po/ms/minetest.po
@@ -2,9 +2,10 @@ msgid ""
msgstr ""
"Project-Id-Version: Malay (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-10-31 06:03+0000\n"
-"Last-Translator: Muhammad Nur Hidayat Yasuyoshi <mnh48mail@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-07-08 20:47+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/"
"ms/>\n"
"Language: ms\n"
@@ -12,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 3.10-dev\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +23,10 @@ msgstr "Lahir semula"
msgid "You died"
msgstr "Anda telah meninggal"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "OK"
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Berlakunya ralat dalam skrip Lua:"
@@ -35,10 +40,6 @@ msgid "Main menu"
msgstr "Menu utama"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Ok"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Sambung semula"
@@ -115,6 +116,10 @@ msgstr ""
"dibenarkan. Hanya aksara [a-z0-9_] sahaja yang dibenarkan."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Cari Mods Lain"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mods:"
@@ -160,16 +165,16 @@ msgid "All packages"
msgstr "Semua pakej"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Backspace"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Kembali ke Menu Utama"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Sedang muat turun dan memasang $1, sila tunggu..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "ContentDB tidak tersedia apabila Minetest dikompil tanpa cURL"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "Memuat turun..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -214,15 +219,51 @@ msgstr "Nyahpasang"
msgid "Update"
msgstr "Kemas kini"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Lihat"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Dunia bernama \"$1\" telah wujud"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "Rupa bumi tambahan"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Kedinginan altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "Kekeringan altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Penyebatian biom"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Biom"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Gua besar"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "Gua"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Cipta"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "Hiasan"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Muat turun permainan, contohnya Minetest Game, dari minetest.net"
@@ -230,27 +271,146 @@ msgstr "Muat turun permainan, contohnya Minetest Game, dari minetest.net"
msgid "Download one from minetest.net"
msgstr "Muat turun satu dari minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "Kurungan bawah tanah"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "Rupa bumi rata"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Jisim bumi terapung atas langit"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "Tanah terapung (dalam ujikaji)"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Permainan"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "Jana rupa bumi bukan-fraktal: Lautan dan bawah tanah"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Bukit"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Sungai lembap"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Tingkatkan kelembapan sekitar sungai"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Tasik"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "Kelembapan rendah dan haba tinggi menyebabkan sungai cetek atau kering"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Janaan peta"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Bendera janapeta"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Bendera khusus Janapeta"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "Gunung"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "Aliran lumpur"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Jaringan terowong dan gua"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Tiada permainan dipilih"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Kurangkan haba mengikut altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Kurangkan kelembapan mengikut altitud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Sungai"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Sungai aras laut"
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Benih"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr "Peralihan lembut di antara biom"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
msgstr ""
-"Amaran: Percubaan pembangunan minimum hanyalah untuk kegunaan pembangun."
+"Struktur yang muncul atas rupa bumi (tiada kesan pada pokok dan rumput hutan "
+"dicipta oleh v6)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "Struktur yang muncul atas rupa bumi, biasanya pokok dan tumbuhan"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Iklim Sederhana, Gurun"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Iklim Sederhana, Gurun, Hutan"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "Iklim Sederhana, Gurun, Hutan, Tundra, Taiga"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "Hakisan permukaan rupa bumi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "Pokok dan rumput hutan"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Kedalaman sungai berbagai"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "Gua gergasi yang sangat mendalam bawah tanah"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr "Amaran: The Development Test hanyalah untuk kegunaan pembangun."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -288,7 +448,7 @@ msgstr "Terima"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Menamakan semula pek mods:"
+msgstr "Namakan semula pek mods:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
@@ -402,14 +562,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Sebaran Z"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "Nilai mutlak"
+#. ~ "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 "lalai"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "tumpul"
@@ -436,7 +607,7 @@ msgstr "Pasang Mods: tidak jumpa nama folder yang sesuai untuk pek mods $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Pasang Mods: Jenis fail \"$1\" tidak disokong atau arkib rosak"
+msgstr "Pasang: Jenis fail \"$1\" tidak disokong atau arkib rosak"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: file: \"$1\""
@@ -551,6 +722,10 @@ msgid "Host Server"
msgstr "Hos Pelayan"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "Pasangkan permainan daripada ContentDB"
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Nama/Kata laluan"
@@ -618,6 +793,7 @@ msgstr "Nama / Kata laluan"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Boleh Berlawan PvP"
@@ -853,7 +1029,7 @@ msgstr "Nama pemain terlalu panjang."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr "Sila masukkan nama!"
+msgstr "Sila pilih suatu nama!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
@@ -863,6 +1039,14 @@ msgstr "Fail kata laluan yang disediakan gagal dibuka: "
msgid "Provided world path doesn't exist: "
msgstr "Laluan dunia diberi tidak wujud: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -899,6 +1083,7 @@ msgstr "- Port: "
msgid "- Public: "
msgstr "- Awam: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -1199,6 +1384,14 @@ msgid "Sound muted"
msgstr "Bunyi dibisukan"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "Sistem bunyi dilumpuhkan"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "Sistem bunyi tidak disokong di binaan ini"
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Bunyi dinyahbisukan"
@@ -1210,12 +1403,12 @@ msgstr "Jarak pandang ditukar ke %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr "Jarak pandang berada di tahap maksimum %d"
+msgstr "Jarak pandang berada di tahap maksimum: %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr "Jarak pandang pada tahap minimum: %d"
+msgstr "Jarak pandang berada di tahap minimum: %d"
#: src/client/game.cpp
#, c-format
@@ -1230,7 +1423,7 @@ msgstr "Rangka dawai ditunjukkan"
msgid "Zoom currently disabled by game or mod"
msgstr "Zum sedang dilumpuhkan oleh permainan atau mods"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "ok"
@@ -1244,11 +1437,11 @@ msgstr "Sembang ditunjukkan"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr "Papar pandu disembunyikan"
+msgstr "Papar pandu (HUD) disembunyikan"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr "Papar pandu ditunjukkan"
+msgstr "Papar pandu (HUD) ditunjukkan"
#: src/client/gameui.cpp
msgid "Profiler hidden"
@@ -1351,6 +1544,7 @@ msgstr "Shift Kiri"
msgid "Left Windows"
msgstr "Windows Kiri"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menu"
@@ -1361,67 +1555,67 @@ msgstr "Butang Tengah"
#: src/client/keycode.cpp
msgid "Num Lock"
-msgstr "Num Lock"
+msgstr "Kunci Angka"
#: src/client/keycode.cpp
msgid "Numpad *"
-msgstr "Numpad *"
+msgstr "Pad Angka *"
#: src/client/keycode.cpp
msgid "Numpad +"
-msgstr "Numpad +"
+msgstr "Pad Angka +"
#: src/client/keycode.cpp
msgid "Numpad -"
-msgstr "Numpad -"
+msgstr "Pad Angka -"
#: src/client/keycode.cpp
msgid "Numpad ."
-msgstr "Numpad ."
+msgstr "Pad Angka ."
#: src/client/keycode.cpp
msgid "Numpad /"
-msgstr "Numpad /"
+msgstr "Pad Angka /"
#: src/client/keycode.cpp
msgid "Numpad 0"
-msgstr "Numpad 0"
+msgstr "Pad Angka 0"
#: src/client/keycode.cpp
msgid "Numpad 1"
-msgstr "Numpad 1"
+msgstr "Pad Angka 1"
#: src/client/keycode.cpp
msgid "Numpad 2"
-msgstr "Numpad 2"
+msgstr "Pad Angka 2"
#: src/client/keycode.cpp
msgid "Numpad 3"
-msgstr "Numpad 3"
+msgstr "Pad Angka 3"
#: src/client/keycode.cpp
msgid "Numpad 4"
-msgstr "Numpad 4"
+msgstr "Pad Angka 4"
#: src/client/keycode.cpp
msgid "Numpad 5"
-msgstr "Numpad 5"
+msgstr "Pad Angka 5"
#: src/client/keycode.cpp
msgid "Numpad 6"
-msgstr "Numpad 6"
+msgstr "Pad Angka 6"
#: src/client/keycode.cpp
msgid "Numpad 7"
-msgstr "Numpad 7"
+msgstr "Pad Angka 7"
#: src/client/keycode.cpp
msgid "Numpad 8"
-msgstr "Numpad 8"
+msgstr "Pad Angka 8"
#: src/client/keycode.cpp
msgid "Numpad 9"
-msgstr "Numpad 9"
+msgstr "Pad Angka 9"
#: src/client/keycode.cpp
msgid "OEM Clear"
@@ -1443,9 +1637,10 @@ msgstr "Pause"
msgid "Play"
msgstr "Mula Main"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
-msgstr "Cetak"
+msgstr "Print Screen"
#: src/client/keycode.cpp
msgid "Return"
@@ -1479,9 +1674,10 @@ msgstr "Windows Kanan"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
-msgstr "Pilih kekunci"
+msgstr "Select"
#: src/client/keycode.cpp
msgid "Shift"
@@ -1658,7 +1854,7 @@ msgstr "Istimewa"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
-msgstr "Togol Papar Pandu"
+msgstr "Togol papar pandu (HUD)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
@@ -1720,10 +1916,15 @@ msgstr "Dibisukan"
msgid "Sound Volume: "
msgstr "Kekuatan Bunyi: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
-msgstr "Masuk "
+msgstr "Masukkan "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "ms"
@@ -1748,7 +1949,6 @@ msgstr ""
"berada di luar bulatan utama."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1759,11 +1959,12 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-"Ofset fraktal (X,Y,Z) dari pusat dunia dalam unit 'skala'.\n"
-"Digunakan untuk memindahkan titik yang diinginkan kepada (0, 0)\n"
-"untuk mencipta titik kelahiran yang sesuai, atau untuk membolehkan\n"
-"'zum masuk' pada titk yang diinginkan dengan menaikkan 'skala'.\n"
-"Nilai lalai disesuaikan untuk titik kelahiran sesuai untuk set mandelbrot\n"
+"(X,Y,Z) Ofset fraktal dari pusat dunia dalam unit 'skala'.\n"
+"Boleh guna untuk pindahkan titik yang diingini ke (0, 0)\n"
+"untuk cipta titik kelahiran yang sesuai, atau untuk\n"
+"membolehkan 'zum masuk' pada titik yang diinginkan\n"
+"dengan menaikkan 'skala'.\n"
+"Nilai lalai disesuaikan untuk titik kelahiran sesuai untuk set Mandelbrot\n"
"dengan parameter lalai, ia mungkin perlu diubah untuk situasi yang lain.\n"
"Julat kasarnya -2 sehingga 2. Darabkan dengan 'skala' untuk ofset dalam nod."
@@ -1830,6 +2031,10 @@ msgid "3D mode"
msgstr "Mod 3D"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr "Kekuatan paralaks mod 3D"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "Hingar 3D mentakrifkan gua gergasi."
@@ -1842,6 +2047,18 @@ msgstr ""
"Ia juga mentakrifkan struktur rupa bumi gunung tanah terapung."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+"Hingar 3D mentakrifkan struktur tanah terapung.\n"
+"Jika diubah dari nilai asal, hingar skala 'scale' (asalnya 0.7) mungkin\n"
+"perlu dilaraskan, kerana tirusan tanah terapung berfungsi dengan\n"
+"terbaik apabila jarak nilai berada dalam lingkungan -2.0 ke 2.0."
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "Hingar 3D mentakrifkan struktur dinding ngarai sungai."
@@ -1903,8 +2120,8 @@ msgid "ABM interval"
msgstr "Selang masa ABM"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
-msgstr "Had mutlak baris gilir keluar"
+msgid "Absolute limit of queued blocks to emerge"
+msgstr "Had mutlak untuk blok dibarisgilirkan untuk timbul"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -1953,6 +2170,22 @@ msgstr ""
"skrin 4K."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+"Melaraskan ketumpatan lapisan tanah terapung.\n"
+"Tambah nilai untuk tambah ketumpatan. Boleh jadi positif atau negatif.\n"
+"Nilai = 0.0: 50% daripada jilid merupakan tanah terapung.\n"
+"Nilai = 2.0 mencipta lapisan tanah terapung yang pejal (boleh jadi lebih "
+"tinggi\n"
+"bergantung kepada tetapan 'mgv7_np_floatland', sentiasa cuba untuk pastikan)."
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Tetapan mendalam"
@@ -1964,10 +2197,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Kedinginan altitud"
+"Ubah lengkung cahaya dengan mengenakan 'pembetulan gama'.\n"
+"Nilai tinggi buatkan aras cahaya tengah dan rendah lebih terang.\n"
+"Nilai '1.0' akan biarkan lengkung cahaya asal tidak berubah.\n"
+"Tetapan ini hanya memberi kesan mendalam pada cahaya matahari\n"
+"dan cahaya buatan, kesannya pada cahaya malam amat rendah."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2041,10 +2275,10 @@ msgid ""
msgstr ""
"Pada jarak ini, pelayan akan mengoptimumkan secara agresif blok yang mana\n"
"akan dihantar kepada klien.\n"
-"Nilai lebih kecil berkemungkinan besar boleh meningkatkan prestasi dengan\n"
-"banyak, dengan mengorbankan glic penerjemahan tampak (sesetengah\n"
-"blok tidak akan diterjemah di bawah air dan dalam gua, kadang-kadang\n"
-"turut berlaku atas daratan).\n"
+"Nilai lebih kecil berkemungkinan boleh meningkatkan prestasi dengan banyak,\n"
+"dengan mengorbankan glic penerjemahan tampak (sesetengah blok tidak akan\n"
+"diterjemah di bawah air dan dalam gua, kekadang turut berlaku atas daratan)."
+"\n"
"Menetapkan nilai ini lebih bear daripada nilai max_block_send_distance akan\n"
"melumpuhkan pengoptimunan ini.\n"
"Nyatakan dalam unit blokpeta (16 nod)."
@@ -2122,28 +2356,24 @@ msgid "Block send optimize distance"
msgstr "Jarak optimum penghantaran blok"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Laluan fon monospace"
+msgstr "Laluan fon tebal dan italik"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Laluan fon monospace"
+msgstr "Laluan fon monospace tebal dan italik"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Laluan fon"
+msgstr "Laluan fon tebal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Laluan fon monospace"
+msgstr "Laluan fon monospace tebal"
#: src/settings_translation_file.cpp
msgid "Build inside player"
-msgstr "Bina dalam sistem pemain"
+msgstr "Bina dalam pemain"
#: src/settings_translation_file.cpp
msgid "Builtin"
@@ -2155,13 +2385,14 @@ msgstr "Pemetaan timbul"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
"Jarak kamera 'berhampiran satah ketipan' dalam nilai nod, antara 0 dan 0.5.\n"
-"Kebanyakan pengguna tidak perlu mengubah nilai ini.\n"
+"Hanya berkesan di platform GLES. Kebanyakan pengguna tidak perlu mengubah "
+"nilai ini.\n"
"Menaikkan nilai boleh kurangkan artifak pada GPU yang lebih lemah.\n"
"0.1 = Asal, 0.25 = Nilai bagus untuk tablet yang lebih lemah."
@@ -2226,6 +2457,8 @@ msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Pertengahan julat tolakan lengkung cahaya.\n"
+"Di mana 0.0 ialah aras cahaya minimum, 1.0 ialah maksimum."
#: src/settings_translation_file.cpp
msgid ""
@@ -2244,10 +2477,18 @@ msgstr ""
"Mungkin diperlukan untuk skrin yang lebih kecil."
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr "Saiz fon sembang"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Kekunci sembang"
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr "Tahap log sembang"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "Had kiraan mesej sembang"
@@ -2364,9 +2605,10 @@ msgid ""
"Comma-separated list of trusted mods that are allowed to access insecure\n"
"functions even when mod security is on (via request_insecure_environment())."
msgstr ""
-"Senarai mods boleh dipercayai yang dibenarkan mengakses fungsi tidak\n"
-"selamat walaupun ketika keselamatan mods diaktifkan\n"
-"(melalui request_insecure_environment())."
+"Senarai dipisahkan dengan koma untuk mods boleh dipercayai yang dibenarkan "
+"mengakses\n"
+"fungsi tidak selamat walaupun ketika keselamatan mods diaktifkan (melalui "
+"request_insecure_environment())."
#: src/settings_translation_file.cpp
msgid "Command key"
@@ -2450,6 +2692,9 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Mengawal lebar terowong, nilai kecil mencipta terowong lebih luas.\n"
+"Nilai >= 10.0 melumpuhkan penjanaan terowong dan mengelakkan\n"
+"pengiraan hingar yang terlalu banyak."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2500,7 +2745,6 @@ msgid "Dec. volume key"
msgstr "Kekunci perlahankan bunyi"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Decrease this to increase liquid resistance to movement."
msgstr ""
"Kurangkan nilai untuk meningkatkan rintangan cecair terhadap pergerakan."
@@ -2538,6 +2782,10 @@ msgid "Default report format"
msgstr "Format laporan lalai"
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr "Saiz tindanan lalai"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2613,9 +2861,10 @@ msgid ""
"Delay between mesh updates on the client in ms. Increasing this will slow\n"
"down the rate of mesh updates, thus reducing jitter on slower clients."
msgstr ""
-"Lengah masa di antara kemaskini jejaring dekat klien dalam unit ms.\n"
-"Menaikkan nilai ini akan mengurangkan kadar kemaskini jejaring, lalu\n"
-"mengurangkan ketaran dekat klien yang lebih perlahan."
+"Lengah masa di antara kemaskini jejaring dekat klien dalam unit ms. "
+"Menaikkan nilai ini akan\n"
+"mengurangkan kadar kemaskini jejaring, lalu mengurangkan ketaran dekat klien "
+"yang lebih perlahan."
#: src/settings_translation_file.cpp
msgid "Delay in sending blocks after building"
@@ -2713,6 +2962,8 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Membolehkan sokongan IPv6 (untuk kedua-dua klien dan pelayan).\n"
+"Diperlukan sekiranya ingin menggunakan sambungan IPv6."
#: src/settings_translation_file.cpp
msgid ""
@@ -2780,9 +3031,9 @@ msgid ""
msgstr ""
"Bolehkan tetapan untuk melarang klien lama daripada menyambung.\n"
"Klien lama masih sesuai digunakan jika mereka tidak runtuh (crash) apabila "
-"cuba\n"
-"untuk menyambung ke pelayan baharu, tetapi mereka mungkin tidak mampu\n"
-"menyokong semua sifat baharu yang anda sangkakan."
+"cuba untuk menyambung ke pelayan baharu,\n"
+"tetapi mereka mungkin tidak mampu menyokong semua sifat baharu yang anda "
+"sangkakan."
#: src/settings_translation_file.cpp
msgid ""
@@ -2802,6 +3053,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Membolehkan objek penimbal bucu.\n"
+"Ia patut meningkatkan prestasi grafik dengan banyak."
#: src/settings_translation_file.cpp
msgid ""
@@ -2812,14 +3065,14 @@ msgstr ""
"Contohnya: 0 untuk tiada apungan; 1.0 untuk biasa; 2.0 untuk dua kali ganda."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
"Membolehkan/melumpuhkan penjalanan pelayan IPv6.\n"
-"Diabaikan jika bind_address (alamat ikatan) ditetapkan."
+"Diabaikan jika tetapan bind_address ditetapkan.\n"
+"Memerlukan tetapan enable_ipv6 dibolehkan."
#: src/settings_translation_file.cpp
msgid ""
@@ -2828,6 +3081,10 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Membolehkan pemetaan tona sinematik 'Uncharted 2' oleh Hable.\n"
+"Menyelakukan lengkung tona filem fotografi dan cara ia menganggarkan\n"
+"penampilan imej jarak dinamik tinggi. Beza jelas pertengahan julat\n"
+"ditingkatkan sedikit, tonjolan dan bayangan dimampatkan secara beransur."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -2876,6 +3133,10 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Membolehkan sistem bunyi.\n"
+"Jika dilumpuhkan, ia akan melumpuhkan kesemua bunyi di semua tempat\n"
+"dan kawalan bunyi dalam permainan tidak akan berfungsi.\n"
+"Pengubahan tetapan ini memerlukan permulaan semula."
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -2894,6 +3155,22 @@ msgstr ""
"antara blok apabila ditetapkan dengan nombor lebih besar daripada 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+"Eksponen penirusan tanah terapung. Mengubah tingkah laku tirusan.\n"
+"Nilai = 1.0 mencipta tirusan sekata, lelurus.\n"
+"Nilai > 1.0 mencipta tirusan lembut sesuai untuk tanah terapung asal\n"
+"yang terpisah antara satu sama lain.\n"
+"Nilai < 1.0 (contohnya 0.25) mencipta aras permukaan lebih jelas dengan\n"
+"bahagian tanah yang lebih rata, sesuai untuk lapisan tanah terapung pejal."
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS di menu jeda"
@@ -2910,9 +3187,8 @@ msgid "Fall bobbing factor"
msgstr "Faktor apungan kejatuhan"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Fon berbalik"
+msgstr "Laluan fon berbalik"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -2948,7 +3224,8 @@ msgid ""
"This requires the \"fast\" privilege on the server."
msgstr ""
"Bergerak pantas (dengan kekunci \"istimewa\").\n"
-"Ini memerlukan keistimewaan \"pergerakan pantas\" dalam pelayan."
+"Ini memerlukan keistimewaan \"pergerakan pantas\" dalam pelayan permainan "
+"tersebut."
#: src/settings_translation_file.cpp
msgid "Field of view"
@@ -2987,11 +3264,13 @@ msgid ""
"light edge to transparent textures. Apply this filter to clean that up\n"
"at texture load time."
msgstr ""
-"Tekstur yang ditapis boleh sebatikan nilai RGB dengan jiran yang\n"
-"lut sinar sepenuhnya, yang mana pengoptimum PNG sering abaikan,\n"
-"kadangkala menyebabkan sisi gelap atau terang pada tekstur lut sinar.\n"
-"Guna penapisan ini untuk membersihkan tekstur tersebut ketika ia\n"
-"sedang dimuatkan."
+"Tekstur yang ditapis boleh sebatikan nilai RGB dengan jiran yang lut sinar "
+"sepenuhnya,\n"
+"yang mana pengoptimum PNG sering abaikan, kadangkala menyebabkan sisi gelap "
+"atau\n"
+"terang pada tekstur lut sinar. Guna penapisan ini untuk membersihkan tekstur "
+"tersebut\n"
+"ketika ia sedang dimuatkan."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3015,6 +3294,34 @@ msgid "Fixed virtual joystick"
msgstr "Kayu bedik maya tetap"
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr "Ketumpatan tanah terapung"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr "Y maksimum tanah terapung"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr "Y minimum tanah terapung"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr "Hingar tanah terapung"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr "Eksponen tirusan tanah terapung"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr "Jarak tirusan tanah terapung"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr "Aras air tanah terapung"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Kekunci terbang"
@@ -3036,11 +3343,11 @@ msgstr "Kekunci togol kabut"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Fon tebal secara lalainya"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Fon italik secara lalainya"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3056,15 +3363,23 @@ msgstr "Saiz fon"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "Saiz fon bagi fon lalai dalan unit poin (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "Saiz fon bagi fon berbalik dalam unit poin (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "Saiz fon bagi fon monospace dalam unit poin (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 ""
+"Saiz fon tulisan sembang baru-baru ini dan prom dalam unit titik (pt).\n"
+"Nilai 0 akan menggunakan saiz fon lalai."
#: src/settings_translation_file.cpp
msgid ""
@@ -3212,18 +3527,20 @@ msgstr ""
"dan rumput hutan, dalam janapeta lain pula bendera ini mengawal semua hiasan."
#: 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 "Kecerunan lengkung cahaya pada tahap cahaya maksimum."
+msgstr ""
+"Kecerunan lengkung cahaya pada tahap cahaya maksimum.\n"
+"Mengawal beza jelas tahap cahaya tertinggi."
#: 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 "Kecerunan lengkung cahaya pada tahap cahaya minimum."
+msgstr ""
+"Kecerunan lengkung cahaya pada tahap cahaya minimum.\n"
+"Mengawal beza jelas tahap cahaya terendah."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3247,14 +3564,13 @@ msgstr "Mods HTTP"
#: src/settings_translation_file.cpp
msgid "HUD scale factor"
-msgstr "Faktor skala HUD"
+msgstr "Faktor skala papar pandu (HUD)"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
-msgstr "Kekunci menogol HUD"
+msgstr "Kekunci menogol papar pandu (HUD)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- legacy: (try to) mimic old behaviour (default for release).\n"
@@ -3262,11 +3578,11 @@ msgid ""
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
"Cara pengendalian panggilan API Lua yang terkecam:\n"
-"- pusaka: (cuba untuk) meniru tingkah laku yang lama (lalai untuk "
-"keluaran).\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"
-"- ralat: gugurkan penggunaan panggilan terkecam (dicadangkan untuk "
+"- error: gugurkan penggunaan panggilan terkecam (dicadangkan untuk "
"pembangun mods)."
#: src/settings_translation_file.cpp
@@ -3371,131 +3687,131 @@ msgstr "Kekunci item sebelumnya dalam hotbar"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 1 key"
-msgstr "Kekunci slot 1 hotbar"
+msgstr "Kekunci slot hotbar 1"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 10 key"
-msgstr "Kekunci slot 10 hotbar"
+msgstr "Kekunci slot hotbar 10"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 11 key"
-msgstr "Kekunci slot 11 hotbar"
+msgstr "Kekunci slot hotbar 11"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 12 key"
-msgstr "Kekunci slot 12 hotbar"
+msgstr "Kekunci slot hotbar 12"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 13 key"
-msgstr "Kekunci slot 13 hotbar"
+msgstr "Kekunci slot hotbar 13"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 14 key"
-msgstr "Kekunci slot 14 hotbar"
+msgstr "Kekunci slot hotbar 14"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 15 key"
-msgstr "Kekunci slot 15 hotbar"
+msgstr "Kekunci slot hotbar 15"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 16 key"
-msgstr "Kekunci slot 16 hotbar"
+msgstr "Kekunci slot hotbar 16"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 17 key"
-msgstr "Kekunci slot 17 hotbar"
+msgstr "Kekunci slot hotbar 17"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 18 key"
-msgstr "Kekunci slot 18 hotbar"
+msgstr "Kekunci slot hotbar 18"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 19 key"
-msgstr "Kekunci slot 19 hotbar"
+msgstr "Kekunci slot hotbar 19"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 2 key"
-msgstr "Kekunci slot 2 hotbar"
+msgstr "Kekunci slot hotbar 2"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 20 key"
-msgstr "Kekunci slot 20 hotbar"
+msgstr "Kekunci slot hotbar 20"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 21 key"
-msgstr "Kekunci slot 21 hotbar"
+msgstr "Kekunci slot hotbar 21"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 22 key"
-msgstr "Kekunci slot 22 hotbar"
+msgstr "Kekunci slot hotbar 22"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 23 key"
-msgstr "Kekunci slot 23 hotbar"
+msgstr "Kekunci slot hotbar 23"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 24 key"
-msgstr "Kekunci slot 24 hotbar"
+msgstr "Kekunci slot hotbar 24"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 25 key"
-msgstr "Kekunci slot 25 hotbar"
+msgstr "Kekunci slot hotbar 25"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 26 key"
-msgstr "Kekunci slot 26 hotbar"
+msgstr "Kekunci slot hotbar 26"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 27 key"
-msgstr "Kekunci slot 27 hotbar"
+msgstr "Kekunci slot hotbar 27"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 28 key"
-msgstr "Kekunci slot 28 hotbar"
+msgstr "Kekunci slot hotbar 28"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 29 key"
-msgstr "Kekunci slot 29 hotbar"
+msgstr "Kekunci slot hotbar 29"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 3 key"
-msgstr "Kekunci slot 3 hotbar"
+msgstr "Kekunci slot hotbar 3"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 30 key"
-msgstr "Kekunci slot 30 hotbar"
+msgstr "Kekunci slot hotbar 30"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 31 key"
-msgstr "Kekunci slot 31 hotbar"
+msgstr "Kekunci slot hotbar 31"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 32 key"
-msgstr "Kekunci slot 32 hotbar"
+msgstr "Kekunci slot hotbar 32"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 4 key"
-msgstr "Kekunci slot 4 hotbar"
+msgstr "Kekunci slot hotbar 4"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 5 key"
-msgstr "Kekunci slot 5 hotbar"
+msgstr "Kekunci slot hotbar 5"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 6 key"
-msgstr "Kekunci slot 6 hotbar"
+msgstr "Kekunci slot hotbar 6"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 7 key"
-msgstr "Kekunci slot 7 hotbar"
+msgstr "Kekunci slot hotbar 7"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 8 key"
-msgstr "Kekunci slot 8 hotbar"
+msgstr "Kekunci slot hotbar 8"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 9 key"
-msgstr "Kekunci slot 9 hotbar"
+msgstr "Kekunci slot hotbar 9"
#: src/settings_translation_file.cpp
msgid "How deep to make rivers."
@@ -3507,6 +3823,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Secepat mana gelora cecair akan bergerak. Nilai tinggi = lebih laju.\n"
+"Jika nilai negatif, gelora cecair akan bergerak ke belakang.\n"
+"Memerlukan tetapan cecair bergelora dibolehkan."
#: src/settings_translation_file.cpp
msgid ""
@@ -3546,9 +3865,9 @@ msgid ""
"If FPS would go higher than this, limit it by sleeping\n"
"to not waste CPU power for no benefit."
msgstr ""
-"Jika bingkai per saat (FPS) ingin naik lebih tinggi\n"
-"daripada nilai ini, hadkan ia dengan tidurkannya supaya\n"
-"tidak bazirkan kuasa CPU dengan sia-sia."
+"Jika bingkai per saat (FPS) akan naik lebih tinggi daripada nilai ini, "
+"hadkan ia dengan\n"
+"tidurkannya supaya tidak bazirkan kuasa CPU dengan sia-sia."
#: src/settings_translation_file.cpp
msgid ""
@@ -3634,7 +3953,7 @@ msgid ""
"you stand.\n"
"This is helpful when working with nodeboxes in small areas."
msgstr ""
-"Jika dibolehkan, anda boleh meletak blok di kedudukan berdiri (aras kaki + "
+"Jika dibolehkan, anda boleh meletak blok di kedudukan berdiri (kaki + aras "
"mata).\n"
"Ini sangat berguna apabila bekerja dengan kotak nod di kawasan yang kecil."
@@ -3762,14 +4081,12 @@ msgid "Invert vertical mouse movement."
msgstr "Menyongsangkan pergerakan tetikus menegak."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Laluan fon monospace"
+msgstr "Laluan fon italik"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Laluan fon monospace"
+msgstr "Laluan fon monospace italik"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4392,6 +4709,8 @@ msgid ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
"Kekunci untuk menyelinap.\n"
+"Juga digunakan untuk turun bawah ketika memanjat dan dalam air jika tetapan "
+"aux1_descends dilumpuhkan.\n"
"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4598,15 +4917,15 @@ msgstr "Kedalaman gua besar"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Jumlah maksimum gua besar"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Jumlah minimum gua besar"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Perkadaran gua besar dibanjiri"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4644,13 +4963,12 @@ msgstr ""
"dikemaskini menerusi rangkaian."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"Tetapkan kepada \"true\" untuk membolehkan daun bergoyang.\n"
-"Memerlukan pembayang untuk dibolehkan."
+"Panjang gelora cecair.\n"
+"Memerlukan tetapan cecair bergelora dibolehkan."
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
@@ -4685,42 +5003,28 @@ msgstr ""
"- berjela-jela"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost"
-msgstr "Tolakan tengah lengkung cahaya"
+msgstr "Tolakan lengkung cahaya"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost center"
-msgstr "Titik tengah tolakan tengah lengkung cahaya"
+msgstr "Titik tengah tolakan lengkung cahaya"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost spread"
-msgstr "Sebaran tolakan tengah lengkung cahaya"
+msgstr "Sebaran tolakan lengkung cahaya"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve gamma"
-msgstr "Tolakan tengah lengkung cahaya"
+msgstr "Gama lengkung cahaya"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve high gradient"
-msgstr "Tolakan tengah lengkung cahaya"
+msgstr "Kecerunan tinggi lengkung cahaya"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve low gradient"
-msgstr "Titik tengah tolakan tengah lengkung cahaya"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Had baris hilir keluar pada cakera"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Had baris gilir keluar untuk dijana"
+msgstr "Kecerunan rendah lengkung cahaya"
#: src/settings_translation_file.cpp
msgid ""
@@ -4798,6 +5102,10 @@ msgid "Lower Y limit of dungeons."
msgstr "Had Y bawah kurungan bawah tanah."
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr "Had Y bawah tanah terapung."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Skrip menu utama"
@@ -4830,7 +5138,6 @@ msgid "Map generation attributes specific to Mapgen Carpathian."
msgstr "Atribut penjanaan peta khusus untuk janapeta 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."
@@ -4839,13 +5146,12 @@ msgstr ""
"Kadang-kala tasik dan bukit boleh ditambah ke dunia rata."
#: 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 ""
-"Atribut penjanaan peta khusus untuk Janapeta flat.\n"
+"Atribut penjanaan peta khusus untuk Janapeta Fractal.\n"
"'terrain' membolehkan penjanaan rupa bumi bukan fraktal:\n"
"lautan, kepulauan dan unsur bawah tanah."
@@ -4884,10 +5190,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
"Atribut penjanaan peta khusus untuk Janapeta v7.\n"
-"'ridges' membolehkan sungai."
+"'ridges': Sungai.\n"
+"'floatlands': Jisim bumi tanah terapung di atmosfera.\n"
+"'caverns': Gua gergasi yang mendalam bawah tanah."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -4974,10 +5284,6 @@ msgid "Mapgen debug"
msgstr "Nyahpepijat janapeta"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Bendera janapeta"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Nama janapeta"
@@ -5019,20 +5325,19 @@ msgstr "Lebar hotbar maksima"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Had maksimum jumlah rawak gua besar per ketulan peta."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Had maksimum jumlah rawak gua kecil per ketulan peta."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
"Rintangan cecair maksimum. Mengawal nyahpecutan apabila memasuki\n"
-"cecair pada kelajuan maksimum."
+"cecair pada kelajuan tinggi."
#: src/settings_translation_file.cpp
msgid ""
@@ -5051,18 +5356,18 @@ msgstr "Jumlah maksimum blok yang boleh dibaris gilirkan untuk dimuatkan."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
-"Jumlah maksimum blok baris gilir untuk dijana.\n"
-"Tetapkan kepada kosong untuk memilih jumlah sesuai secara automatik."
+"Jumlah maksimum blok untuk dibarisgilirkan untuk dijana.\n"
+"Had ini dikuatkuasakan per pemain."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
-"Jumlah maksimum blok baris gilir untuk dimuatkan daripada fail.\n"
-"Tetapkan kepada kosong untuk memilih jumlah sesuai secara automatik."
+"Jumlah maksimum blok untuk dibarisgilirkan untuk dimuatkan daripada fail.\n"
+"Had ini dikuatkuasakan per pemain."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5158,6 +5463,10 @@ msgid "Method used to highlight selected object."
msgstr "Kaedah yang digunakan untuk menonjolkan objek dipilih."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr "Tahap pengelogan minimum untuk ditulis ke sembang."
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Peta mini"
@@ -5170,14 +5479,12 @@ msgid "Minimap scan height"
msgstr "Ketinggian imbasan peta mini"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr ""
-"Hingar 3D yang menentukan jumlah kurungan bawah tanah per ketulan peta."
+msgstr "Had minimum jumlah rawak gua besar per ketulan peta."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Had minimum jumlah rawak gua kecil per ketulan peta."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
@@ -5193,7 +5500,7 @@ msgstr "Saluran mods"
#: src/settings_translation_file.cpp
msgid "Modifies the size of the hudbar elements."
-msgstr "Mengubah saiz elemen hudbar."
+msgstr "Mengubah saiz elemen palang papar pandu (hudbar)."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -5279,8 +5586,8 @@ msgstr ""
"senarai pelayan."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
-msgstr "Satah dekat ketipan"
+msgid "Near plane"
+msgstr "Dekat satah"
#: src/settings_translation_file.cpp
msgid "Network"
@@ -5333,9 +5640,6 @@ msgstr "Jumlah jalur keluar"
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5347,19 +5651,19 @@ msgid ""
"'on_generated'. For many users the optimum setting may be '1'."
msgstr ""
"Jumlah jalur timbul untuk digunakan.\n"
-"AMARAN: Ketika ini terdapat beberapa pepijat yang mungkin mengakibatkan\n"
-"ranap apabila nilai 'num_emerge_threads' lebih tinggi daripada 1. Sehingga\n"
-"amaran ini dibuang, adalah digalakkan untuk kekalkan nilai asalnya '1'.\n"
"Nilai 0:\n"
"- Pemilihan automatik. Jumlah jalur timbul akan dikira berdasarkan\n"
"- 'jumlah pemproses - 2', dengan had minimum 1.\n"
"Sebarang nilai lain:\n"
"- Menetapkan jumlah jalur timbul, dengan had minimum 1.\n"
-"AMARAN: Menaikkan jumlah jalur timbul meningkatkan kelajuan penjanaan\n"
-"peta enjin, tetapi ia boleh memberi kesan buruk kepada prestasi permainan\n"
-"dengan mengganggu proses-proses lain, terutamanya dalam mod pemain\n"
-"perseorangan dan/atau apabila menjalankan kod Lua dalam fungsi\n"
-"'on_generated'. Untuk kebanyakan pengguna, tetapan optimum ialah '1'."
+"AMARAN: Menaikkan jumlah jalur timbul meningkatkan kelajuan penjanaan peta "
+"enjin, tetapi\n"
+"ia boleh memberi kesan buruk kepada prestasi permainan dengan mengganggu "
+"proses-proses\n"
+"lain, terutamanya dalam mod pemain perseorangan dan/atau apabila menjalankan "
+"kod Lua\n"
+"dalam fungsi 'on_generated'. Untuk kebanyakan pengguna, tetapan optimum "
+"ialah '1'."
#: src/settings_translation_file.cpp
msgid ""
@@ -5387,12 +5691,12 @@ msgstr "Cecair legap"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
-msgstr ""
+msgstr "Kelegapan (alfa) bayang belakang fon lalai, nilai antara 0 dan 255."
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
+msgstr "Kelegapan (alfa) bayang belakang fon berbalik, nilai antara 0 dan 255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5400,8 +5704,8 @@ msgid ""
"formspec is\n"
"open."
msgstr ""
-"Buka menu jeda apabila fokus tetingkap hilang. Tidak jeda jika formspec "
-"dibuka."
+"Buka menu jeda apabila fokus tetingkap hilang.\n"
+"Tidak jeda jika formspec dibuka."
#: src/settings_translation_file.cpp
msgid "Overall bias of parallax occlusion effect, usually scale/2."
@@ -5433,10 +5737,6 @@ msgid "Parallax occlusion scale"
msgstr "Skala oklusi paralaks"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Kekuatan oklusi paralaks"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5444,10 +5744,20 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Laluan fon berbalik.\n"
+"Jika tetapan “freetype†dibolehkan: Ia mestilah fon TrueType.\n"
+"Jika tetapan “freetype†dilumpuhkan: Ia mestilah fon peta bit atau vektor "
+"XML.\n"
+"Fon ini akan digunakan bagi sesetengah bahasa atau jika fon lalai tidak "
+"tersedia."
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Laluan untuk simpan tangkap layar."
+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 ""
+"Laluan untuk simpan tangkapan layar. Boleh jadi laluan mutlak atau relatif.\n"
+"Folder akan dicipta sekiranya ia belum wujud."
#: src/settings_translation_file.cpp
msgid ""
@@ -5468,6 +5778,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 ""
+"Laluan fon lalai.\n"
+"Jika tetapan “freetype†dibolehkan: Ia mestilah fon TrueType.\n"
+"Jika tetapan “freetype†dilumpuhkan: Ia mestilah fon peta bit atau vektor "
+"XML.\n"
+"Fon berbalik akan digunakan sekiranya fon ini tidak dapat dimuatkan."
#: src/settings_translation_file.cpp
msgid ""
@@ -5476,12 +5791,25 @@ 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 ""
+"Laluan fon monospace.\n"
+"Jika tetapan “freetype†dibolehkan: Ia mestilah fon TrueType.\n"
+"Jika tetapan “freetype†dilumpuhkan: Ia mestilah fon peta bit atau vektor "
+"XML.\n"
+"Fon ini digunakan untuk unsur spt. konsol dan skrin pembukah."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
msgstr "Jeda ketika hilang fokus tetingkap"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr "Had baris gilir pemuatan blok daripada cakera per pemain"
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Had baris gilir penjanaan blok per pemain"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Ikut fizik"
@@ -5564,8 +5892,24 @@ msgid "Profiling"
msgstr "Pemprofilan"
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "Prometheus listener address"
+msgstr "Alamat pendengar Prometheus"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
msgstr ""
+"Alamat pendengar Prometheus.\n"
+"Jika minetest dikompil dengan tetapan ENABLE_PROMETHEUS dibolehkan,\n"
+"membolehkan pendengar metrik untuk Prometheus pada alamat berkenaan.\n"
+"Metrik boleh diambil di http://127.0.0.1:30000/metrics"
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr "Perkadaran gua besar yang mempunyai cecair."
#: src/settings_translation_file.cpp
msgid ""
@@ -5594,9 +5938,8 @@ msgid "Recent Chat Messages"
msgstr "Mesej Sembang Terkini"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Laluan laporan"
+msgstr "Laluan fon biasa"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5742,10 +6085,9 @@ msgid ""
msgstr ""
"Menyesuaikan GUI dengan nilai ditentukan oleh pengguna.\n"
"Gunakan penapis antialias jiran terdekat untuk menyesuaikan GUI.\n"
-"Ini membolehkan sisi tajam dilembutkan, dan sebatikan piksel\n"
-"apabila menyesuaiturunkan, namun ia akan mengkaburkan\n"
-"sesetengah piksel di sisi apabila imej disesuaikan dengan saiz\n"
-"bukan integer."
+"Ini membolehkan sisi tajam dilembutkan, dan sebatikan piksel apabila\n"
+"menyesuaiturunkan, namun ia akan mengaburkan sesetengah piksel\n"
+"di sisi apabila imej disesuaikan dengan saiz bukan integer."
#: src/settings_translation_file.cpp
msgid "Screen height"
@@ -5812,7 +6154,6 @@ msgid "Selection box width"
msgstr "Lebar kotak pemilihan"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -5835,24 +6176,24 @@ msgid ""
"18 = 4D \"Mandelbulb\" Julia set."
msgstr ""
"Pilih salah satu daripada 18 jenis fraktal.\n"
-"1 = Set mandelbrot \"Bulatan\" 4D\n"
-"2 = Set julia \"Bulatan\" 4D.\n"
-"3 = Set mandelbrot \"Persegi\" 4D.\n"
-"4 = Set julia \"Persegi\" 4D.\n"
-"5 = Set mandelbrot \"Sepupu Mandy\" 4D.\n"
-"6 = Set julia \"Sepupu Mandy\" 4D.\n"
-"7 = Set mandelbrot \"Variasi\" 4D.\n"
-"8 = Set julia \"Variasi\" 4D.\n"
-"9 = Set mandelbrot \"Mandelbrot/Mandelbar\" 3D.\n"
-"10 = Set julia \"Mandelbrot/Mandelbar\" 3D.\n"
-"11 = Set mandelbrot \"Pokok Krismas\" 3D.\n"
-"12 = Set julia \"Pokok Krismas\" 3D.\n"
-"13 = Set mandelbrot \"Mandelbulb\" 3D.\n"
-"14 = Set julia \"Mandelbulb\" 3D.\n"
-"15 = Set mandelbrot \"Mandelbulb Kosinus\" 3D.\n"
-"16 = Set julia \"Mandelbulb Kosinus\" 3D.\n"
-"17 = Set mandelbrot \"Mandelbulb\" 4D.\n"
-"18 = Set julia \"Mandelbulb\" 4D."
+"1 = Set Mandelbrot \"Bulatan\" 4D\n"
+"2 = Set Julia \"Bulatan\" 4D.\n"
+"3 = Set Mandelbrot \"Persegi\" 4D.\n"
+"4 = Set Julia \"Persegi\" 4D.\n"
+"5 = Set Mandelbrot \"Sepupu Mandy\" 4D.\n"
+"6 = Set Julia \"Sepupu Mandy\" 4D.\n"
+"7 = Set Mandelbrot \"Variasi\" 4D.\n"
+"8 = Set Julia \"Variasi\" 4D.\n"
+"9 = Set Mandelbrot \"Mandelbrot/Mandelbar\" 3D.\n"
+"10 = Set Julia \"Mandelbrot/Mandelbar\" 3D.\n"
+"11 = Set Mandelbrot \"Pokok Krismas\" 3D.\n"
+"12 = Set Julia \"Pokok Krismas\" 3D.\n"
+"13 = Set Mandelbrot \"Mandelbulb\" 3D.\n"
+"14 = Set Julia \"Mandelbulb\" 3D.\n"
+"15 = Set Mandelbrot \"Mandelbulb Kosinus\" 3D.\n"
+"16 = Set Julia \"Mandelbulb Kosinus\" 3D.\n"
+"17 = Set Mandelbrot \"Mandelbulb\" 4D.\n"
+"18 = Set Julia \"Mandelbulb\" 4D."
#: src/settings_translation_file.cpp
msgid "Server / Singleplayer"
@@ -5903,7 +6244,6 @@ msgid "Set the maximum character length of a chat message sent by clients."
msgstr "Tetapkan panjang aksara maksimum mesej sembang dihantar oleh klien."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
@@ -5912,21 +6252,19 @@ msgstr ""
"Memerlukan pembayang untuk dibolehkan."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"Tetapkan ke \"true\" untuk membolehkan air bergelora.\n"
+"Tetapkan ke \"true\" untuk membolehkan cecair bergelora (macam air).\n"
"Memerlukan pembayang dibolehkan."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
-"Tetapkan kepada \"true\" untuk membolehkan tumbuhan bergoyang.\n"
+"Tetapkan ke \"true\" untuk membolehkan tumbuhan bergoyang.\n"
"Memerlukan pembayang untuk dibolehkan."
#: src/settings_translation_file.cpp
@@ -5945,18 +6283,20 @@ msgstr ""
"Namun ia hanya berfungsi dengan pembahagian belakang video 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 "Ofset bayang fon, jika 0 maka bayang tidak akan dilukis."
+msgstr ""
+"Ofset bayang fon lalai (dalam unit piksel). Jika 0, maka bayang tidak akan "
+"dilukis."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
"be drawn."
-msgstr "Ofset bayang fon, jika 0 maka bayang tidak akan dilukis."
+msgstr ""
+"Ofset bayang fon berbalik (dalam unit piksel). Jika 0, maka bayang tidak "
+"akan dilukis."
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -5983,14 +6323,12 @@ msgid ""
"Altering this value is for special usage, leaving it unchanged is\n"
"recommended."
msgstr ""
-"Saiz potongan peta dijana oleh janapeta, dinyatakan dalam blokpeta (16 "
-"nod).\n"
-"AMARAN!: Tiada manfaat, dan terdapatnya bahaya, jika menaikkan nilai ini di "
-"atas 5.\n"
-"Mengurangkan nilai ini meningkatkan ketumpatan gua dan kurungan bawah "
-"tanah.\n"
-"Mengubah nilai ini untuk kegunaan istimewa, lebih baik biarkan ia tidak "
-"berubah."
+"Saiz potongan peta dijana oleh janapeta, dinyatakan dalam unit\n"
+"blokpeta (16 nod). AMARAN!: Tiada manfaat, dan terdapatnya\n"
+"bahaya, jika menaikkan nilai ini di atas 5. Mengurangkan nilai ini\n"
+"meningkatkan ketumpatan gua dan kurungan bawah tanah.\n"
+"Mengubah nilai ini adalah untuk kegunaan istimewa, lebih baik\n"
+"biarkan ia tidak berubah."
#: src/settings_translation_file.cpp
msgid ""
@@ -6012,11 +6350,11 @@ msgstr "Cerun dan pengisian bekerja bersama untuk mengubah ketinggian."
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Jumlah maksimum gua kecil"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Jumlah minimum gua kecil"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6082,20 +6420,29 @@ msgid ""
"Files that are not present will be fetched the usual way."
msgstr ""
"Menetapkan URL dari mana klien mengambil media, menggantikan UDP.\n"
-"$filename mestilah boleh diakses daripada $remote_media$filename\n"
-"melalui cURL (sudah tentu, remote_media mesti berakhir dengan tanda\n"
-"condong).\n"
+"$filename mestilah boleh diakses daripada $remote_media$filename melalui\n"
+"cURL (sudah tentu, remote_media mesti berakhir dengan tanda condong).\n"
"Fail yang tidak wujud akan diambil dengan cara biasa."
#: 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 ""
+"Menetapkan saiz tindanan lalai bagi nod, item dan alatan.\n"
+"Ambil perhatian bahawa mods atau permainan boleh tetapkan secara khusus "
+"tindanan untuk sesetengah (atau semua) item."
+
+#: src/settings_translation_file.cpp
msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
msgstr ""
-"Sebar tolakan tengah lengkung cahaya.\n"
-"Sisihan piawai Gauss tolakan tengah."
+"Sebar julat tolakan lengkung cahaya.\n"
+"Mengawal lebar julat untuk ditolak.\n"
+"Sisihan piawai Gauss tolakan lengkung cahaya."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6114,6 +6461,10 @@ msgid "Step mountain spread noise"
msgstr "Hingar sebar gunung curam"
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr "Kekuatan paralaks mod 3D."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Kekuatan peta normal yang dijana."
@@ -6123,10 +6474,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Kekuatan paralaks."
+"Kekuatan tolakan lengkung cahaya.\n"
+"Tiga parameter 'tolakan' mentakrifkan julat lengkung\n"
+"cahaya yang ditolak dalam pencahayaan."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6137,6 +6487,37 @@ msgid "Strip color codes"
msgstr "Buang kod warna"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+"Aras permukaan untuk air pilihan yang boleh terletak atas lapisan tanah "
+"terapung pejal.\n"
+"Air dilumpuhkan secara lalai dan hanya akan diletakkan sekiranya nilai ini "
+"ditetapkan\n"
+"melebihi \"nilai Y maksimum tanah terapung 'mgv7_floatland_ymax' tolak nilai "
+"tirusan\n"
+"tanah terapung 'mgv7_floatland_taper' (iaitu permulaan tirusan atasan)\".\n"
+"***AMARAN, WUJUD POTENSI BAHAYA KEPADA PRESTASI DUNIA DAN PELAYAN***:\n"
+"Apabila membolehkan peletakan air, tanah terapung mestilah ditatarajahkan "
+"dan dicuba dahulu\n"
+"agar ia sentiasa menjadi lapisan pejal dengan menetapkan ketumpatan "
+"'mgv7_floatland_density'\n"
+"kepada 2.0 (atau nilai lain yang diperlukan bergantung kepada nilai "
+"'mgv7_np_floatland'), untuk\n"
+"mengelakkan aliran air keterlaluan yang intensif pelayan dan untuk "
+"mengelakkan kebanjiran\n"
+"besar-besaran air ke permukaan dunia di bawah tanah terapung tersebut."
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "SQLite segerak"
@@ -6249,6 +6630,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Tinggi maksimum permukaan cecair bergelora.\n"
+"4.0 = Tinggi gelora ialah dua nod.\n"
+"0.0 = Gelora tidak bergerak langsung.\n"
+"Nilai asalnya 1.0 (1/2 nod).\n"
+"Memerlukan tetapan cecair bergelora dibolehkan."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6271,14 +6657,14 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
-"Radius jilid blok di sekitar setiap pemain yang tertakluk kepada benda blok "
-"aktif,\n"
-"dinyatakan dalam blokpeta (16 nod).\n"
+"Radius jilid blok di sekitar setiap pemain yang tertakluk kepada benda blok\n"
+"aktif, dinyatakan dalam blokpeta (16 nod).\n"
"Dalam blok aktif, objek dimuatkan dan ABM dijalankan.\n"
"Ini juga jarak minimum di mana objek aktif (mob) dikekalkan.\n"
-"Ini perlu ditetapkan bersama-sama jarak objek aktif (active_object_range)."
+"Ini perlu ditetapkan bersama nilai blok jarak penghantaran objek aktif "
+"(active_object_send_range_blocks)."
#: src/settings_translation_file.cpp
msgid ""
@@ -6400,10 +6786,9 @@ msgid ""
"node."
msgstr ""
"Untuk mengurangkan lembapnya tindak balas, pemindahan blok diperlahankan "
-"apabila\n"
-"pemain membina sesuatu. Tetapan ini menetapkan berapa lama ianya "
-"diperlahankan\n"
-"setelah meletakkan atau menggali sesebuah nod."
+"apabila pemain membina sesuatu.\n"
+"Tetapan ini menetapkan berapa lama ianya diperlahankan setelah meletakkan "
+"atau mengalihkan sesebuah nod."
#: src/settings_translation_file.cpp
msgid "Toggle camera mode key"
@@ -6426,7 +6811,6 @@ msgid "Trilinear filtering"
msgstr "Penapisan trilinear"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"True = 256\n"
"False = 128\n"
@@ -6434,8 +6818,7 @@ msgid ""
msgstr ""
"True = 256\n"
"False = 128\n"
-"Boleh digunakan untuk membuatkan peta mini kelihatan lebih lembut pada mesin "
-"yang lebih perlahan."
+"Boleh digunakan untuk melancarkan peta mini pada mesin yang perlahan."
#: src/settings_translation_file.cpp
msgid "Trusted mods"
@@ -6476,6 +6859,10 @@ msgid "Upper Y limit of dungeons."
msgstr "Had Y atas kurungan bawah tanah."
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr "Had Y atas tanah terapung."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Guna paparan awan 3D menggantikan awan rata."
@@ -6612,13 +6999,12 @@ msgid "Volume"
msgstr "Kekuatan bunyi"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
-"Membolehkan pemetaan oklusi paralaks.\n"
-"Memerlukan pembayang untuk dibolehkan."
+"Kekuatan semua bunyi.\n"
+"Memerlukan sistem bunyi dibolehkan."
#: src/settings_translation_file.cpp
msgid ""
@@ -6665,24 +7051,20 @@ msgid "Waving leaves"
msgstr "Daun bergoyang"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
-msgstr "Cecair Bergelora"
+msgstr "Cecair bergelora"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Ketinggian ombak air bergelora"
+msgstr "Ketinggian ombak cecair bergelora"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
-msgstr "Kelajuan ombak air bergelora"
+msgstr "Kelajuan ombak cecair bergelora"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "Panjang ombak air bergelora"
+msgstr "Panjang ombak cecair bergelora"
#: src/settings_translation_file.cpp
msgid "Waving plants"
@@ -6694,10 +7076,11 @@ msgid ""
"filtered in software, but some images are generated directly\n"
"to hardware (e.g. render-to-texture for nodes in inventory)."
msgstr ""
-"Apabila penapis skala GUI (gui_scaling_filter) ditetapkan kepada\n"
-"\"true\", semua imej GUI perlu ditapis dalam perisian, tetapi sesetengah\n"
-"imeg dijana secara terus ke perkakasan (contohnya, render-to-texture\n"
-"untuk nod dalam inventori)."
+"Apabila penapis skala GUI (gui_scaling_filter) ditetapkan kepada \"true\", "
+"semua\n"
+"imej GUI perlu ditapis dalam perisian, tetapi sesetengah imej dijana secara "
+"terus\n"
+"ke perkakasan (contohnya, render-to-texture untuk nod dalam inventori)."
#: src/settings_translation_file.cpp
msgid ""
@@ -6706,13 +7089,14 @@ msgid ""
"to the old scaling method, for video drivers that don't\n"
"properly support downloading textures back from hardware."
msgstr ""
-"Apabila gui_scaling_filter_txr2img ditetapkan kepada \"true\",\n"
-"salin semula kesemua imej tersebut dari perkakasan\n"
-"kepada perisian untuk disesuaikan. Sekiranya ia ditetapkan\n"
-"kepada \"false\", berbalik kepada kaedah penyesuaian yang\n"
-"lama, untuk pemacu video yang tidak mampu menyokong\n"
-"dengan sempurna fungsi muat turun semula tekstur\n"
-"daripada perkakasan."
+"Apabila gui_scaling_filter_txr2img ditetapkan kepada \"true\", salin semula "
+"kesemua imej\n"
+"tersebut dari perkakasan ke perisian untuk disesuaikan. Sekiranya ditetapkan "
+"kepada\n"
+"\"false\", berbalik kepada kaedah penyesuaian yang lama, untuk pemacu video "
+"yang tidak\n"
+"mampu menyokong dengan sempurna fungsi muat turun semula tekstur daripada "
+"perkakasan."
#: src/settings_translation_file.cpp
msgid ""
@@ -6741,14 +7125,14 @@ msgstr ""
"tekstur jajaran dunia."
#: 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 ""
-"Menetapkan sama ada fon FreeType digunakan, memerlukan sokongan Freetype "
-"dikompil bersama."
+"Menetapkan sama ada fon FreeType digunakan, memerlukan sokongan Freetype\n"
+"dikompil bersama. Jika dilumpuhkan, fon peta bit dan vektor XML akan "
+"digunakan."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -6790,6 +7174,10 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Sama ada ingin membisukan bunyi. Anda boleh menyahbisu pada bila-bila\n"
+"masa, melainkan sistem bunyi dilumpuhkan (enable_sound=false).\n"
+"Dalam permainan, anda boleh menogol keadaan bisu menggunakan kekunci\n"
+"bisu atau menggunakan menu jeda."
#: src/settings_translation_file.cpp
msgid ""
@@ -6857,8 +7245,8 @@ msgid ""
"Y of mountain density gradient zero level. Used to shift mountains "
"vertically."
msgstr ""
-"Nilai Y untuk permulaan kecerunan ketumpatan gunung.\n"
-"Digunakan untuk menganjak gunung secara menegak."
+"Nilai Y untuk permulaan kecerunan ketumpatan gunung. Digunakan untuk "
+"menganjak gunung secara menegak."
#: src/settings_translation_file.cpp
msgid "Y of upper limit of large caves."
@@ -6869,6 +7257,20 @@ msgid "Y-distance over which caverns expand to full size."
msgstr "Jarak Y di mana gua berkembang kepada saiz penuh."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+"Jarak-Y di mana tanah terapung menirus daripada ketumpatan penuh kepada "
+"tiada apa-apa.\n"
+"Ketirusan bermula pada jarak ini daripada had Y.\n"
+"Untuk lapisan tanah terapung pejal, nilai ini mengawal ketinggian bukit/"
+"gunung.\n"
+"Mesti kurang atau sama dengan separuh jarak di antara had-had Y."
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Aras Y untuk permukaan rupa bumi purata."
@@ -6969,18 +7371,6 @@ msgstr "Had masa cURL"
#~ msgid "Floatland mountain height"
#~ msgstr "Ketinggian gunung tanah terapung"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Eksponen gunung tanah terapung"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Ketumpatan gunung tanah terapung"
-
-#~ msgid "Floatland level"
-#~ msgstr "Aras tanah terapung"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Hingar asas tanah terapung"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Hingar ketinggian asas tanah terapung"
@@ -7036,3 +7426,21 @@ msgstr "Had masa cURL"
#~ "Laraskan pengekodan gama untuk jadual cahaya. Nombor lebih tinggi lebih "
#~ "cerah.\n"
#~ "Tetapan ini hanya untuk klien dan diabaikan oleh pelayan permainan."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Laluan untuk simpan tangkap layar."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Kekuatan oklusi paralaks"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Had baris hilir keluar pada cakera"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Sedang muat turun dan memasang $1, sila tunggu..."
+
+#~ msgid "Back"
+#~ msgstr "Backspace"
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
diff --git a/po/ms_Arab/minetest.po b/po/ms_Arab/minetest.po
new file mode 100644
index 000000000..e7e4c7167
--- /dev/null
+++ b/po/ms_Arab/minetest.po
@@ -0,0 +1,6585 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-07-08 20:47+0000\n"
+"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat "
+"Yasuyoshi <translation@mnh48.moe>\n"
+"Language-Team: Malay (Jawi) <https://hosted.weblate.org/projects/minetest/"
+"minetest/ms_Arab/>\n"
+"Language: ms_Arab\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.2-dev\n"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr "اندا تله منيڠݢل"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr "لاهير سمولا"
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "OK"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "ڤلاين ڤرماءينن ممينت اندا اونتوق مڽمبوڠ سمولا:"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "سمبوڠ سمولا"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "مينو اوتام"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr "برلاکوڽ رالت دالم سکريڤ Lua:"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr "تله برلاکوڽ رالت:"
+
+#: builtin/mainmenu/common.lua src/client/game.cpp
+msgid "Loading..."
+msgstr "سدڠ ممواتکن..."
+
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr "چوب اکتيÙÚ©Ù† سمولا سناراي ڤلاين عوام ÙØ§Ù† ڤريقسا سمبوڠن اينترنيت اندا."
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "ڤلاين ڤرماءينن Ù…Ú½ÙˆÚ©ÙˆÚ  ڤروتوکول ÛØ±Ø³ÙŠ $1 هيڠݢ $2. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "ڤلاين ڤرماءينن مڠواتکواساکن ڤروتوکول ÛØ±Ø³ÙŠ $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "کامي Ù…Ú½ÙˆÚ©ÙˆÚ  ڤروتوکول ÛØ±Ø³ÙŠ $1 هيڠݢ $2."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "کامي هاڽ Ù…Ú½ÙˆÚ©ÙˆÚ  ڤروتوکول ÛØ±Ø³ÙŠ $1."
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "ÛØ±Ø³ÙŠ Ú¤Ø±ÙˆØªÙˆÚ©ÙˆÙ„ تيدق سراسي. "
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "دنيا:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr "تيادا ڤريهل ڤيک مودس ترسديا."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr "تيادا ڤريهل ڤرماءينن ترسديا."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "مودس:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr "تيادا کبرݢنتوڠن (ڤيليهن)"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr "تيادا کبرݢنتوڠن واجب"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr "کبرݢنتوڠن ڤيليهن:"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr "کبرݢنتوڠن:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr "تيادا کبرݢنتوڠن ڤيليهن"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "سيمڤن"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr "باتل"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "چاري مودس لاءين"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr "لومڤوهکن ڤيک مودس"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr "بوليهکن ڤيک مودس"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "دبوليهکن"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr "لومڤوهکن سموا"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "ممبوليهکن سموا"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"characters [a-z0-9_] are allowed."
+msgstr ""
+"ݢاݢل اونتوق ممبوليهکن مودس \"$1\" کران اي مڠندوڠي اکسارا يڠ تيدق دبنرکن. هاڽ "
+"اکسارا [a-z0-9_] سهاج يڠ دبنرکن."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "سيستم ContentDB تيدق ترسديا اڤابيلا Minetest دکومڤيل تنڤ cURL"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr "سموا ڤاکيج"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "ڤرماءينن"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Mods"
+msgstr "مودس"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr "ڤيک تيکستور"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr "ݢاݢل مموات تورون $1"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr "چاري"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr "کمبالي کمينو اوتام"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr "تيادا حاصيل"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr "تيادا ڤاکيج يڠ بوليه دامبيل"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "مموات تورون..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr "ڤاسڠ"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr "کمس کيني"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr "ڽهڤاسڠ"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "ليهت"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "ݢوا بسر"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "ݢوا ݢرݢاسي يڠ ساڠت مندالم باواه تانه"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "سوڠاي ارس لاءوت"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "سوڠاي"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "ݢونوڠ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "تانه تراڤوڠ (دالم اوجيکاجي)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "جيسيم بومي تراڤوڠ اتس لاڠيت"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "کديڠينن التيتود"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "کورڠکن هاب مڠيکوت التيتود"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "ککريڠن التيتود"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "کورڠکن کلمبڤن مڠيکوت التيتود"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "سوڠاي لمبڤ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "تيڠکتکن کلمبڤن سکيتر سوڠاي"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "کدالمن سوڠاي برباݢاي"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "کلمبڤن رنده دان هاب تيڠݢي مڽببکن سوڠاي چيتيق اتاو کريڠ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "بوکيت"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "تاسيق"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "روڤ بومي تمبهن"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "جان روڤ بومي بوکن-ÙØ±Ø§Ú©ØªÙ„: لاءوتن دان باواه تانه"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "ڤوکوق دان رومڤوت هوتن"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "روڤ بومي رات"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "اليرن لومڤور"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "هاکيسن ڤرموکاءن روڤ بومي"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "اقليم سدرهان⹠ݢورون⹠هوتن⹠توندرا⹠تايݢ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "اقليم سدرهان⹠ݢورون⹠هوتن"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "اقليم سدرهان⹠ݢورون"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no games installed."
+msgstr "اندا تيدق مماسڠ سبارڠ ڤرماءينن."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "موات تورون ساتو دري minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "ݢوا"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "کوروڠن باواه تانه"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "هياسن"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+"ستروکتور يڠ مونچول اتس روڤ بومي (تيادا کسن ڤد ڤوکوق دان رومڤوت هوتن دچيڤت "
+"اوليه v6)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "ستروکتور يڠ مونچول اتس روڤ بومي⹠بياساڽ ڤوکوق دان تومبوهن"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "جاريڠن تروووڠ دان ݢوا"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "بيوم"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "ڤڽباتين بيوم"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr "ڤراليهن لمبوت دانتارا بيوم"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "بنديرا جان ڤتا"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "بنديرا خصوص جان ڤتا"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr "امرن: The Development Test هاڽله اونتوق کݢوناءن ڤمباڠون."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a game, such as Minetest Game, from minetest.net"
+msgstr "موات تورون ڤرماءينن⹠چونتوهڽ Minetest Game⹠دري minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "نام دنيا"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr "بنيه"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "جاناءن ڤتا"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "ڤرماءينن"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "چيڤت"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "دنيا برنام \"$1\" تله وجود"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr "تيادا ڤرماءينن دڤيليه"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "ادکه امدا ڤستي اندا ايڠين ممادم \"$1\"؟"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
+#: src/client/keycode.cpp
+msgid "Delete"
+msgstr "ڤادم"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr "pkgmgr: ݢاݢل ممادم \"$1\""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr "pkgmgr: لالوان تيدق صح \"$1\""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "ڤادم دنيا \"$1\"؟"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr "تريما"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid ""
+"This modpack has an explicit name given in its modpack.conf which will "
+"override any renaming here."
+msgstr ""
+"Ú¤ÙŠÚ© مودس اين ممڤوڽاءي نام خصوص دبريکن دالم ÙØ§ÙŠÙ„ modpack.conf ميليقڽ ÙŠÚ  اکن "
+"مڠاتسي سبارڠ ڤناماءن سمولا دسين."
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr "نامکن سمولا ڤيک مودس:"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "دلومڤوهکن"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "دبوليهکن"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "لاير"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr "Ø§ÙˆÙØ³ÙŠØª"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr "سکال"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr "سيبرن X"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr "سيبرن Y"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr "هيڠر 2D"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr "سيبرن Z"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr "اوکتÙ"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistance"
+msgstr "ڤنروسن"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr "لاکوناريتي"
+
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "defaults"
+msgstr "لالاي"
+
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "eased"
+msgstr "تومڤول"
+
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "absvalue"
+msgstr "نيلاي مطلق"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr "X"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr "Y"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr "Z"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(تيادا ڤريهل اونتوق تتڤن يڠ دبري)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "سيلا ماسوقکن اينتيݢر يڠ صح."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr "نيلاي مستيله سکورڠ-کورڠڽ $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr "نيلاي مستيله تيدق لبيه درڤد $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "سيلا ماسوقکن نومبور يڠ صح."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr "ڤيليه ديريکتوري"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr "ڤيليه ÙØ§ÙŠÙ„"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< کمبالي کهلامن تتڤن"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "ايديت"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "ڤوليهکن تتڤن اصل"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "تونجوقکن نام تيکنيکل"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr "$1 (دبوليهکن)"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr "ݢاݢل مماسڠ $1 سباݢاي ڤيک تيکستور"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr "ݢاݢل مماسڠ $1 ڤد $2"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr "تيدق جومڤ مودس اتاو ڤيک مودس يڠ صح"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr "ݢاݢل مماسڠ ڤيک مودس سباݢاي $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr "ڤاسڠ مودس: تيدق جومڤ نام Ùولدر ÙŠÚ  سسواي اونتوق Ú¤ÙŠÚ© مودس $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr "ݢاݢل مماسڠ مودس سباݢاي $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr "ڤاسڠ مودس: ݢاݢل منچاري نام مودس سبنر اونتوق: $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr "ݢاݢل مماسڠ ڤرماءينن سباݢاي $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: file: \"$1\""
+msgstr "ڤاسڠ: ÙØ§ÙŠÙ„: \"$1\""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: Unsupported file type \"$1\" or broken archive"
+msgstr "ڤاسڠ: جنيس ÙØ§ÙŠÙ„ \"$1\" تيدق دسوکوڠ اتاو ارکيب روسق"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr "$1 مودس"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Installed Packages:"
+msgstr "ڤاکيج دڤاسڠ:"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Browse online content"
+msgstr "لايري کندوڠن دالم تالين"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No package description available"
+msgstr "تيادا ڤريهل ڤاکيج ترسديا"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Rename"
+msgstr "نامکن سمولا"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No dependencies."
+msgstr "تيادا کبرݢنتوڠن."
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Disable Texture Pack"
+msgstr "لومڤوهکن ڤيک تيکستور"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Use Texture Pack"
+msgstr "ݢونا ڤيک تيکستور"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Information:"
+msgstr "معلومت:"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Uninstall Package"
+msgstr "ڽهڤاسڠ ڤاکيج"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Content"
+msgstr "کندوڠن"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "ڤڠهرݢاءن"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "ڤمباڠون تراس"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "ڤڽومبڠ اکتيÙ"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "ڤمباڠون تراس تردهولو"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr "ڤڽومبڠ تردهولو"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "ڤاسڠکن ڤرماءينن درڤد ContentDB"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Configure"
+msgstr "کونÙيݢوراسي"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "New"
+msgstr "بوات بارو"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select World:"
+msgstr "ڤيليه دنيا:"
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative Mode"
+msgstr "مود کرياتيÙ"
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Enable Damage"
+msgstr "بوليه چدرا"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Server"
+msgstr "هوس ڤلاين"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Game"
+msgstr "هوس ڤرماءينن"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Announce Server"
+msgstr "اومومکن ڤلاين"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Name/Password"
+msgstr "نام\\کات لالوان"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Bind Address"
+msgstr "علامت ايکتن"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Port"
+msgstr "ڤورت"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Server Port"
+msgstr "ڤورت ڤلاين"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Play Game"
+msgstr "مولا ماءين"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+msgstr "تيادا دنيا دچيڤت اتاو دڤيليه!"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Start Game"
+msgstr "مولاکن ڤرماءينن"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Address / Port"
+msgstr "علامت \\ ڤورت"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr "نام \\ کات لالوان"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr "سمبوڠ"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr "ڤادم کݢمرن"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr "کݢمرن"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Ping"
+msgstr "Ú¤ÙŠÚ "
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr "مود کرياتيÙ"
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr "بوليه چدرا"
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr "بوليه برلاوان PvP"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Join Game"
+msgstr "سرتاءي ڤرماءينن"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr "داون لݢڤ"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr "داون ريڠکس"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr "داون براݢم"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr "کرڠک نود"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr "تونجولن نود"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "None"
+msgstr "تيادا"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr "تيادا تاڤيسن"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr "ڤناڤيسن بيلينيار"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr "ڤناڤيسن تريلينيار"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr "تيادا ڤتا ميڤ"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr "ڤتا ميڤ"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr "ڤتا ميڤ + ڤناڤيسن انيسو"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr "2x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr "4x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr "8x"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr "اداکه اندا ماهو سيت سمولا دنيا ڤماءين ڤرساورڠن؟"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr "ياء"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr "تيدق"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr "ڤنچهاياءن لمبوت"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr "ڤرتيکل"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr "اوان 3D"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr "اءير لݢڤ"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr "کاچ برسمبوڠن"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr "جالينن:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr "انتيالياس:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr "سکرين:"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
+msgstr "اءوتوسيمڤن سايز سکرين"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr "ڤمبايڠ"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (unavailable)"
+msgstr "ڤمبايڠ (تيدق ترسديا)"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Reset singleplayer world"
+msgstr "سيت سمولا دنيا ڤماءين ڤرساورڠن"
+
+#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
+msgid "Change Keys"
+msgstr "توکر ککونچي"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "All Settings"
+msgstr "سموا تتڤن"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold: (px)"
+msgstr "نيلاي امبڠ سنتوهن: (px)"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr "ڤمتاءن بيڠݢول"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr "ڤمتاءن تونا"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Generate Normal Maps"
+msgstr "جان ڤتا نورمل"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr "اوکلوسي ڤارالکس"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Liquids"
+msgstr "چچاءير برݢلورا"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr "داءون برݢويڠ"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr "تومبوهن برݢويڠ"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr "اونتوق ممبوليهکن ڤمبايڠ⹠ڤماچو OpenGL مستي دݢوناکن."
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr "تتڤن"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr "مولا ماءين ساورڠ"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr "کونÙيݢوراسي مودس"
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr "اوتام"
+
+#: src/client/client.cpp
+msgid "Connection timed out."
+msgstr "سمبوڠن تامت تيمڤوه."
+
+#: src/client/client.cpp
+msgid "Loading textures..."
+msgstr "سدڠ ممواتکن تيکستور..."
+
+#: src/client/client.cpp
+msgid "Rebuilding shaders..."
+msgstr "سدڠ ممبينا سمولا ڤمبايڠ..."
+
+#: src/client/client.cpp
+msgid "Initializing nodes..."
+msgstr "سدڠ مڠاولکن نود..."
+
+#: src/client/client.cpp
+msgid "Initializing nodes"
+msgstr "مڠاولکن نود"
+
+#: src/client/client.cpp
+msgid "Done!"
+msgstr "سلساي!"
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr "مينو اوتام"
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr "نام ڤماءين ترلالو ڤنجڠ."
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr "رالت دالم ڤڽمبوڠن (تامت تيمڤوه؟)"
+
+#: src/client/clientlauncher.cpp
+msgid "Provided password file failed to open: "
+msgstr "ÙØ§ÙŠÙ„ کات لالوان ÙŠÚ  دسدياکن ݢاݢل دبوک: "
+
+#: src/client/clientlauncher.cpp
+msgid "Please choose a name!"
+msgstr "سيلا ڤيليه سواتو نام!"
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr "تيادا دنيا دڤيليه اتاو تيادا علامت دبري. تيادا اڤ بوليه دلاکوکن."
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr "لالوان دنيا دبري تيدق وجود: "
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr "تيدق جومڤ اتاو تيدق بوليه مواتکن ڤرماءينن \""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr "سڤيسيÙيکاسي ڤرماءينن تيدق صح."
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
+#: src/client/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr "yes"
+
+#: src/client/game.cpp
+msgid "Shutting down..."
+msgstr "سدڠ منوتوڤ..."
+
+#: src/client/game.cpp
+msgid "Creating server..."
+msgstr "سدڠ منچيڤت ڤلاين..."
+
+#: src/client/game.cpp
+msgid "Creating client..."
+msgstr "سدڠ منچيڤت کليئن..."
+
+#: src/client/game.cpp
+msgid "Resolving address..."
+msgstr "سدڠ مڽلسايکن علامت..."
+
+#: src/client/game.cpp
+msgid "Connecting to server..."
+msgstr "سدڠ مڽمبوڠ کڤد ڤلاين..."
+
+#: src/client/game.cpp
+msgid "Item definitions..."
+msgstr "سدڠ منتعريÙÚ©Ù† ايتم..."
+
+#: src/client/game.cpp
+msgid "Node definitions..."
+msgstr "سدڠ منتعريÙÚ©Ù† نود..."
+
+#: src/client/game.cpp
+msgid "Media..."
+msgstr "سدڠ ممواتکن ميديا..."
+
+#: src/client/game.cpp
+msgid "KiB/s"
+msgstr "KiB/s"
+
+#: src/client/game.cpp
+msgid "MiB/s"
+msgstr "MiB/s"
+
+#: src/client/game.cpp
+msgid "Client side scripting is disabled"
+msgstr "سکريڤ ڤيهق کليئن دلومڤوهکن"
+
+#: src/client/game.cpp
+msgid "Sound muted"
+msgstr "بوڽي دبيسوکن"
+
+#: src/client/game.cpp
+msgid "Sound unmuted"
+msgstr "بوڽي دڽهبيسوکن"
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "سيستم بوڽي دلومڤوهکن"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Volume changed to %d%%"
+msgstr "ککواتن بوڽي داوبه کڤد %d%%"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "سيستم بوڽي تيدق دسوکوڠ دبيناءن اين"
+
+#: src/client/game.cpp
+msgid "ok"
+msgstr "اوکي"
+
+#: src/client/game.cpp
+msgid "Fly mode enabled"
+msgstr "مود تربڠ دبوليهکن"
+
+#: src/client/game.cpp
+msgid "Fly mode enabled (note: no 'fly' privilege)"
+msgstr "مود تربڠ دبوليهکن (نوت: تيادا کأيستيميواءن 'تربڠ')"
+
+#: src/client/game.cpp
+msgid "Fly mode disabled"
+msgstr "مود تربڠ دلومڤوهکن"
+
+#: src/client/game.cpp
+msgid "Pitch move mode enabled"
+msgstr "مود ڤرݢرقن ڤيچ دبوليهکن"
+
+#: src/client/game.cpp
+msgid "Pitch move mode disabled"
+msgstr "مود ڤرݢرقن ڤيچ دلومڤوهکن"
+
+#: src/client/game.cpp
+msgid "Fast mode enabled"
+msgstr "مود ڤرݢرقن ڤنتس دبوليهکن"
+
+#: src/client/game.cpp
+msgid "Fast mode enabled (note: no 'fast' privilege)"
+msgstr "مود ڤرݢرقن ڤنتس دبوليهکن (نوت: تيادا کأيستيميواءن 'ڤرݢرقن ڤنتس')"
+
+#: src/client/game.cpp
+msgid "Fast mode disabled"
+msgstr "مود ڤرݢرقن ڤنتس دلومڤوهکن"
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled"
+msgstr "مود تمبوس بلوک دبوليهکن"
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled (note: no 'noclip' privilege)"
+msgstr "مود تمبوس بلوک دبوليهکن (نوت: تيادا کأيستيميواءن 'تمبوس بلوک')"
+
+#: src/client/game.cpp
+msgid "Noclip mode disabled"
+msgstr "مود تمبوس بلوک دلومڤوهکن"
+
+#: src/client/game.cpp
+msgid "Cinematic mode enabled"
+msgstr "مود سينماتيک دبوليهکن"
+
+#: src/client/game.cpp
+msgid "Cinematic mode disabled"
+msgstr "مود سينماتيک دلومڤوهکن"
+
+#: src/client/game.cpp
+msgid "Automatic forward enabled"
+msgstr "ڤرݢرقن اءوتوماتيک دبوليهکن"
+
+#: src/client/game.cpp
+msgid "Automatic forward disabled"
+msgstr "ڤرݢرقن اءوتوماتيک دلومڤوهکن"
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x1"
+msgstr "ڤتا ميني دالم مود ڤرموکاءن⹠زوم 1x"
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x2"
+msgstr "ڤتا ميني دالم مود ڤرموکاءن⹠زوم 2x"
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x4"
+msgstr "ڤتا ميني دالم مود ڤرموکاءن⹠زوم 4x"
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x1"
+msgstr "ڤتا ميني دالم مود رادر⹠زوم 1x"
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x2"
+msgstr "ڤتا ميني دالم مود رادر⹠زوم 2x"
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x4"
+msgstr "ڤتا ميني دالم مود رادر⹠زوم 4x"
+
+#: src/client/game.cpp
+msgid "Minimap hidden"
+msgstr "ڤتا ميني دسمبوڽيکن"
+
+#: src/client/game.cpp
+msgid "Minimap currently disabled by game or mod"
+msgstr "ڤتا ميني دلومڤوهکن اوليه ڤرماءينن اتاو مودس"
+
+#: src/client/game.cpp
+msgid "Fog disabled"
+msgstr "کابوت دلومڤوهکن"
+
+#: src/client/game.cpp
+msgid "Fog enabled"
+msgstr "کابوت دبوليهکن"
+
+#: src/client/game.cpp
+msgid "Debug info shown"
+msgstr "معلومت ڽهڤڤيجت دتونجوقکن"
+
+#: src/client/game.cpp
+msgid "Profiler graph shown"
+msgstr "ݢرا٠ڤمبوکه دتونجوقکن"
+
+#: src/client/game.cpp
+msgid "Wireframe shown"
+msgstr "رڠک داواي دتونجوقکن"
+
+#: src/client/game.cpp
+msgid "Debug info, profiler graph, and wireframe hidden"
+msgstr "معلومت ڽهڤڤيجت⹠ݢرا٠ڤمبوکه⹠دان رڠک داواي دسمبوڽيکن"
+
+#: src/client/game.cpp
+msgid "Debug info and profiler graph hidden"
+msgstr "معلومت ڽهڤڤيجت دان ݢرا٠ڤمبوکه دسمبوڽيکن"
+
+#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr "کمس کيني کاميرا دلومڤوهکن"
+
+#: src/client/game.cpp
+msgid "Camera update enabled"
+msgstr "کمس کيني کاميرا دبوليهکن"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at maximum: %d"
+msgstr "جارق ڤندڠ براد دتاهڤ مکسيموم: %d"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range changed to %d"
+msgstr "جارق ڤندڠ دتوکر ک%d"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at minimum: %d"
+msgstr "جارق ڤندڠ براد دتاهڤ مينيموم: %d"
+
+#: src/client/game.cpp
+msgid "Enabled unlimited viewing range"
+msgstr "جارق ڤندڠ تنڤ حد دبوليهکن"
+
+#: src/client/game.cpp
+msgid "Disabled unlimited viewing range"
+msgstr "جارق ڤندڠ تنڤ حد دلومڤوهکن"
+
+#: src/client/game.cpp
+msgid "Zoom currently disabled by game or mod"
+msgstr "زوم سدڠ دلومڤوهکن اوليه ڤرماءينن اتاو مودس"
+
+#: src/client/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+"کاولن اصل:\n"
+"تيادا مينو کليهتن:\n"
+"- تکن سکالي: اکتيÙÚ©Ù† بوتڠ\n"
+"- تکن دوا کالي: لتق بارڠ\\ݢونا سسواتو\n"
+"- تاريق دڠن جاري: ليهت سکليليڠ\n"
+"مينو\\اينÛينتوري کليهتن:\n"
+"- تکن برݢندا (لوار کاوسن اينÛينتوري):\n"
+" -->توتوڤ\n"
+"- تکن تيندنن⹠تکن سلوت:\n"
+" --> ڤينده تيندنن\n"
+"- سنتوه دان تاريق⹠تکن سکرين ڤاکاي جاري کدوا\n"
+" --> لتق ساتو ايتم دري تيندنن کدالم سلوت\n"
+
+#: src/client/game.cpp
+#, c-format
+msgid ""
+"Controls:\n"
+"- %s: move forwards\n"
+"- %s: move backwards\n"
+"- %s: move left\n"
+"- %s: move right\n"
+"- %s: jump/climb\n"
+"- %s: sneak/go down\n"
+"- %s: drop item\n"
+"- %s: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- %s: chat\n"
+msgstr ""
+"کاولن:\n"
+"- %s: برݢرق کدڤن\n"
+"- %s: برݢرق کبلاکڠ\n"
+"- %s: برݢرق ککيري\n"
+"- %s: برݢرق ککانن\n"
+"- %s: لومڤت\\ناءيق اتس\n"
+"- %s: سلينڤ\\تورون باواه\n"
+"- %s: جاتوهکن ايتم\n"
+"- %s: اينÛينتوري\n"
+"- تتيکوس: ڤوسيڠ\\ليهت سکليليڠ\n"
+"- تتيکوس کيري: ݢالي\\کتوق\n"
+"- تتيکوس کانن: لتق\\ݢونا\n"
+"- رودا تتيکوس: ڤيليه ايتم\n"
+"- %s: سيمبڠ\n"
+
+#: src/client/game.cpp
+msgid "Continue"
+msgstr "تروسکن"
+
+#: src/client/game.cpp
+msgid "Change Password"
+msgstr "توکر کات لالوان"
+
+#: src/client/game.cpp
+msgid "Game paused"
+msgstr "ڤرماءينن دجيداکن"
+
+#: src/client/game.cpp
+msgid "Sound Volume"
+msgstr "ککواتن بوڽي"
+
+#: src/client/game.cpp
+msgid "Exit to Menu"
+msgstr "کلوار کمينو"
+
+#: src/client/game.cpp
+msgid "Exit to OS"
+msgstr "کلوار تروس ڤرماءينن"
+
+#: src/client/game.cpp
+msgid "Game info:"
+msgstr "معلومت ڤرماءينن:"
+
+#: src/client/game.cpp
+msgid "- Mode: "
+msgstr "- مود: "
+
+#: src/client/game.cpp
+msgid "Remote server"
+msgstr "ڤلاين جارق جاءوه"
+
+#: src/client/game.cpp
+msgid "- Address: "
+msgstr "- علامت: "
+
+#: src/client/game.cpp
+msgid "Hosting server"
+msgstr "مڠهوس ڤلاين"
+
+#: src/client/game.cpp
+msgid "- Port: "
+msgstr "- ڤورت: "
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr "ڤماءين ڤرسأورڠن"
+
+#: src/client/game.cpp
+msgid "On"
+msgstr "بوک"
+
+#: src/client/game.cpp
+msgid "Off"
+msgstr "توتوڤ"
+
+#: src/client/game.cpp
+msgid "- Damage: "
+msgstr "- بوليه چدرا "
+
+#: src/client/game.cpp
+msgid "- Creative Mode: "
+msgstr "- مود کرياتيÙ: "
+
+#. ~ PvP = Player versus Player
+#: src/client/game.cpp
+msgid "- PvP: "
+msgstr "- PvP: "
+
+#: src/client/game.cpp
+msgid "- Public: "
+msgstr "- عوام: "
+
+#: src/client/game.cpp
+msgid "- Server Name: "
+msgstr "- نام ڤلاين: "
+
+#: src/client/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+"\n"
+"ڤريقسا ÙØ§ÙŠÙ„ debug.txt اونتوق معلومت لنجوت."
+
+#: src/client/gameui.cpp
+msgid "Chat shown"
+msgstr "سيمبڠ دتونجوقکن"
+
+#: src/client/gameui.cpp
+msgid "Chat hidden"
+msgstr "سيمبڠ دسمبوڽيکن"
+
+#: src/client/gameui.cpp
+msgid "HUD shown"
+msgstr "ڤاڤر ڤندو (HUD) دتونجوقکن"
+
+#: src/client/gameui.cpp
+msgid "HUD hidden"
+msgstr "ڤاڤر ڤندو (HUD) دسمبوڽيکن"
+
+#: src/client/gameui.cpp
+#, c-format
+msgid "Profiler shown (page %d of %d)"
+msgstr "ڤمبوکه دتونجوقکن (هلامن %d دري %d)"
+
+#: src/client/gameui.cpp
+msgid "Profiler hidden"
+msgstr "ڤمبوکه دسمبوڽيکن"
+
+#: src/client/keycode.cpp
+msgid "Left Button"
+msgstr "بوتڠ کيري"
+
+#: src/client/keycode.cpp
+msgid "Right Button"
+msgstr "بوتڠ کانن"
+
+#: src/client/keycode.cpp
+msgid "Middle Button"
+msgstr "بوتڠ تڠه"
+
+#: src/client/keycode.cpp
+msgid "X Button 1"
+msgstr "بوتڠ X نومبور 1"
+
+#: src/client/keycode.cpp
+msgid "X Button 2"
+msgstr "بوتڠ X نومبور 2"
+
+#: src/client/keycode.cpp
+msgid "Backspace"
+msgstr "Backspace"
+
+#: src/client/keycode.cpp
+msgid "Tab"
+msgstr "Tab"
+
+#: src/client/keycode.cpp
+msgid "Clear"
+msgstr "ڤادم"
+
+#: src/client/keycode.cpp
+msgid "Return"
+msgstr "Enter"
+
+#: src/client/keycode.cpp
+msgid "Shift"
+msgstr "Shift"
+
+#: src/client/keycode.cpp
+msgid "Control"
+msgstr "Ctrl"
+
+#. ~ Key name, common on Windows keyboards
+#: src/client/keycode.cpp
+msgid "Menu"
+msgstr "Menu"
+
+#: src/client/keycode.cpp
+msgid "Pause"
+msgstr "Pause"
+
+#: src/client/keycode.cpp
+msgid "Caps Lock"
+msgstr "کونچي حرو٠بسر"
+
+#: src/client/keycode.cpp
+msgid "Space"
+msgstr "سلاڠ"
+
+#: src/client/keycode.cpp
+msgid "Page up"
+msgstr "Page up"
+
+#: src/client/keycode.cpp
+msgid "Page down"
+msgstr "Page down"
+
+#: src/client/keycode.cpp
+msgid "End"
+msgstr "End"
+
+#: src/client/keycode.cpp
+msgid "Home"
+msgstr "Home"
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Left"
+msgstr "ککيري"
+
+#: src/client/keycode.cpp
+msgid "Up"
+msgstr "اتس"
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Right"
+msgstr "ککانن"
+
+#: src/client/keycode.cpp
+msgid "Down"
+msgstr "باواه"
+
+#. ~ Key name
+#: src/client/keycode.cpp
+msgid "Select"
+msgstr "Select"
+
+#. ~ "Print screen" key
+#: src/client/keycode.cpp
+msgid "Print"
+msgstr "Print Screen"
+
+#: src/client/keycode.cpp
+msgid "Execute"
+msgstr "لاکوکن"
+
+#: src/client/keycode.cpp
+msgid "Snapshot"
+msgstr "تڠکڤ ݢمبر سکرين"
+
+#: src/client/keycode.cpp
+msgid "Insert"
+msgstr "Insert"
+
+#: src/client/keycode.cpp
+msgid "Help"
+msgstr "بنتوان"
+
+#: src/client/keycode.cpp
+msgid "Left Windows"
+msgstr "Windows کيري"
+
+#: src/client/keycode.cpp
+msgid "Right Windows"
+msgstr "Windows کانن"
+
+#: src/client/keycode.cpp
+msgid "Numpad 0"
+msgstr "ڤد اڠک 0"
+
+#: src/client/keycode.cpp
+msgid "Numpad 1"
+msgstr "ڤد اڠک 1"
+
+#: src/client/keycode.cpp
+msgid "Numpad 2"
+msgstr "ڤد اڠک 2"
+
+#: src/client/keycode.cpp
+msgid "Numpad 3"
+msgstr "ڤد اڠک 3"
+
+#: src/client/keycode.cpp
+msgid "Numpad 4"
+msgstr "ڤد اڠک 4"
+
+#: src/client/keycode.cpp
+msgid "Numpad 5"
+msgstr "ڤد اڠک 5"
+
+#: src/client/keycode.cpp
+msgid "Numpad 6"
+msgstr "ڤد اڠک 6"
+
+#: src/client/keycode.cpp
+msgid "Numpad 7"
+msgstr "ڤد اڠک 7"
+
+#: src/client/keycode.cpp
+msgid "Numpad 8"
+msgstr "ڤد اڠک 8"
+
+#: src/client/keycode.cpp
+msgid "Numpad 9"
+msgstr "ڤد اڠک 9"
+
+#: src/client/keycode.cpp
+msgid "Numpad *"
+msgstr "ڤد اڠک *"
+
+#: src/client/keycode.cpp
+msgid "Numpad +"
+msgstr "ڤد اڠک +"
+
+#: src/client/keycode.cpp
+msgid "Numpad ."
+msgstr "ڤد اڠک ."
+
+#: src/client/keycode.cpp
+msgid "Numpad -"
+msgstr "ڤد اڠک -"
+
+#: src/client/keycode.cpp
+msgid "Numpad /"
+msgstr "ڤد اڠک /"
+
+#: src/client/keycode.cpp
+msgid "Num Lock"
+msgstr "کونچي اڠک"
+
+#: src/client/keycode.cpp
+msgid "Scroll Lock"
+msgstr "کونچي تاتل"
+
+#: src/client/keycode.cpp
+msgid "Left Shift"
+msgstr "Shift کيري"
+
+#: src/client/keycode.cpp
+msgid "Right Shift"
+msgstr "Shift کانن"
+
+#: src/client/keycode.cpp
+msgid "Left Control"
+msgstr "Ctrl کيري"
+
+#: src/client/keycode.cpp
+msgid "Right Control"
+msgstr "Ctrl کانن"
+
+#: src/client/keycode.cpp
+msgid "Left Menu"
+msgstr "مينو کيري"
+
+#: src/client/keycode.cpp
+msgid "Right Menu"
+msgstr "مينو کانن"
+
+#: src/client/keycode.cpp
+msgid "IME Escape"
+msgstr "IME - کلوار"
+
+#: src/client/keycode.cpp
+msgid "IME Convert"
+msgstr "IME - توکر"
+
+#: src/client/keycode.cpp
+msgid "IME Nonconvert"
+msgstr "IME - تيدقتوکر"
+
+#: src/client/keycode.cpp
+msgid "IME Accept"
+msgstr "IME - تريما"
+
+#: src/client/keycode.cpp
+msgid "IME Mode Change"
+msgstr "IME - توکر مود"
+
+#: src/client/keycode.cpp
+msgid "Apps"
+msgstr "اڤليکاسي"
+
+#: src/client/keycode.cpp
+msgid "Sleep"
+msgstr "تيدور"
+
+#: src/client/keycode.cpp
+msgid "Erase EOF"
+msgstr "ڤادم EOF"
+
+#: src/client/keycode.cpp
+msgid "Play"
+msgstr "مولا ماءين"
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Zoom"
+msgstr "زوم"
+
+#: src/client/keycode.cpp
+msgid "OEM Clear"
+msgstr "ڤادم OEM"
+
+#: src/gui/guiConfirmRegistration.cpp
+#, c-format
+msgid ""
+"You are about to join this server with the name \"%s\" for the first time.\n"
+"If you proceed, a new account using your credentials will be created on this "
+"server.\n"
+"Please retype your password and click 'Register and Join' to confirm account "
+"creation, or click 'Cancel' to abort."
+msgstr ""
+"اندا اکن سرتاءي ڤلاين دڠن نام \"%s\" اونتوق کالي ڤرتام.\n"
+"جيک اندا تروسکن⹠اکاءون بهارو دڠن معلومت اندا اکن دچيڤت دڤلاين اين.\n"
+"سيلا تايڤ سمولا کات لالوان اندا دان کليک 'Ø¯ÙØªØ± دان سرتاءي' اونتوق صحکن "
+"ڤنچيڤتاءن اکاءون⹠اتاو کليک 'باتل' اونتوق ممباتلکن."
+
+#: src/gui/guiConfirmRegistration.cpp
+msgid "Register and Join"
+msgstr "Ø¯ÙØªØ± دان سرتاءي"
+
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr "کات لالوان تيدق ڤادن!"
+
+#: src/gui/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr "تروسکن"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+"ايکتن ککونچي. (جيک مينو اين برسليرق⹠ڤادم سستڠه بندا دري ÙØ§ÙŠÙ„ minetest.conf)"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "\"Special\" = climb down"
+msgstr "\"ايستيميوا\" = ڤنجت تورون"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr "تکن دوا کالي \"لومڤت\" اونتوق منوݢول تربڠ"
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Automatic jumping"
+msgstr "لومڤت أوتوماتيک"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr "ککونچي تله دݢوناکن اونتوق Ùوڠسي لاءين"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr "تکن ککونچي"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr "کدڤن"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr "کبلاکڠ"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Special"
+msgstr "ايستيميوا"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr "لومڤت"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr "سلينڤ"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr "جاتوهکن"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr "اينÛينتوري"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Prev. item"
+msgstr "ايتم سبلومڽ"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Next item"
+msgstr "ايتم ستروسڽ"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Change camera"
+msgstr "توکر کاميرا"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle minimap"
+msgstr "توݢول ڤتا ميني"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr "توݢول تربڠ"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle pitchmove"
+msgstr "توݢول ڤرݢرقن منچورم"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr "توݢول ڤرݢرقن ڤنتس"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr "توݢول تمبوس بلوک"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Mute"
+msgstr "بيسو"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. volume"
+msgstr "ڤرلاهنکن بوڽي"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. volume"
+msgstr "کواتکن بوڽي"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Autoforward"
+msgstr "أوتوڤرݢرقن"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr "سيمبڠ"
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr "تڠکڤ لاير"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr "جارق ڤميليهن"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. range"
+msgstr "کورڠکن جارق"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. range"
+msgstr "ناءيقکن جارق"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr "کونسول"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr "ارهن"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Local command"
+msgstr "ارهن تمڤتن"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle HUD"
+msgstr "توݢول ڤاڤر ڤندو (HUD)"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle chat log"
+msgstr "توݢول لوݢ سيمبڠ"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fog"
+msgstr "توݢول کابوت"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr "کات لالوان لام"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "New Password"
+msgstr "کات لالوان بارو"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr "صحکن کات لالوان"
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Change"
+msgstr "توکر"
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr "ککواتن بوڽي: "
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Exit"
+msgstr "کلوار"
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Muted"
+msgstr "دبيسوکن"
+
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
+#: src/gui/modalMenu.cpp
+msgid "Enter "
+msgstr "ماسوقکن "
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
+#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
+msgid "LANG_CODE"
+msgstr "ms_Arab"
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr "کاولن"
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr "بينا دالم ڤماءين"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+"جيک دبوليهکن⹠اندا بوليه ملتق بلوک دکدودوقن برديري (کاکي + ارس مات).\n"
+"اين ساڠت برݢونا اڤابيلا بکرجا دڠن کوتق نود دکاوسن يڠ کچيل."
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr "تربڠ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+"ڤماءين بوليه تربڠ تنڤ ترکسن دڠن ݢراÛيتي.\n"
+"اين ممرلوکن کأيستيميواءن \"تربڠ\" دالم ڤلاين ڤرماءينن ترسبوت."
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move mode"
+msgstr "مود ڤرݢرقن ڤيچ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, makes move directions relative to the player's pitch when flying "
+"or swimming."
+msgstr ""
+"جيک دبوليهکن⹠اي ممبواتکن اره ڤرݢرقن ريلاتي٠دڠن ڤيچ ڤماءين اڤابيلا تربڠ "
+"اتاو برنڠ."
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr "ڤرݢرقن ڤنتس"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via the \"special\" key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+"برݢرق ڤنتس (دڠن ککونچي \"ايستيميوا\").\n"
+"اين ممرلوکن کأيستيميواءن \"ڤرݢرقن ڤنتس\" دالم ڤلاين ڤرماءينن ترسبوت."
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr "تمبوس بلوک"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled together with fly mode, player is able to fly through solid "
+"nodes.\n"
+"This requires the \"noclip\" privilege on the server."
+msgstr ""
+"جيک دبوليهکن برسام مود تربڠ⹠ڤماءين بوليه تربڠ منروسي نود ڤڤجل.\n"
+"اين ممرلوکن کأيستيميواءن \"تمبوس بلوک\" دالم ڤلاين ڤرماءينن ترسبوت."
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr "مود سينماتيک"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when looking around. Also called look or mouse smoothing.\n"
+"Useful for recording videos."
+msgstr ""
+"ملمبوتکن کاميرا اڤابيلا مليهت سکليليڠ. جوݢ دکنلي سباݢاي ڤلمبوتن ڤڠليهتن اتاو "
+"ڤلمبوتن تتيکوس.\n"
+"برݢونا اونتوق مراکم Ûيديو."
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr "ڤلمبوتن کاميرا"
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr "ملمبوتکن ڤموترن کاميرا. سيت سباݢاي 0 اونتوق ملومڤوهکنڽ."
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr "ڤلمبوتن کاميرا دالم مود سينماتيک"
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+"ملمبوتکن ڤموترن کاميرا دالم مود سينماتيک. سيت سباݢاي 0 اونتوق ملومڤوهکنڽ."
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr "تتيکوس سوڠسڠ"
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr "مڽوڠسڠکن ڤرݢرقن تتيکوس منݢق."
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr "کڤيکاءن تتيکوس"
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr "ڤندارب کڤيکاءن تتيکوس."
+
+#: src/settings_translation_file.cpp
+msgid "Special key for climbing/descending"
+msgstr "ککونچي اونتوق ممنجت\\منورون"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
+"down and\n"
+"descending."
+msgstr ""
+"جيک دبوليهکن⹠ککونچي \"ايستيميوا\" اکن دݢوناکن اونتوق ڤنجت کباوه دان\n"
+"تورون دالم مود تربڠ⹠مڠݢنتيکن ککونچي \"سلينڤ\"."
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr "تکن \"لومڤت\" دوا کالي اونتوق تربڠ"
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr "تکن بوتڠ \"لومڤت\" سچارا چڤت دوا کالي اونتوق منوݢول مود تربڠ."
+
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr "سنتياس تربڠ دان برݢرق ڤنتس"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
+"are\n"
+"enabled."
+msgstr ""
+"جيک دلومڤوهکن⹠ککونچي \"ايستيميوا\" اکن دݢوناکن اونتوق تربڠ لاجو\n"
+"سکيراڽ کدوا-دوا مود تربڠ دان مود ڤرݢرقن ڤنتس دبوليهکن."
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr "سلڠ ڤڠاولڠن کليک کانن"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right\n"
+"mouse button."
+msgstr ""
+"جومله ماس دالم ساءت دامبيل اونتوق ملاکوکن کليک کانن يڠ براولڠ اڤابيلا\n"
+"ڤماءين منکن بوتڠ تتيکوس کانن تنڤ ملڤسکنڽ."
+
+#: src/settings_translation_file.cpp
+msgid "Automatically jump up single-node obstacles."
+msgstr "لومڤت هالڠن ساتو-نود سچارا أوروماتيک."
+
+#: src/settings_translation_file.cpp
+msgid "Safe digging and placing"
+msgstr "ڤڠݢالين دان ڤلتقن سلامت"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prevent digging and placing from repeating when holding the mouse buttons.\n"
+"Enable this when you dig or place too often by accident."
+msgstr ""
+"منچݢه ݢالي دان ڤلتقن درڤد براولڠ کتيک تروس منکن بوتڠ تتيکوس.\n"
+"بوليهکن تتڤن اين اڤابيلا اندا ݢالي اتاو لتق سچارا تيدق سڠاج ترلالو کرڤ."
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr "اينڤوت راوق"
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr "ممبوليهکن اينڤوت ڤڠݢونا سچارا راوق (هاڽ اونتوق ڤرچوباءن)."
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr "کدڤن برتروسن"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Continuous forward movement, toggled by autoforward key.\n"
+"Press the autoforward key again or the backwards movement to disable."
+msgstr ""
+"ڤرݢرقن کدڤن برتروسن⹠دتوݢول اوليه ککونچي أوتوڤرݢرقن.\n"
+"تکن ککونچي أوتوڤرݢرقن لاݢي اتاو ڤرݢرقن کبلاکڠ اونتوق ملومڤوهکنڽ."
+
+#: src/settings_translation_file.cpp
+msgid "Touch screen threshold"
+msgstr "نيلاي امبڠ سکرين سنتوه"
+
+#: src/settings_translation_file.cpp
+msgid "The length in pixels it takes for touch screen interaction to start."
+msgstr "ڤنجڠ دالم ڤيکسيل اونتوق ممولاکن اينتراکسي سکرين سنتوه."
+
+#: src/settings_translation_file.cpp
+msgid "Fixed virtual joystick"
+msgstr "کايو بديق ماي تتڤ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Fixes the position of virtual joystick.\n"
+"If disabled, virtual joystick will center to first-touch's position."
+msgstr ""
+"(Android) منتڤکن کدودوقن کايو بديق ماي.\n"
+"جيک دلومڤوهکن⹠کدودوقن تڠه اونتوق کايو بديق ماي اکن دتنتوکن برداسرکن کدودوقن "
+"سنتوهن ڤرتام."
+
+#: src/settings_translation_file.cpp
+msgid "Virtual joystick triggers aux button"
+msgstr "کايو بديق ماي مميچو بوتڠ aux"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Use virtual joystick to trigger \"aux\" button.\n"
+"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"circle."
+msgstr ""
+"(Android) ݢوناکن کايو بديق ماي اونتوق ڤيچو بوتڠ \"aux\".\n"
+"جيک دبوليهکن⹠کايو بديق ماي جوݢ اکن منکن بوتڠ \"aux\" اڤابيلا براد دلوار "
+"بولتن اوتام."
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks"
+msgstr "ممبوليهکن کايو بديق"
+
+#: src/settings_translation_file.cpp
+msgid "Joystick ID"
+msgstr "ID کايو بديق"
+
+#: src/settings_translation_file.cpp
+msgid "The identifier of the joystick to use"
+msgstr "ڤڠنل ڤستي کايو بديق يڠ دݢوناکن"
+
+#: src/settings_translation_file.cpp
+msgid "Joystick type"
+msgstr "جنيس کايو بديق"
+
+#: src/settings_translation_file.cpp
+msgid "The type of joystick"
+msgstr "جنيس کايو بديق"
+
+#: src/settings_translation_file.cpp
+msgid "Joystick button repetition interval"
+msgstr "سلڠ ماس ڤڠاولڠن بوتڠ کايو بديق"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated events\n"
+"when holding down a joystick button combination."
+msgstr ""
+"سلڠ ماس دالم ساءت⹠دامبيل انتارا ڤريستيوا يڠ براولڠن\n"
+"اڤابيلا منکن کومبيناسي بوتڠ کايو بديق."
+
+#: src/settings_translation_file.cpp
+msgid "Joystick frustum sensitivity"
+msgstr "کڤيکاءن ÙØ±ÙˆØ³ØªÙˆÙ… کايو بديق"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The sensitivity of the joystick axes for moving the\n"
+"ingame view frustum around."
+msgstr ""
+"کڤيکاءن ڤکسي کايو بديق اونتوق مڠݢرقکن\n"
+"ÙØ±ÙˆØ³ØªÙˆÙ… ڤڠليهتن دالم ڤرماءينن."
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr "ککونچي کدڤن"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مڠݢرقکن ڤماءين کدڤن.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr "ککونچي کبلاکڠ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"Will also disable autoforward, when active.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مڠݢرقکن ڤماءين کبلاکڠ.\n"
+"جوݢ اکن ملومڤوهکن أوتوڤرݢرقن⹠اڤابيلا اکتيÙ.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr "ککونچي ککيري"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مڠݢرقکن ڤماءين ککيري.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr "ککومچي ککانن"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مڠݢرقکن ڤماءين ککانن.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr "ککونچي لومڤت"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق ملومڤت.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr "ککونچي سلينڤ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مڽلينڤ.\n"
+"جوݢ دݢوناکن اونتوق تورون باواه کتيک ممنجت دان دالم اءير جيک تتڤن "
+"aux1_descends دلومڤوهکن.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr "ککونچي اينÛينتوري"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق ممبوک اينÛينتوري.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Special key"
+msgstr "ککونچي ايستيميوا"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق برݢرق ڤنتس دالم مود ڤرݢرقن ڤنتس.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr "ککونچي سيمبڠ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق ممبوک تتيڠکڤ سيمبڠ.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr "ککونچي ارهن"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق ممبوک تتيڠکڤ سيمبڠ اونتوق مناءيڤ ارهن.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type local commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق ممبوک تتيڠکڤ سيمبڠ اونتوق مناءيڤ ارهن تمڤتن.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr "ککونچي جارق ڤميليهن"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق منوݢول جارق ڤندڠن تيادا حد.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr "ککونچي تربڠ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق منوݢول مود تربڠ.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move key"
+msgstr "ککونچي ڤرݢرقن ڤيچ"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق منوݢول مود ڤرݢرقن ڤيچ.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr "ککونچي ڤرݢرقن ڤنتس"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق منوݢول مود ڤرݢرقن ڤنتس.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr "ککونچي تمبوس بلوک"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق منوݢول مود تمبوس بلوک.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar next key"
+msgstr "ککونچي ايتم ستروسڽ دالم هوتبر"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the next item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه ايتم ستروسڽ ددالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar previous key"
+msgstr "ککونچي ايتم سبلومڽ دالم هوتبر"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the previous item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه بارڠ سبلومڽ دهوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Mute key"
+msgstr "ککونچي بيسو"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for muting the game.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق ممبيسوکن ڤرماءينن.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Inc. volume key"
+msgstr "ککونچي کواتکن بوڽي"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مڠواتکن بوڽي.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+msgstr "ککونچي ڤرلاهنکن بوڽي"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق ممڤرلاهنکن بوڽي.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr "ککونچي أوتوڤرݢرقن"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling autoforward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق منوݢول أوتوڤرݢرقن.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr "ککونچي مود سينماتيک"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق منوݢول مود سينماتيک.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr "ککونچي ڤتا ميني"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق منوݢول ڤاڤرن ڤتا ميني.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق منڠکڤ ݢمبر لاير.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr "ککونچي جاتوهکن ايتم"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق منجاتوهکن ايتم يڠ سدڠ دڤيليه.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "View zoom key"
+msgstr "ککونچي زوم ڤندڠن"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key to use view zoom when possible.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مڠݢوناکن ڤندڠن زوم اڤابيلا دبنرکن.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 1 key"
+msgstr "ککونچي سلوت هوتبر 1"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ڤرتام دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 2 key"
+msgstr "ککونچي سلوت هوتبر 2"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the second hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-2 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 3 key"
+msgstr "ککونچي سلوت هوتبر 3"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the third hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-3 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 4 key"
+msgstr "ککونچي سلوت هوتبر 4"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fourth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-4 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 5 key"
+msgstr "ککونچي سلوت هوتبر 5"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-5 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 6 key"
+msgstr "ککونچي سلوت هوتبر 6"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the sixth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-6 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 7 key"
+msgstr "ککونچي سلوت هوتبر 7"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the seventh hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-7 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 8 key"
+msgstr "ککونچي سلوت هوتبر 8"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the eighth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-8 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 9 key"
+msgstr "ککونچي سلوت هوتبر 9"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-9 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 10 key"
+msgstr "ککونچي سلوت هوتبر 10"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-10 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 11 key"
+msgstr "ککونچي سلوت هوتبر 11"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-11 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
+msgstr "ککونچي سلوت هوتبر 12"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-12 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
+msgstr "ککونچي سلوت هوتبر 13"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-13 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 14 key"
+msgstr "ککونچي سلوت هوتبر 14"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-14 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 15 key"
+msgstr "ککونچي سلوت هوتبر 15"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-15 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 16 key"
+msgstr "ککونچي سلوت هوتبر 16"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-16 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 17 key"
+msgstr "ککونچي سلوت هوتبر 17"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-17 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 18 key"
+msgstr "ککونچي سلوت هوتبر 18"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-18 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 19 key"
+msgstr "ککونچي سلوت هوتبر 19"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 19th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-19 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 20 key"
+msgstr "ککونچي سلوت هوتبر 20"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 20th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-20 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 21 key"
+msgstr "ککونچي سلوت هوتبر 21"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-21 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
+msgstr "ککونچي سلوت هوتبر 22"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-22 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 23 key"
+msgstr "ککونچي سلوت هوتبر 23"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 23rd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-23 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 24 key"
+msgstr "ککونچي سلوت هوتبر 24"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 24th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-24 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 25 key"
+msgstr "ککونچي سلوت هوتبر 25"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 25th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-25 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 26 key"
+msgstr "ککونچي سلوت هوتبر 26"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 26th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-26 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 27 key"
+msgstr "ککونچي سلوت هوتبر 27"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 27th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-27 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 28 key"
+msgstr "ککونچي سلوت هوتبر 28"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 28th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-28 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 29 key"
+msgstr "ککونچي سلوت هوتبر 29"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 29th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-29 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 30 key"
+msgstr "ککونچي سلوت هوتبر 30"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 30th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-30 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 31 key"
+msgstr "ککونچي سلوت هوتبر 31"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 31st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-31 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 32 key"
+msgstr "ککونچي سلوت هوتبر 32"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 32nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق مميليه سلوت ک-32 دالم هوتبر.\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr "ککونچي منوݢول ڤاڤر ڤندو (HUD)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+"ککونچي اونتوق منوݢول ڤاڤر ڤندو (HUD).\n"
+"ليهت http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large chat console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the large chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camera update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable vertex buffer objects.\n"
+"This should greatly improve graphics performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Digging particles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Adds particles when digging a node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Use mip mapping to scale textures. May slightly increase performance,\n"
+"especially when using a high resolution texture pack.\n"
+"Gamma correct downscaling is not supported."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled.\n"
+"This is also used as the base node texture size for world-aligned\n"
+"texture autoscaling."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Undersampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Undersampling is similar to using a lower screen resolution, but it applies\n"
+"to the game world only, keeping the GUI intact.\n"
+"It should give a significant performance boost at the cost of less detailed "
+"image.\n"
+"Higher values result in a less detailed image."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visual effects and may increase performance on some "
+"video\n"
+"cards.\n"
+"This only works with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shader path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to shader directory. If no path is defined, default location will be "
+"used."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
+"Simulates the tone curve of photographic film and how this approximates the\n"
+"appearance of high dynamic range images. Mid-range contrast is slightly\n"
+"enhanced, highlights and shadows are gradually compressed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables bumpmapping for textures. Normalmaps need to be supplied by the "
+"texture pack\n"
+"or need to be auto-generated.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps sampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The maximum height of the surface of waving liquids.\n"
+"4.0 = Wave height is two nodes.\n"
+"0.0 = Wave doesn't move at all.\n"
+"Default is 1.0 (1/2 node).\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wavelength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How fast liquid waves will move. Higher = faster.\n"
+"If negative, liquid waves will move backwards.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pause on lost window focus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Open the pause menu when the window's focus is lost. Does not pause if a "
+"formspec is\n"
+"open."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View distance in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Near plane"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n"
+"Only works on GLES platforms. Most users will not need to change this.\n"
+"Increasing can reduce artifacting on weaker GPUs.\n"
+"0.1 = Default, 0.25 = Good value for weaker tablets."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autosave screen size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save window size automatically when modified."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VSync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Alters the light curve by applying 'gamma correction' to it.\n"
+"Higher values make middle and lower light levels brighter.\n"
+"Value '1.0' leaves the light curve unaltered.\n"
+"This only has significant effect on daylight and artificial\n"
+"light, it has very little effect on natural night light."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve low gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve high gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at maximum light level.\n"
+"Controls the contrast of the highest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Strength of light curve boost.\n"
+"The 3 'boost' parameters define a range of the light\n"
+"curve that is boosted in brightness."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost center"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Center of light curve boost range.\n"
+"Where 0.0 is minimum light level, 1.0 is maximum light level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost spread"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread of light curve boost range.\n"
+"Controls the width of the range to be boosted.\n"
+"Standard deviation of the light curve boost Gaussian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The rendering back-end for Irrlicht.\n"
+"A restart is required after changing this.\n"
+"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
+"otherwise.\n"
+"On other platforms, OpenGL is recommended, and it’s the only driver with\n"
+"shader support currently."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable view bobbing and amount of view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D support.\n"
+"Currently supported:\n"
+"- none: no 3d output.\n"
+"- anaglyph: cyan/magenta color 3d.\n"
+"- interlaced: odd/even line based polarisation screen support.\n"
+"- topbottom: split screen top/bottom.\n"
+"- sidebyside: split screen side by side.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer based 3d.\n"
+"Note that the interlaced mode requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selection box lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Recent Chat Messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of recent chat messages to show"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scale factor"
+msgstr "Ùکتور سکالا ڤاڤر ڤندو (HUD)"
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the hudbar elements."
+msgstr "مڠاوبه سايز ايليمن ڤالڠ ڤاڤر ڤندو (hudbar)."
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generation delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Delay between mesh updates on the client in ms. Increasing this will slow\n"
+"down the rate of mesh updates, thus reducing jitter on slower clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of the MapBlock cache of the mesh generator. Increasing this will\n"
+"increase the cache hit %, reducing the data being copied from the main\n"
+"thread, thus reducing jitter."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Usable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog start"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fraction of the visible distance at which fog starts to be rendered"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Opaque liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes all liquids opaque"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World-aligned textures mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Textures on a node may be aligned either to the node or to the world.\n"
+"The former mode suits better things like machines, furniture, etc., while\n"
+"the latter makes stairs and microblocks fit surroundings better.\n"
+"However, as this possibility is new, thus may not be used by older servers,\n"
+"this option allows enforcing it for certain node types. Note though that\n"
+"that is considered EXPERIMENTAL and may not work properly."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autoscaling mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World-aligned textures may be scaled to span several nodes. However,\n"
+"the server may not send the scale you want, especially if you use\n"
+"a specially-designed texture pack; with this option, the client tries\n"
+"to determine the scale automatically basing on the texture size.\n"
+"See also texture_min_size.\n"
+"Warning: This option is EXPERIMENTAL!"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale GUI by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"properly support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name to tooltip."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FreeType fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether FreeType fonts are used, requires FreeType support to be compiled "
+"in.\n"
+"If disabled, bitmap and XML vectors fonts are used instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font bold by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font italic by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the default font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Regular font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the default font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"The fallback font will be used if the font cannot be loaded."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the monospace font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the monospace font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font is used for e.g. the console and profiler screen."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the fallback font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
+"be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path of the fallback font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font will be used for certain languages or if the default font is "
+"unavailable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Screenshot quality. Only used for JPEG format.\n"
+"1 means worst quality; 100 means best quality.\n"
+"Use 0 for default quality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Windows systems only: Start Minetest with the command line window in the "
+"background.\n"
+"Contains the same information as the file debug.txt (default name)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables the sound system.\n"
+"If disabled, this completely disables all sounds everywhere and the in-game\n"
+"sound controls will be non-functional.\n"
+"Changing this setting requires a restart."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to mute sounds. You can unmute sounds at any time, unless the\n"
+"sound system is disabled (enable_sound=false).\n"
+"In-game, you can toggle the mute state with the mute key or by using the\n"
+"pause menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Address to connect to.\n"
+"Leave this blank to start a local server.\n"
+"Note that the address field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Port to connect to (UDP).\n"
+"Note that the port field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the\n"
+"Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum size of the out chat queue"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum size of the out chat queue.\n"
+"0 to disable queueing and -1 to make the queue size unlimited."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable register confirmation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable register confirmation when connecting to server.\n"
+"If disabled, new account will be registered automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce to this serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strip color codes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Remove color codes from incoming chat messages\n"
+"Use this to stop players from being able to use color in their messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server.\n"
+"Ignored if bind_address is set.\n"
+"Needs enable_ipv6 to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneous block sends per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks that are simultaneously sent per client.\n"
+"The maximum total count is calculated dynamically:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay in sending blocks after building"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can be connected simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Creative"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for new created maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod channels"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod channels support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes).\n"
+"\n"
+"Setting this larger than active_block_range will also cause the server\n"
+"to maintain active objects up to this distance in the direction the\n"
+"player is looking. (This can avoid mobs suddenly disappearing from view)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The radius of the volume of blocks around every player that is subject to "
+"the\n"
+"active block stuff, stated in mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run.\n"
+"This is also the minimum range in which active objects (mobs) are "
+"maintained.\n"
+"This should be configured together with active_object_send_range_blocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World start time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time of day when a new world is started, in millihours (0-23999)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message max length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Set the maximum character length of a chat message sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message count limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amount of messages a player may send per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message kick threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking and flying speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical climbing speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Initial vertical speed when jumping, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sinking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls sinking speed in liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration of gravity, in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated Lua API calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over\n"
+"network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ABM interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, invalid world data won't cause the server to shut down.\n"
+"Only enable this if you know what you are doing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Block send optimize distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"At this distance the server will aggressively optimize which blocks are sent "
+"to\n"
+"clients.\n"
+"Small values potentially improve performance a lot, at the expense of "
+"visible\n"
+"rendering glitches (some blocks will not be rendered under water and in "
+"caves,\n"
+"as well as sometimes on land).\n"
+"Setting this to a value greater than max_block_send_distance disables this\n"
+"optimization.\n"
+"Stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server side occlusion culling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled the server will perform map block occlusion culling based on\n"
+"on the eye position of the player. This can reduce the number of blocks\n"
+"sent to the client 50-80%. The client will not longer receive most "
+"invisible\n"
+"so that the utility of noclip mode is reduced."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Restricts the access of certain client-side functions on servers.\n"
+"Combine the byteflags below to restrict client-side features, or set to 0\n"
+"for no restrictions:\n"
+"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n"
+"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n"
+"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n"
+"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n"
+"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side node lookup range restriction"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the CSM restriction for node range is enabled, get_node calls are "
+"limited\n"
+"to this distance from the player to the node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Load the game profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Load the game profiler to collect game profiling data.\n"
+"Provides a /profiler command to access the compiled profile.\n"
+"Useful for mod developers and server operators."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default report format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Report path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The file path relative to your worldpath in which profiles will be saved to."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrumentation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Active Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Loading Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chatcommands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument chatcommands on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Global callbacks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Builtin"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Have the profiler instrument itself:\n"
+"* Instrument an empty function.\n"
+"This estimates the overhead, that instrumentation is adding (+1 function "
+"call).\n"
+"* Instrument the sampler being used to update the statistics."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Level of logging to be written to debug.txt:\n"
+"- <nothing> (no logging)\n"
+"- none (messages with no level)\n"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log file size threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the file size of debug.txt exceeds the number of megabytes specified in\n"
+"this setting when it is opened, the file is moved to debug.txt.1,\n"
+"deleting an older debug.txt.1 if it exists.\n"
+"debug.txt is only moved if this setting is positive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable IPv6 support (for both client and server).\n"
+"Required for IPv6 connections to work at all."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+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 ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Print the engine's profiling data in regular intervals (in seconds).\n"
+"0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this.\n"
+"Current mapgens in a highly unstable state:\n"
+"- The optional floatlands of v7 (disabled by default)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
+"Only mapchunks completely within the mapgen limit are generated.\n"
+"Value is stored per-world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome API temperature and humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Temperature variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale temperature variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale humidity variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen v5."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls width of tunnels, a smaller value creates wider tunnels.\n"
+"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
+"intensive noise calculations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave proportion flooded"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of cavern upper limit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern taper"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-distance over which caverns expand to full size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines full size of caverns, smaller values create larger caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of biome filler depth."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Factor noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise that determines number of dungeons per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"The 'snowbiomes' flag enables the new 5 biome system.\n"
+"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
+"the 'jungles' flag is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desert noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Deserts occur when np_biome exceeds this value.\n"
+"When the 'snowbiomes' flag is enabled, this is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sandy beaches occur when np_beach exceeds this value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain base noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of lower terrain and seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain higher noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of higher terrain that creates cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Steepness noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height select noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mud noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies depth of biome surface nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas with sandy beaches."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of number of caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines tree areas and tree density."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Apple trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas where trees have apples."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain zero level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain alternative noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain persistence noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of maximum mountain height (in nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge underwater noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines large-scale river channel structure."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen Carpathian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the base ground level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the depth of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River valley width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river valley."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness3 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Third of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness4 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hills spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hill size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridged mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of ridged mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of step mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that locates the river valleys and channels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain variation noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Flat.\n"
+"Occasional lakes and hills can be added to the flat world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for lakes.\n"
+"Controls proportion of world area covered by lakes.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for hills.\n"
+"Controls proportion of world area covered by hills.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines location and terrain of optional hills and lakes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Fractal.\n"
+"'terrain' enables the generation of non-fractal terrain:\n"
+"ocean, islands and underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fractal type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Selects one of 18 fractal types.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Increasing this increases the amount of fine detail, but also\n"
+"increases processing load.\n"
+"At iterations = 20 this mapgen has a similar load to mapgen V7."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) scale of fractal in nodes.\n"
+"Actual fractal size will be 2 to 3 times larger.\n"
+"These numbers can be made very large, the fractal does\n"
+"not have to fit inside the world.\n"
+"Increase these to 'zoom' into the detail of the fractal.\n"
+"Default is for a vertically-squashed shape suitable for\n"
+"an island, set all 3 numbers equal for the raw shape."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Can be used to move a desired point to (0, 0) to create a\n"
+"suitable spawn point, or to allow 'zooming in' on a desired\n"
+"point by increasing 'scale'.\n"
+"The default is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W coordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"X component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Y component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Z component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"W component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Seabed noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill': Reduces heat with altitude.\n"
+"'humid_rivers': Increases humidity around rivers.\n"
+"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n"
+"to become shallower and occasionally dry.\n"
+"'altitude_dry': Reduces humidity with altitude."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
+"enabled. Also the vertical distance over which humidity drops by 10 if\n"
+"'altitude_dry' is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern upper limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other biome filler node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley profile"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley slope"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n"
+"WARNING!: There is no benefit, and there are several dangers, in\n"
+"increasing this value above 5.\n"
+"Reducing this value increases cave and dungeon density.\n"
+"Altering this value is for special usage, leaving it unchanged is\n"
+"recommended."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug information."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of queued blocks to emerge"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use.\n"
+"Value 0:\n"
+"- Automatic selection. The number of emerge threads will be\n"
+"- 'number of processors - 2', with a lower limit of 1.\n"
+"Any other value:\n"
+"- Specifies the number of emerge threads, with a lower limit of 1.\n"
+"WARNING: Increasing the number of emerge threads increases engine mapgen\n"
+"speed, but this may harm game performance by interfering with other\n"
+"processes, especially in singleplayer and/or when running Lua code in\n"
+"'on_generated'. For many users the optimum setting may be '1'."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Online Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The URL for the content repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Flag Blacklist"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of flags to hide in the content repository.\n"
+"\"nonfree\" can be used to hide packages which do not qualify as 'free "
+"software',\n"
+"as defined by the Free Software Foundation.\n"
+"You can also specify content ratings.\n"
+"These flags are independent from Minetest versions,\n"
+"so see a full list at https://content.minetest.net/help/content_flags/"
+msgstr ""
diff --git a/po/my/minetest.po b/po/my/minetest.po
index 242c9a5b4..549653ac5 100644
--- a/po/my/minetest.po
+++ b/po/my/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Burmese (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: 2020-01-11 18:26+0000\n"
"Last-Translator: rubenwardy <rubenwardy@gmail.com>\n"
"Language-Team: Burmese <https://hosted.weblate.org/projects/minetest/"
@@ -22,6 +22,10 @@ msgstr ""
msgid "You died"
msgstr ""
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr ""
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr ""
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr ""
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr ""
@@ -111,6 +111,10 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr ""
@@ -156,15 +160,15 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
+msgid "Back to Main Menu"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back to Main Menu"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
+msgid "Downloading..."
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
@@ -210,15 +214,51 @@ msgstr ""
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
@@ -226,25 +266,143 @@ msgstr ""
msgid "Download one from minetest.net"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -395,14 +553,25 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -544,6 +713,10 @@ msgid "Host Server"
msgstr ""
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr ""
@@ -611,6 +784,7 @@ msgstr ""
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
@@ -855,6 +1029,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -889,6 +1071,7 @@ msgstr ""
msgid "- Public: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1161,6 +1344,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1192,7 +1383,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1313,6 +1504,7 @@ msgstr ""
msgid "Left Windows"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1405,6 +1597,7 @@ msgstr ""
msgid "Play"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1441,6 +1634,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
@@ -1675,10 +1869,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "my"
@@ -1762,6 +1961,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1772,6 +1975,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1820,7 +2031,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1865,6 +2076,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1878,10 +2099,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2052,8 +2269,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2131,10 +2348,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2400,6 +2625,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2708,6 +2937,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2817,6 +3056,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2870,6 +3137,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4165,14 +4438,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4236,6 +4501,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4302,7 +4571,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4390,10 +4661,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4461,13 +4728,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4552,6 +4819,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4658,7 +4929,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4710,9 +4981,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4789,10 +5057,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4802,7 +5066,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4836,6 +5102,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4904,6 +5178,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5342,6 +5628,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5364,6 +5657,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5375,15 +5672,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5500,7 +5807,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5653,6 +5960,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -5972,6 +6283,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
diff --git a/po/nb/minetest.po b/po/nb/minetest.po
index 6cc5a6381..ed5bab6db 100644
--- a/po/nb/minetest.po
+++ b/po/nb/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Norwegian Bokmål (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-12-11 13:36+0000\n"
-"Last-Translator: Petter Reinholdtsen <pere-weblate@hungry.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-18 13:41+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/"
"minetest/minetest/nb_NO/>\n"
"Language: nb\n"
@@ -12,20 +12,23 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.10-dev\n"
+"X-Generator: Weblate 4.1.1-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
-msgstr "Respawn"
+msgstr "Gjenoppstå"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
msgstr "Du døde"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "Det oppstod en feil i et Lua-skriptet, for eksempel i en mod:"
+msgstr "Det oppstod en feil i et Lua-skript:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -36,10 +39,6 @@ msgid "Main menu"
msgstr "Hovedmeny"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Okei"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Koble til på nytt"
@@ -112,26 +111,28 @@ msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
-"Kunne ikke aktivere mod \"$1\" fordi den inneholder ugyldige tegn. Kun "
+"Kunne ikke aktivere modden «$1» fordi den inneholder ugyldige tegn. Kun "
"tegnene [a-z0-9_] er tillatt."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No (optional) dependencies"
-msgstr "Valgfrie avhengigheter:"
+msgstr "Kan gjerne bruke"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
msgstr "Mangler spillbeskrivelse."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "Ingen avhengigheter."
+msgstr "Krever ingen andre modder"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
@@ -164,16 +165,17 @@ msgid "All packages"
msgstr "Alle pakker"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Tilbake"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Tilbake til hovedmeny"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Laster ned og installerer $1, vent…"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "Laster..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -218,15 +220,57 @@ msgstr "Avinstaller"
msgid "Update"
msgstr "Oppdater"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "En verden med navn \"$1\" eksisterer allerede"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Temperaturen synker med stigende høyde"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Temperaturen synker med stigende høyde"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Biotoplyd"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Biotoplyd"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Grottelyd"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Oktaver"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Opprett"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Informasjon:"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Last ned et spill, for eksempel Minetest Game, fra minetest.net"
@@ -234,25 +278,149 @@ msgstr "Last ned et spill, for eksempel Minetest Game, fra minetest.net"
msgid "Download one from minetest.net"
msgstr "Last ned en fra minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Grottelyd"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Spill"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "Videodriver"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Mapgen"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Mapgen"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Intet spill valgt"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Elvestørrelse"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Seed"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Elvedybde"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Advarsel: Den minimale utviklingstesten er tiltenkt utviklere."
#: builtin/mainmenu/dlg_create_world.lua
@@ -343,7 +511,7 @@ msgstr "Forskyvning"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Persistance"
-msgstr "Utholdenhet"
+msgstr "Bestandighet"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
@@ -405,17 +573,28 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z-spredning"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "Absoluttverdi"
+#. ~ "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 "Forvalg"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr "lettet"
+msgstr "myknet"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
@@ -462,8 +641,9 @@ msgid "Unable to install a mod as a $1"
msgstr "Klarte ikke å installere mod som en $1"
#: builtin/mainmenu/pkgmgr.lua
+#, fuzzy
msgid "Unable to install a modpack as a $1"
-msgstr "Klarte ikke å installere en modpack som $2"
+msgstr "Klarte ikke å installere en modpakke som $1"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
@@ -554,6 +734,10 @@ msgid "Host Server"
msgstr "Vertstjener"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Navn/passord"
@@ -621,9 +805,10 @@ msgstr "Navn / passord"
msgid "Ping"
msgstr "Latens"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
-msgstr "Spiller mot spiller aktivert"
+msgstr "Alle mot alle er på"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -663,7 +848,7 @@ msgstr "Bilineært filter"
#: builtin/mainmenu/tab_settings.lua
msgid "Bump Mapping"
-msgstr ""
+msgstr "Teksturtilføyning"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
@@ -683,11 +868,11 @@ msgstr "Generer normale kart"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr ""
+msgstr "Mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr "Mipkart + Aniso. filter"
+msgstr "Mipmap + anisotropisk filter"
#: builtin/mainmenu/tab_settings.lua
msgid "No"
@@ -699,7 +884,7 @@ msgstr "Inget filter"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
-msgstr "Intet Mipkart"
+msgstr "Mangler mipmap"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
@@ -747,7 +932,7 @@ msgstr "Skygger"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "Skyggelegging (ikke tilgjenglig)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -763,11 +948,11 @@ msgstr "Teksturering:"
#: builtin/mainmenu/tab_settings.lua
msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
+msgstr "For å skru på skyggeleging, må man bruke OpenGL-driveren."
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
-msgstr ""
+msgstr "Nyanseoversettelse (tone mapping)"
#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold: (px)"
@@ -782,9 +967,8 @@ msgid "Waving Leaves"
msgstr "Bølgende blader"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Liquids"
-msgstr "Bølgende blader"
+msgstr "Skvulpende væsker"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
@@ -836,7 +1020,7 @@ msgstr "Tilkoblingsfeil (tidsavbrudd?)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
-msgstr "Kunne ikke finne eller laste spill \""
+msgstr "Klarte ikke finne eller laste inn spill «"
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -848,7 +1032,7 @@ msgstr "Hovedmeny"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr "Intet å gjøre. Ingen verden valgt og ingen adresse oppgitt."
+msgstr "Intet å gjøre. Ingen verden valgt og ingen adresse oppgitt."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
@@ -866,6 +1050,14 @@ msgstr "Passordfilen kunne ikke åpnes: "
msgid "Provided world path doesn't exist: "
msgstr "Angitt sti til verdenen finnes ikke: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -902,9 +1094,10 @@ msgstr "- Port: "
msgid "- Public: "
msgstr "- Offentlig: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr "- PvP: "
+msgstr "- Alle mot alle (PvP): "
#: src/client/game.cpp
msgid "- Server Name: "
@@ -993,11 +1186,11 @@ msgstr "Oppretter tjener…"
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr ""
+msgstr "Skjuler feilsøkingsinfo og profilgraf"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr ""
+msgstr "Viser feilsøkingsinfo"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
@@ -1018,6 +1211,18 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
+"Standardstyring:\n"
+"Ved ingen synlig meny:\n"
+"- enkel berøring: knapp aktiveres\n"
+"- dobbel berøring: legg på plass/bruke\n"
+"- glidende berøring: se rundt deg\n"
+"Meny/beholdning synlig:\n"
+"- dobbel berøring (ute):\n"
+" -->lukk\n"
+"- berør stabel, berør spor:\n"
+" --> flytt stabel\n"
+"- berør&trekk, berør med den andre fingeren\n"
+" --> legg én enkelt gjenstand i spor\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
@@ -1036,42 +1241,36 @@ msgid "Exit to OS"
msgstr "Avslutt til operativsystem"
#: src/client/game.cpp
-#, fuzzy
msgid "Fast mode disabled"
-msgstr "Deaktiver Alle"
+msgstr "Rask forflytning av"
#: src/client/game.cpp
-#, fuzzy
msgid "Fast mode enabled"
-msgstr "Skade aktivert"
+msgstr "Rask forflytning på"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
msgstr ""
#: src/client/game.cpp
-#, fuzzy
msgid "Fly mode disabled"
-msgstr "Deaktiver Alle"
+msgstr "Flymodus av"
#: src/client/game.cpp
-#, fuzzy
msgid "Fly mode enabled"
-msgstr "Skade aktivert"
+msgstr "Flymodus på"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
msgstr ""
#: src/client/game.cpp
-#, fuzzy
msgid "Fog disabled"
-msgstr "Deaktiver Alle"
+msgstr "TÃ¥ke av"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog enabled"
-msgstr "aktivert"
+msgstr "Tåke på"
#: src/client/game.cpp
msgid "Game info:"
@@ -1107,7 +1306,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Minimap hidden"
-msgstr ""
+msgstr "Skjuler minikart"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x1"
@@ -1138,9 +1337,8 @@ msgid "Noclip mode disabled"
msgstr ""
#: src/client/game.cpp
-#, fuzzy
msgid "Noclip mode enabled"
-msgstr "Skade aktivert"
+msgstr "Kan gå gjennom vegger"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
@@ -1148,7 +1346,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Node definitions..."
-msgstr ""
+msgstr "Blokkdefinisjoner..."
#: src/client/game.cpp
msgid "Off"
@@ -1191,14 +1389,20 @@ msgid "Sound Volume"
msgstr "Lydstyrke"
#: src/client/game.cpp
-#, fuzzy
msgid "Sound muted"
-msgstr "Lydstyrke"
+msgstr "Lyd av"
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
#: src/client/game.cpp
-#, fuzzy
msgid "Sound unmuted"
-msgstr "Lydstyrke"
+msgstr "Lyd på"
#: src/client/game.cpp
#, c-format
@@ -1228,18 +1432,17 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "ok"
#: src/client/gameui.cpp
-#, fuzzy
msgid "Chat hidden"
-msgstr "Skydretast"
+msgstr "Chat skjult"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "Viser chat"
#: src/client/gameui.cpp
msgid "HUD hidden"
@@ -1263,9 +1466,8 @@ msgid "Apps"
msgstr "Programmer"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Backspace"
-msgstr "Tilbake"
+msgstr "Tilbaketast"
#: src/client/keycode.cpp
msgid "Caps Lock"
@@ -1351,6 +1553,7 @@ msgstr "Venstre Shift"
msgid "Left Windows"
msgstr "Venstre Super"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Meny"
@@ -1425,15 +1628,15 @@ msgstr "Numpad 9"
#: src/client/keycode.cpp
msgid "OEM Clear"
-msgstr ""
+msgstr "Tøm OEM"
#: 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"
@@ -1443,6 +1646,7 @@ msgstr "Pause"
msgid "Play"
msgstr "Spill"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Skriv ut"
@@ -1479,6 +1683,7 @@ msgstr "Høyre Super"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Velg"
@@ -1536,6 +1741,11 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
+"Dette er første gang du kobler deg til serveren «\"%s».\n"
+"Om du fortsetter, vil det opprettes en ny konto med ditt navn og passord på "
+"denne serveren.\n"
+"Vennligst skriv inn et passord og klikk på «Registrer meg og bli med» for å "
+"bekrefte opprettelse av konto, eller klikk « Avbryt» for å avbryte."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
@@ -1547,9 +1757,8 @@ msgid "\"Special\" = climb down"
msgstr "«bruk» = klatre ned"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Autoforward"
-msgstr "Framover"
+msgstr "Automatisk fremover"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
@@ -1560,13 +1769,12 @@ msgid "Backward"
msgstr "Tilbake"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Change camera"
-msgstr "Endre taster"
+msgstr "Endre visning"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
-msgstr "Sludre"
+msgstr "Chatte"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Command"
@@ -1578,7 +1786,7 @@ msgstr "Konsoll"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
-msgstr ""
+msgstr "Senk siktavstanden"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
@@ -1598,7 +1806,7 @@ msgstr "Framover"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
-msgstr ""
+msgstr "Øk siktavstanden"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
@@ -1632,11 +1840,11 @@ msgstr "Demp"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Next item"
-msgstr "Neste element"
+msgstr "Neste gjenstand"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
-msgstr "Forrige element"
+msgstr "Forrige gjenstand"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Range select"
@@ -1644,51 +1852,47 @@ msgstr "Velg rekkevidde"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr "Skjermavbildning"
+msgstr "Skjermdump"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
-msgstr "Snik"
+msgstr "Snike"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Special"
msgstr "Spesial"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
-msgstr ""
+msgstr "HUD (hurtigtilgang) av/på"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr ""
+msgstr "Chattehistorikk av/på"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
-msgstr ""
+msgstr "Rask forflytning av/på"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fly"
-msgstr ""
+msgstr "Flymodus av/på"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle fog"
-msgstr "Farget tåke"
+msgstr "Tåke av/på"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle minimap"
-msgstr "Aktiverer minikart."
+msgstr "Minikart av/på"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr ""
+msgstr "Gjennomtrengelige blokker av/på"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
-msgstr "Farget tåke"
+msgstr "Pitchbevegelse (lateralaksevinkel) av/på"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -1715,18 +1919,22 @@ msgid "Exit"
msgstr "Avslutt"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy
msgid "Muted"
-msgstr "Demp"
+msgstr "Av"
#: src/gui/guiVolumeChange.cpp
msgid "Sound Volume: "
msgstr "Lydstyrke: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Enter "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "nb"
@@ -1751,6 +1959,7 @@ msgstr ""
"utenfor hovedsirkelen."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1761,6 +1970,15 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Kan benyttes for å flytte et ønsket punkt til (0, 0) for å opprette et\n"
+"passende gjenoppstandelsespunkt, eller for å tillate 'zooming in' on a "
+"desired\n"
+"point ved å øke 'scale'.\n"
+"Standardverdien is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
#: src/settings_translation_file.cpp
msgid ""
@@ -1772,6 +1990,13 @@ 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)-skalering for fraktal i blokker.\n"
+"Faktisk fraktalstørrelse blir to til tre ganger større.\n"
+"Man kan angi veldig store tall; fraktalen\n"
+"behøver ikke passe inn i verdenen.\n"
+"Øk disse tallene for å oppskalere på fraktalens detaljer.\n"
+"Standardverdien gir en form som er sammenpresset\n"
+"i høyden og egner seg til øy. Angi tre like tall for grunnformen."
#: src/settings_translation_file.cpp
msgid ""
@@ -1781,31 +2006,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr ""
+msgstr "2D-støytall som styrer form og størrelse på høydedrag."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "2D-støytall som styrer form og størrelse på bakkelandskap."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "2D-støytall som styrer form og størrelse på trinnvise fjell."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
-msgstr ""
+msgstr "2D-støytall som styrer fjellkjedestørrelse og -forekomst."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "2D-støytall som styrer størrelse og forekomst av bakkelandskap."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr ""
+msgstr "2D-støytall som styrer størrelse og forekomst av trinnfjellkjeder."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "2D-støytall som plasserer elvedaler og elveleier."
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -1816,30 +2041,45 @@ msgid "3D mode"
msgstr "3D-modus"
#: src/settings_translation_file.cpp
-msgid "3D noise defining giant caverns."
+msgid "3D mode parallax strength"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr "3D-støytall som definerer kjempegrotter."
+
+#: src/settings_translation_file.cpp
msgid ""
"3D noise defining mountain structure and height.\n"
"Also defines structure of floatland mountain terrain."
msgstr ""
+"3D-støytall som definerer fjellstruktur og -høyde.\n"
+"Definerer også fjellterrengstruktur på luftøyer."
#: src/settings_translation_file.cpp
-msgid "3D noise defining structure of river canyon walls."
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr "3D-støytall som definerer strukturen til sidene i en elvekløft."
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining terrain."
-msgstr ""
+msgstr "3D-støytall som definerer terrenget."
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
msgstr ""
+"3D-støytall for fjelloverheng, klipper o. l. Vanligvis små variasjoner."
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "3D-støytall som avgjør antall grotter per kartchunk."
#: src/settings_translation_file.cpp
msgid ""
@@ -1854,28 +2094,40 @@ msgid ""
"- pageflip: quadbuffer based 3d.\n"
"Note that the interlaced mode requires shaders to be enabled."
msgstr ""
+"3D-støtte.\n"
+"For øyeblikket støttes følgende alternativer:\n"
+"- none: Ingen 3D-utdata.\n"
+"- anaglyph: Cyan/magenta farge-3D.\n"
+"- interlaced: Skjermstøtte for partall/oddetall-linjebasert "
+"polarisering.\n"
+"- topbottom: Del skjermen i topp og bunn.\n"
+"- sidebyside: Del skjermen side om side.\n"
+"- crossview: Skjele-3d\n"
+"- pageflip: Quadbuffer-basert 3d.\n"
+"Vær klar over at interlace-modus krever at skyggelegging er påslått."
#: 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 ""
+"Velg genereringsfrø for en ny verden. La det stå tomt for et tilfeldig et.\n"
+"Blir erstattet når man oppretter en ny verden i hovedmenyen."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr ""
+msgstr "Melding som vises til alle klienter når serveren krasjer."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
-msgstr "En melding å vise alle klienter når tjeneren slås av."
+msgstr "Melding som vises alle klienter når serveren slås av."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ABM interval"
msgstr "ABM-intervall"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1884,11 +2136,11 @@ msgstr "Akselerasjon i luft"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr ""
+msgstr "Tyngdeakselerasjon, i blokker per sekund per sekund (b/s^2)."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
-msgstr ""
+msgstr "Aktive blokkendrere (ABM)"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -1897,11 +2149,11 @@ msgstr "Aktiv blokkeringsrekkevidde"
#: src/settings_translation_file.cpp
msgid "Active block range"
-msgstr "Aktiv blokkeringsrekkevidde"
+msgstr "Rekkevidde for aktive blokker"
#: src/settings_translation_file.cpp
msgid "Active object send range"
-msgstr ""
+msgstr "Område for sending av aktive objekt"
#: src/settings_translation_file.cpp
msgid ""
@@ -1909,16 +2161,32 @@ msgid ""
"Leave this blank to start a local server.\n"
"Note that the address field in the main menu overrides this setting."
msgstr ""
+"Kobler til denne adressen.\n"
+"La det stå tomt for å starte en lokal server.\n"
+"Vær klar over at adressen i feltet i hovedmenyen overkjører denne "
+"innstillingen."
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
-msgstr "Legger til partikler når en node graves."
+msgstr "Legger på partikler når man graver ut en blokk."
#: src/settings_translation_file.cpp
msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
+"Justér skjermens DPI-innstilling (ikke for X11/kun Android), f. eks. for 4k-"
+"skjermer."
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -1932,14 +2200,15 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
+"Endrer lyskurven ved å bruke gammakurven (gamma-korreksjon) .\n"
+"Høye verdier gjør middels og lave lysnivåer lysere.\n"
+"Verdien «1.0» gir ingen endring i lyskurven.\n"
+"Dette har reell betydning kun for dagslys og kunstig\n"
+"belysning - det har lite å si for naturlig nattelys."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
-msgstr ""
+msgstr "Alltid flymodus og rask forflytning"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -1947,11 +2216,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "Antall meldinger en spiller kan sende hvert 10. sekund."
#: src/settings_translation_file.cpp
msgid "Amplifies the valleys."
-msgstr ""
+msgstr "Forsterker daler."
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
@@ -1959,38 +2228,39 @@ msgstr "Antisotropisk filtrering"
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr "Annonser tjener"
+msgstr "Offentliggjør server"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Announce to this serverlist."
-msgstr "Annonser tjener"
+msgstr "Offentliggjør for denne serverlisten."
#: src/settings_translation_file.cpp
msgid "Append item name"
-msgstr ""
+msgstr "Legg til elementnavn"
#: src/settings_translation_file.cpp
msgid "Append item name to tooltip."
-msgstr ""
+msgstr "Legg elementnavn til infoboble."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
-msgstr ""
+msgstr "Støytall for epletrær"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
-msgstr ""
+msgstr "Treghet i armer"
#: src/settings_translation_file.cpp
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
+"Å gi armene treghet fører til en mer virkelighetsnær\n"
+"bevegelse av armene når kameraet flytter seg."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
-msgstr "Spør om gjentilkobling etter kræsj"
+msgstr "Spør om å koble til igjen etter kræsj"
#: src/settings_translation_file.cpp
msgid ""
@@ -2006,20 +2276,26 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
+"På denne avstanden vil serveren utføre en kraftig optimalisering\n"
+"av hvilke blokker som sendes til klienten.\n"
+"En lav verdi kan potensielt føre til en kraftig forbedring i ytelsen, \n"
+"på bekostning av synlige gjengivelsesfeil (det kan skje at blokker ikke\n"
+"gjengis under vann og i huler, tidvis heller ikke på land).\n"
+"Angi denne verdien til høyere enn max_block_send_distance\n"
+"for å slå av denne optimaliseringen.\n"
+"Målenheten er «mapblocks» (en enhet på 16x16 blokker)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatic forward key"
-msgstr "Tast for filmatisk tilstand"
+msgstr "Tast for automatisk fremoverbevegelse"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "Hopp automatisk over hindringer med høyde på én blokk."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatically report to the serverlist."
-msgstr "Rapporter automatisk til tjenerlisten."
+msgstr "Rapporter automatisk til serverlisten."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
@@ -2027,7 +2303,7 @@ msgstr "Lagre skjermstørrelse automatisk"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "Autoskaleringsmodus"
#: src/settings_translation_file.cpp
msgid "Backward key"
@@ -2035,25 +2311,23 @@ msgstr "Rettetast"
#: src/settings_translation_file.cpp
msgid "Base ground level"
-msgstr ""
+msgstr "Bakkens grunnivå"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Base terrain height."
-msgstr "Grunnleggende terrenghøyde"
+msgstr "Terrengets grunnhøyde."
#: src/settings_translation_file.cpp
msgid "Basic"
msgstr "Grunnleggende"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Basic privileges"
-msgstr "Grunnleggende priviliger"
+msgstr "Enkle rettigheter"
#: src/settings_translation_file.cpp
msgid "Beach noise"
-msgstr "Strandlyd"
+msgstr "Strandlys"
#: src/settings_translation_file.cpp
msgid "Beach noise threshold"
@@ -2069,7 +2343,7 @@ msgstr "Bindingsadresse"
#: src/settings_translation_file.cpp
msgid "Biome API temperature and humidity noise parameters"
-msgstr ""
+msgstr "Temperatur- og fuktighetsparametre for biotop-APIet"
#: src/settings_translation_file.cpp
msgid "Biome noise"
@@ -2081,24 +2355,23 @@ msgstr "Biter per piksel (dvs. fargedybde) i fullskjermsmodus."
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
-msgstr ""
+msgstr "Avstand for optimalizering av mapblocksending"
#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
-msgstr ""
+msgstr "Filsti for fet og kursivert skrifttype"
#: src/settings_translation_file.cpp
msgid "Bold and italic monospace font path"
-msgstr ""
+msgstr "Filsti for fet og kursivert monospace skrifttype"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Skriftsti"
+msgstr "Filsti for fet skrifttype"
#: src/settings_translation_file.cpp
msgid "Bold monospace font path"
-msgstr ""
+msgstr "Filsti for fet monospace skrifttype"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2110,15 +2383,20 @@ msgstr "Innebygd"
#: src/settings_translation_file.cpp
msgid "Bumpmapping"
-msgstr ""
+msgstr "Teksturpåføring (bump mapping)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
+"Kamera 'near clipping plane' avstand i noder, mellom 0 og 0,5.\n"
+"Brukere flest vil ikke behøve å endre på dette.\n"
+"Økning av verdi vil kunne redusere artefakter fra svakere skjermkort.\n"
+"0.1 = standardverdi, 0.25 = grei verdi for svakere nettbrett."
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
@@ -2130,7 +2408,7 @@ msgstr "Kamerautjevning i filmmodus"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
-msgstr ""
+msgstr "Av/på-tast for visningsoppdatning"
#: src/settings_translation_file.cpp
msgid "Cave noise"
@@ -2165,7 +2443,6 @@ msgid "Cavern noise"
msgstr "Grottelyd"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cavern taper"
msgstr "Grotteinnsnevring"
@@ -2174,15 +2451,16 @@ msgid "Cavern threshold"
msgstr "Grotteterskel"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cavern upper limit"
-msgstr "Grottegrense"
+msgstr "Øvre grottegrense"
#: 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 ""
+"Midtpunkt på lysforsterkningskurven,\n"
+"der 0.0 er minimumsnivået for lysstyrke mens 1.0 er maksimumsnivået."
#: src/settings_translation_file.cpp
msgid ""
@@ -2193,28 +2471,42 @@ msgid ""
"be\n"
"necessary for smaller screens."
msgstr ""
+"Endrer hovedmenyens brukergrensesnitt (UI):\n"
+"- Fullstendig: Flere enkeltspillerverdener, valg av spill, "
+"teksturpakkevalg, osv.\n"
+"- Enkel: Én enkeltspillerverden, ingen valg av spill eller teksturpakke. "
+"Kan være\n"
+"nødvendig på mindre skjermer."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Skriftstørrelse"
#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Skydretast"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Loggingsnivå for feilsøking"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr ""
+msgstr "Maks antall meldinger i chatten"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
-msgstr "Kræsjmelding"
+msgstr "Chatmeldingsformat"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message kick threshold"
-msgstr "Grotteterskel"
+msgstr "Terskel for utvisning fra chat"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr ""
+msgstr "Maksstørrelse på melding i chatten"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
@@ -2226,7 +2518,7 @@ msgstr "Sludrekommandoer"
#: src/settings_translation_file.cpp
msgid "Chunk size"
-msgstr ""
+msgstr "Chunk-størrelse"
#: src/settings_translation_file.cpp
msgid "Cinematic mode"
@@ -2238,7 +2530,7 @@ msgstr "Tast for filmatisk tilstand"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
-msgstr ""
+msgstr "Rene, gjennomsiktige teksturer"
#: src/settings_translation_file.cpp
msgid "Client"
@@ -2250,15 +2542,15 @@ msgstr "Klient og tjener"
#: src/settings_translation_file.cpp
msgid "Client modding"
-msgstr ""
+msgstr "Brukermodding"
#: src/settings_translation_file.cpp
msgid "Client side modding restrictions"
-msgstr ""
+msgstr "Moddebegrensninger på brukers side"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
-msgstr ""
+msgstr "Omfangsbegrensning av blokkoppslag hos klienten"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
@@ -2294,22 +2586,33 @@ msgid ""
"These flags are independent from Minetest versions,\n"
"so see a full list at https://content.minetest.net/help/content_flags/"
msgstr ""
+"Komma-atskilt liste med of flags to hide in the content repository.\n"
+"\"nonfree\" kan brukes til å skjule pakker som ikke kvalifiserer som \"fri "
+"programvare\"\n"
+"som definert av Free Software Foundation.\n"
+"Man kan også specify innholdsvurderinger.\n"
+"Disse flags are uavhengige av Minetest-versjoner,\n"
+"se fullstendig liste på https://content.minetest.net/help/content_flags/"
#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
"allow them to upload and download data to/from the internet."
msgstr ""
+"Kommaatskilt liste over modder som er gitt tilgang til HTTP-APIer.\n"
+"Dette lar dem laste data opp og ned til internett."
#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of trusted mods that are allowed to access insecure\n"
"functions even when mod security is on (via request_insecure_environment())."
msgstr ""
+"Kommainndelt liste med klarerte modder som har tilgang til usikre\n"
+"funksjoner selv når moddsikkerhet er på (via request_insecure_environment())."
#: src/settings_translation_file.cpp
msgid "Command key"
-msgstr ""
+msgstr "Tast for chat og kommandoer"
#: src/settings_translation_file.cpp
msgid "Connect glass"
@@ -2325,7 +2628,7 @@ msgstr "Forbinder glass hvis støttet av knutepunkt."
#: src/settings_translation_file.cpp
msgid "Console alpha"
-msgstr ""
+msgstr "Konsolldekkevne (opasitet)"
#: src/settings_translation_file.cpp
msgid "Console color"
@@ -2337,41 +2640,43 @@ msgstr "Konsollhøyde"
#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
-msgstr ""
+msgstr "ContentDBs svarteliste"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB URL"
-msgstr "Fortsett"
+msgstr "ContentDB-URL"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
-msgstr ""
+msgstr "Kontinuerlig fremoverbevegelse"
#: src/settings_translation_file.cpp
msgid ""
"Continuous forward movement, toggled by autoforward key.\n"
"Press the autoforward key again or the backwards movement to disable."
msgstr ""
+"Kontinuerlig fremoverbevegelse, slås av/på med tasten for automatisk "
+"fremover.\n"
+"Trykk på automatisk fremover-tasten igjen eller gå bakover for å slå av."
#: src/settings_translation_file.cpp
msgid "Controls"
msgstr "Kontroller"
#: 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 ""
-"Kontrollerer lengden på dag/natt -syklus.\n"
-"Eksempler: 72 = 20min, 360 = 4min, 1 = 24timer, 0 = dag/natt/hva det skal "
-"være, forblir uendret."
+"Styrer lengden på døgnet.\n"
+"Eksempler:\n"
+"1 = 24timer, 72 = 20min, 360 = 4min, 0 = dag/natt/hva det skal være, forblir "
+"uendret."
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
-msgstr ""
+msgstr "Bestemmer synkehastigheten i væsker."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2414,7 +2719,7 @@ msgstr "Trådkorsfarge (R, G, B)."
#: src/settings_translation_file.cpp
msgid "DPI"
-msgstr ""
+msgstr "DPI (skjermoppløsning)"
#: src/settings_translation_file.cpp
msgid "Damage"
@@ -2422,12 +2727,11 @@ msgstr "Skade"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
-msgstr ""
+msgstr "Tast for å vise/skjule feilsøkingsinfo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Debug log file size threshold"
-msgstr "Strandlydsterskel"
+msgstr "Størrelsesterskel for feilsøkingsloggfil"
#: src/settings_translation_file.cpp
msgid "Debug log level"
@@ -2439,11 +2743,11 @@ msgstr "Tast for senking av lydstyrke"
#: src/settings_translation_file.cpp
msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgstr "Reduksjon av denne verdien øker bevegelsesmotstanden i væsker."
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
-msgstr ""
+msgstr "Serverens oppdateringsintervall (servertikk)"
#: src/settings_translation_file.cpp
msgid "Default acceleration"
@@ -2472,6 +2776,11 @@ msgid "Default report format"
msgstr "Forvalgt rapporteringsformat"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Forvalgt spill"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2517,9 +2826,8 @@ msgid "Defines the base ground level."
msgstr "Definerer treområder og skogstetthet."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the depth of the river channel."
-msgstr "Definerer treområder og skogstetthet."
+msgstr "Angir dybden på elveleier."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
@@ -2530,9 +2838,8 @@ msgid "Defines the width of the river channel."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river valley."
-msgstr "Definerer område der trær har epler."
+msgstr "Angir bredden på elveleiet."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
@@ -2618,11 +2925,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Dungeon maximum Y"
-msgstr ""
+msgstr "Maksimum y-verdi for grotter"
#: src/settings_translation_file.cpp
msgid "Dungeon minimum Y"
-msgstr ""
+msgstr "Minimum y-verdi for grotter"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2650,9 +2957,8 @@ msgid "Enable creative mode for new created maps."
msgstr "Skru på kreativt modusfor nye opprettede kart."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable joysticks"
-msgstr "Skru på spillstikker"
+msgstr "Bruk joystick"
#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
@@ -2787,6 +3093,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2803,9 +3119,8 @@ msgid "Fall bobbing factor"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Tilbakefallsskrift"
+msgstr "Filsti for reserveskrifttype"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -2847,7 +3162,7 @@ msgstr "Synsfelt"
#: src/settings_translation_file.cpp
msgid "Field of view in degrees."
-msgstr "Synsfelt i grader"
+msgstr "Synsfelt i grader."
#: src/settings_translation_file.cpp
msgid ""
@@ -2855,11 +3170,12 @@ msgid ""
"the\n"
"Multiplayer Tab."
msgstr ""
+"Fil i klient/serverliste som inneholder yndlingsservere som vist\n"
+"i flerspillefanen."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Filler depth"
-msgstr "Elvedybde"
+msgstr "Fylldybde"
#: src/settings_translation_file.cpp
msgid "Filler depth noise"
@@ -2886,8 +3202,9 @@ msgid "First of 4 2D noises that together define hill/mountain range height."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "First of two 3D noises that together define tunnels."
-msgstr ""
+msgstr "Det første av to 3D-støytall som sammen definerer tunneler."
#: src/settings_translation_file.cpp
msgid "Fixed map seed"
@@ -2898,6 +3215,38 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "Maksimum y-verdi for grotter"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "Minimum y-verdi for grotter"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Bakkestøy"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Vannivå"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Flygingstast"
@@ -2910,9 +3259,8 @@ msgid "Fog"
msgstr "TÃ¥ke"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fog start"
-msgstr "TÃ¥kestart"
+msgstr "TÃ¥kegrense"
#: src/settings_translation_file.cpp
msgid "Fog toggle key"
@@ -2920,11 +3268,11 @@ msgstr "TÃ¥kevekslingstast"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Fet skrifttype som forvalg"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Kursiv skrifttype som forvalg"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -2952,6 +3300,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3010,9 +3364,8 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FreeType fonts"
-msgstr "FreeType-skrifter"
+msgstr "FreeType-skrifttyper"
#: src/settings_translation_file.cpp
msgid ""
@@ -3098,9 +3451,8 @@ msgid "Ground level"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ground noise"
-msgstr "Grottelyd"
+msgstr "Bakkestøy"
#: src/settings_translation_file.cpp
msgid "HTTP mods"
@@ -3157,35 +3509,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Hill steepness"
-msgstr ""
+msgstr "Bratthet for ås"
#: src/settings_translation_file.cpp
msgid "Hill threshold"
-msgstr ""
+msgstr "Terskel for ås"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness1 noise"
-msgstr "Varmestøy"
+msgstr "Bakke støy 1"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness2 noise"
-msgstr "Varmestøy"
+msgstr "Bakke støy 2"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness3 noise"
-msgstr "Varmestøy"
+msgstr "Bakke støy 3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness4 noise"
-msgstr "Varmestøy"
+msgstr "Bakke støy 4"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
-msgstr ""
+msgstr "Serverens hjemmeside, som vises i serverlisten."
#: src/settings_translation_file.cpp
msgid ""
@@ -3546,7 +3894,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Inventory key"
-msgstr ""
+msgstr "Tast for beholdning"
#: src/settings_translation_file.cpp
msgid "Invert mouse"
@@ -3554,7 +3902,7 @@ msgstr "Inverter mus"
#: src/settings_translation_file.cpp
msgid "Invert vertical mouse movement."
-msgstr ""
+msgstr "Inverter vertikale musebevegelser."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3633,19 +3981,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Julia w"
-msgstr "Julia w"
+msgstr "Julia-w"
#: src/settings_translation_file.cpp
msgid "Julia x"
-msgstr "Julia x"
+msgstr "Julia-x"
#: src/settings_translation_file.cpp
msgid "Julia y"
-msgstr "Julia y"
+msgstr "Julia-y"
#: src/settings_translation_file.cpp
msgid "Julia z"
-msgstr "Julia z"
+msgstr "Julia-z"
#: src/settings_translation_file.cpp
msgid "Jump key"
@@ -4150,6 +4498,11 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Sniketast.\n"
+"Brukes også for å gå ned på stiger og i vann dersom aux1_descends ikke "
+"brukes.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4331,7 +4684,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Leaves style"
-msgstr ""
+msgstr "Bladstil"
#: src/settings_translation_file.cpp
msgid ""
@@ -4340,10 +4693,14 @@ msgid ""
"- Simple: only outer faces, if defined special_tiles are used\n"
"- Opaque: disable transparency"
msgstr ""
+"Bladstil:\n"
+"- Stilig: alle sider synes\n"
+"- Enkel: kun yttersider synes, dersom special_tiles brukes\n"
+"- Tildekket: gjennomsiktighet er av"
#: src/settings_translation_file.cpp
msgid "Left key"
-msgstr ""
+msgstr "Venstretast"
#: src/settings_translation_file.cpp
msgid ""
@@ -4410,14 +4767,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4482,8 +4831,13 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "Y-verdi for store grotters øvre grense."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
-msgstr ""
+msgstr "Skript for hovedmeny"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4505,7 +4859,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Map directory"
-msgstr ""
+msgstr "Mappe for kart"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen Carpathian."
@@ -4549,7 +4903,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4558,7 +4914,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Map save interval"
-msgstr ""
+msgstr "Lagringsintervall for kart"
#: src/settings_translation_file.cpp
msgid "Mapblock limit"
@@ -4643,10 +4999,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4672,11 +5024,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum FPS"
-msgstr ""
+msgstr "Maks FPS («frames» - bilder per sekund)"
#: src/settings_translation_file.cpp
msgid "Maximum FPS when game is paused."
-msgstr ""
+msgstr "Maks FPS når spillet står i pause."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -4714,13 +5066,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4784,11 +5136,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum users"
-msgstr ""
+msgstr "Maks antall brukere"
#: src/settings_translation_file.cpp
msgid "Menus"
-msgstr ""
+msgstr "Menyer"
#: src/settings_translation_file.cpp
msgid "Mesh cache"
@@ -4796,7 +5148,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Message of the day"
-msgstr ""
+msgstr "Dagens melding"
#: src/settings_translation_file.cpp
msgid "Message of the day displayed to players connecting."
@@ -4807,12 +5159,16 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Minimap"
+msgid "Minimal level of logging to be written to chat."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr "Minikart"
+
+#: src/settings_translation_file.cpp
msgid "Minimap key"
-msgstr ""
+msgstr "Tast for minikart"
#: src/settings_translation_file.cpp
msgid "Minimap scan height"
@@ -4844,11 +5200,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Monospace font path"
-msgstr ""
+msgstr "Filsti for monospace skrifttype"
#: src/settings_translation_file.cpp
msgid "Monospace font size"
-msgstr ""
+msgstr "Størrelse for monospace skrifttype"
#: src/settings_translation_file.cpp
msgid "Mountain height noise"
@@ -4868,7 +5224,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
-msgstr ""
+msgstr "Pekerfølsomhet"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity multiplier."
@@ -4913,7 +5269,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4965,9 +5321,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5044,10 +5397,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5057,7 +5406,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5091,10 +5442,18 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Physics"
+msgid "Per-player limit of queued blocks load from disk"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "Fysikk"
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Pitch move key"
msgstr "Flygingstast"
@@ -5111,7 +5470,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Player name"
-msgstr ""
+msgstr "Spillernavn"
#: src/settings_translation_file.cpp
msgid "Player transfer distance"
@@ -5160,6 +5519,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5180,7 +5551,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Range select key"
-msgstr ""
+msgstr "Tilfeldig inndata"
#: src/settings_translation_file.cpp
msgid "Recent Chat Messages"
@@ -5197,7 +5568,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Remote port"
-msgstr ""
+msgstr "Eksterne media"
#: src/settings_translation_file.cpp
msgid ""
@@ -5207,7 +5578,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Replaces the default main menu with a custom one."
-msgstr ""
+msgstr "Ekstern port."
#: src/settings_translation_file.cpp
msgid "Report path"
@@ -5252,34 +5623,28 @@ msgid "Rightclick repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel depth"
-msgstr "Elvedybde"
+msgstr "Elveleiedybde"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel width"
-msgstr "Elvedybde"
+msgstr "Elveleiebredde"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River depth"
msgstr "Elvedybde"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River noise"
msgstr "Elvestøy"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River size"
msgstr "Elvestørrelse"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River valley width"
-msgstr "Elvedybde"
+msgstr "Bredde på elvedal"
#: src/settings_translation_file.cpp
msgid "Rollback recording"
@@ -5328,15 +5693,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Screen height"
-msgstr ""
+msgstr "Skjermhøyde"
#: src/settings_translation_file.cpp
msgid "Screen width"
-msgstr ""
+msgstr "Skjermbredde"
#: src/settings_translation_file.cpp
msgid "Screenshot folder"
-msgstr ""
+msgstr "Mappe for skjermdumper"
#: src/settings_translation_file.cpp
msgid "Screenshot format"
@@ -5367,23 +5732,23 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Security"
-msgstr ""
+msgstr "Sikkerhet"
#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
-msgstr ""
+msgstr "Se https://www.sqlite.org/pragma.html#pragma_synchronous"
#: src/settings_translation_file.cpp
msgid "Selection box border color (R,G,B)."
-msgstr ""
+msgstr "Kantfarge på utvalgsfelt (R,G,B)."
#: src/settings_translation_file.cpp
msgid "Selection box color"
-msgstr ""
+msgstr "Farge på utvalgsfelt"
#: src/settings_translation_file.cpp
msgid "Selection box width"
-msgstr ""
+msgstr "Bredde på utvalgsfelt"
#: src/settings_translation_file.cpp
msgid ""
@@ -5410,76 +5775,77 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Server / Singleplayer"
-msgstr ""
+msgstr "Server/alene"
#: src/settings_translation_file.cpp
msgid "Server URL"
-msgstr ""
+msgstr "Server-URL"
#: src/settings_translation_file.cpp
msgid "Server address"
-msgstr ""
+msgstr "Serveradresse"
#: src/settings_translation_file.cpp
msgid "Server description"
-msgstr ""
+msgstr "Serverbeskrivelse"
#: src/settings_translation_file.cpp
msgid "Server name"
-msgstr ""
+msgstr "Servernavn"
#: src/settings_translation_file.cpp
msgid "Server port"
-msgstr ""
+msgstr "Serverport"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Server side occlusion culling"
-msgstr ""
+msgstr "Ikke-synlige blokker blir ikke sendt videre av serveren"
#: src/settings_translation_file.cpp
msgid "Serverlist URL"
-msgstr ""
+msgstr "Serverliste-URL"
#: src/settings_translation_file.cpp
msgid "Serverlist file"
-msgstr ""
+msgstr "Serverlistefil"
#: src/settings_translation_file.cpp
msgid ""
"Set the language. Leave empty to use the system language.\n"
"A restart is required after changing this."
msgstr ""
+"Angi språk. La stå tom for å bruke operativsystemets språk.\n"
+"Krever omstart etter endring."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Set the maximum character length of a chat message sent by clients."
-msgstr ""
+msgstr "Angi maksimalt antall tegn i chatmelding sendt av klienter."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
-"Aktiver for å slå på bølgende blader.\n"
-"Krever at dybdeskapere er aktivert."
+"Angi som sann for å slå på bladrasling.\n"
+"Krever at skyggelegging er påslått."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"Aktiver for å slå på bølgende blader.\n"
-"Krever at dybdeskapere er aktivert."
+"Angi som sann for å slå på væskeskvulping (som vann).\n"
+"Krever at skyggelegging er påslått."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
-"Aktiver for å slå på bølgende blader.\n"
-"Krever at dybdeskapere er aktivert."
+"Angi som sann for å slå på plantesvaiing.\n"
+"Krever at skyggelegging er aktivert."
#: src/settings_translation_file.cpp
msgid "Shader path"
@@ -5511,7 +5877,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Show debug info"
-msgstr ""
+msgstr "Vis feilsøkingsinfo"
#: src/settings_translation_file.cpp
msgid "Show entity selection boxes"
@@ -5519,7 +5885,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Shutdown message"
-msgstr ""
+msgstr "Beskjed ved avslutning"
#: src/settings_translation_file.cpp
msgid ""
@@ -5582,7 +5948,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Sneak key"
-msgstr ""
+msgstr "Sniketast"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5595,16 +5961,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Sound"
-msgstr ""
+msgstr "Lyd"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Special key"
-msgstr "trykk tast"
+msgstr "Spesialtast"
#: src/settings_translation_file.cpp
msgid "Special key for climbing/descending"
-msgstr ""
+msgstr "Spesialtast for klatring/nedklatring"
#: src/settings_translation_file.cpp
msgid ""
@@ -5613,28 +5978,47 @@ msgid ""
"(obviously, remote_media should end with a slash).\n"
"Files that are not present will be fetched the usual way."
msgstr ""
+"Angir URL som klienten bruker for å hente media i stedet for å bruke UDP.\n"
+"$filename burde være tilgjenglig fra $remote_media$filename via cURL\n"
+"(remote_media bør selvfølgelig ende med skråstrek).\n"
+"Filer som ikke er til stede hentes på den vanlige måten."
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, 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 ""
+"Spread of light curve boost range.\n"
+"Styrer the width of the range to be boosted.\n"
+"Standardavvik for lyskurvens boost Gaussian."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
-msgstr ""
+msgstr "Fast gjenoppstandelsespunkt"
#: src/settings_translation_file.cpp
msgid "Steepness noise"
-msgstr ""
+msgstr "Bratthetsstøy"
#: src/settings_translation_file.cpp
msgid "Step mountain size noise"
-msgstr ""
+msgstr "Bratt fjellside-støy"
#: src/settings_translation_file.cpp
msgid "Step mountain spread noise"
+msgstr "Spredningsstøy for bratt fjell"
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5649,24 +6033,34 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
-msgstr ""
+msgstr "Synkron SQLite"
#: src/settings_translation_file.cpp
msgid "Temperature variation for biomes."
-msgstr ""
+msgstr "Temperaturvariasjon for biomer."
#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
@@ -5709,7 +6103,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Texture path"
-msgstr ""
+msgstr "Filsti for teksturer"
#: src/settings_translation_file.cpp
msgid ""
@@ -5756,6 +6150,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Makshøyden for overflaten på væsker som skvulper.\n"
+"4,0 = Bølgehøyde er to blokker.\n"
+"0,0 = Bølger flytter seg ikke i det hele tatt.\n"
+"Forvalgt verdi er 1,0 (1/2 blokk).\n"
+"Krever at væskebølger er påslått."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -5775,7 +6174,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5886,7 +6285,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Trilinear filtering"
-msgstr ""
+msgstr "Forsinkelse for infoboble"
#: src/settings_translation_file.cpp
msgid ""
@@ -5894,10 +6293,13 @@ msgid ""
"False = 128\n"
"Usable to make minimap smoother on slower machines."
msgstr ""
+"Sann = 256\n"
+"Usann = 128\n"
+"Kan gjøre at minikartet kjører lettere på trege maskiner."
#: src/settings_translation_file.cpp
msgid "Trusted mods"
-msgstr ""
+msgstr "Klarterte modder"
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
@@ -5929,12 +6331,17 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Y-verdi for store grotters øvre grense."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
-msgstr ""
+msgstr "Bruk 3D-skyer i stedet for flate."
#: src/settings_translation_file.cpp
msgid "Use a cloud animation for the main menu background."
-msgstr ""
+msgstr "Bruk animerte skyer som bakgrunn for hovedmenyen."
#: src/settings_translation_file.cpp
msgid "Use anisotropic filtering when viewing at textures from an angle."
@@ -6021,7 +6428,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Video driver"
-msgstr ""
+msgstr "Videodriver"
#: src/settings_translation_file.cpp
msgid "View bobbing factor"
@@ -6053,13 +6460,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Volume"
-msgstr ""
+msgstr "Volum"
#: src/settings_translation_file.cpp
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
+"Volum på all lyd. \n"
+"Krever påslått lydsystem."
#: src/settings_translation_file.cpp
msgid ""
@@ -6076,7 +6485,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Walking speed"
-msgstr ""
+msgstr "Gangfart"
#: src/settings_translation_file.cpp
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
@@ -6084,7 +6493,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Water level"
-msgstr ""
+msgstr "Vannivå"
#: src/settings_translation_file.cpp
msgid "Water surface level of the world."
@@ -6092,11 +6501,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Waving Nodes"
-msgstr ""
+msgstr "Blokksvaiing"
#: src/settings_translation_file.cpp
msgid "Waving leaves"
-msgstr ""
+msgstr "Bladrasling"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6120,7 +6529,7 @@ msgstr "Bølgende vann"
#: src/settings_translation_file.cpp
msgid "Waving plants"
-msgstr ""
+msgstr "Plantesvaiing"
#: src/settings_translation_file.cpp
msgid ""
@@ -6214,9 +6623,10 @@ msgid ""
"World directory (everything in the world is stored here).\n"
"Not needed if starting from the main menu."
msgstr ""
+"Mappe for verden (alt i verdenen lagres her).\n"
+"Trengs ikke hvis den opprettes fra hovedmenyen."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "World start time"
msgstr "Verdensstarttid"
@@ -6236,33 +6646,44 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Y of flat ground."
-msgstr ""
+msgstr "Y-koordinat for flatt land."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Y of mountain density gradient zero level. Used to shift mountains "
"vertically."
msgstr ""
+"Y for nullnivået for tetthetsgradient til fjell. Brukes for å forskyve fjell "
+"i høyden."
#: src/settings_translation_file.cpp
msgid "Y of upper limit of large caves."
-msgstr ""
+msgstr "Y-verdi for store grotters øvre grense."
#: src/settings_translation_file.cpp
msgid "Y-distance over which caverns expand to full size."
msgstr "Y-avstand som en grotte kan øke i størrelse til full størrelse."
#: src/settings_translation_file.cpp
-msgid "Y-level of average terrain surface."
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr "Y-nivå for gjennomsnittlig terrengoverflate."
+
+#: src/settings_translation_file.cpp
msgid "Y-level of cavern upper limit."
-msgstr ""
+msgstr "Y-nivå for øvre grottegrense."
#: src/settings_translation_file.cpp
msgid "Y-level of higher terrain that creates cliffs."
-msgstr ""
+msgstr "Y-nivå for høytliggende terreng som fører til klipper."
#: src/settings_translation_file.cpp
msgid "Y-level of lower terrain and seabed."
@@ -6301,3 +6722,15 @@ msgstr "cURL-tidsgrense"
#~ msgid "Enable VBO"
#~ msgstr "Aktiver VBO"
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Filsti til lagring av skjermdumper."
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Laster ned og installerer $1, vent…"
+
+#~ msgid "Back"
+#~ msgstr "Tilbake"
+
+#~ msgid "Ok"
+#~ msgstr "Okei"
diff --git a/po/nl/minetest.po b/po/nl/minetest.po
index d3fec167c..c4d3da53a 100644
--- a/po/nl/minetest.po
+++ b/po/nl/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Dutch (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-07-08 20:47+0000\n"
+"Last-Translator: sfan5 <sfan5@live.de>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/minetest/minetest/"
"nl/>\n"
"Language: nl\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 3.9-dev\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -20,15 +20,17 @@ msgstr "Herboren worden"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
-msgstr "Je stierf"
+msgstr "Je bent gestorven"
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "Oke"
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "Er is een fout opgetreden in een Lua script, zoals dat van een mod:"
+msgstr "Er is een fout opgetreden in een Lua script:"
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred:"
msgstr "Er is een fout opgetreden:"
@@ -37,10 +39,6 @@ msgid "Main menu"
msgstr "Hoofdmenu"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Oké"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Opnieuw verbinding maken"
@@ -117,31 +115,32 @@ msgstr ""
"Enkel [a-z0-9_] zijn toegestaan."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Zoek Meer Mods"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No (optional) dependencies"
-msgstr "Optionele afhankelijkheden:"
+msgstr "Geen (optionele) afhankelijkheden"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr "Geen mod-beschrijving aanwezig."
+msgstr "Geen spelbeschrijving aanwezig."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "Geen afhankelijkheden."
+msgstr "Geen afhankelijkheden"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "Geen mod-beschrijving aanwezig."
+msgstr "Geen modpack-beschrijving aanwezig."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No optional dependencies"
-msgstr "Optionele afhankelijkheden:"
+msgstr "Geen optionele afhankelijkheden"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
@@ -165,16 +164,17 @@ msgid "All packages"
msgstr "Alle pakketten"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Terug"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Terug naar hoofdmenu"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "$1 wordt gedownload, een ogenblik geduld alstublieft..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+"ContentDB is niet beschikbaar wanneer Minetest compileert is zonder cURL"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "Downloaden..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -219,15 +219,58 @@ msgstr "Verwijder"
msgid "Update"
msgstr "Update"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Een wereld met de naam \"$1\" bestaat al"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Altitude chill"
+msgstr "Temperatuurverschil vanwege hoogte"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Temperatuurverschil vanwege hoogte"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Biome-ruis"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Biome-ruis"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Grot ruis"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Octaven"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Maak aan"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Per soort"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Download een subspel, zoals Minetest Game, van minetest.net"
@@ -235,25 +278,153 @@ msgstr "Download een subspel, zoals Minetest Game, van minetest.net"
msgid "Download one from minetest.net"
msgstr "Laad er een van minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Kerker ruis"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floating landmasses in the sky"
+msgstr "Drijvend gebergte dichtheid"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "Waterniveau"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Spel"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "Video driver"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Wereldgenerator"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Wereldgenerator vlaggen"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Vlaggen"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mountains"
+msgstr "Bergen ruis"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Geen spel geselecteerd"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Grootte van rivieren"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Kiemgetal"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "Terrein hoogte"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Diepte van rivieren"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
"Waarschuwing: Het minimale ontwikkellaars-test-spel is bedoeld voor "
"ontwikkelaars."
@@ -297,13 +468,12 @@ msgid "Rename Modpack:"
msgstr "Modverzameling hernoemen:"
#: builtin/mainmenu/dlg_rename_modpack.lua
-#, fuzzy
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
-"Deze modverzameling heeft een andere naam in modpack.conf wat hernoemen hier "
-"zal overschrijven."
+"Deze modpack heeft een expliciete naam gegeven in zijn modpack.conf die elke "
+"hernoeming hier zal overschrijven."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
@@ -367,7 +537,7 @@ msgstr "Schaal"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
-msgstr "Selecteer folder"
+msgstr "Selecteer map"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
@@ -409,42 +579,49 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z spreiding"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr ""
+msgstr "absolute waarde"
+#. ~ "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 "Standaard"
+msgstr "standaard"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "makkelijker"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "$1 (Enabled)"
-msgstr "Ingeschakeld"
+msgstr "$1 (Ingeschakeld)"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "$1 mods"
-msgstr "3D modus"
+msgstr "$1 mods"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Installeren van mod $1 in $2 is mislukt"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "Mod installeren: kan de echte modnaam niet vinden voor: $1"
+msgstr "Mod installeren: kan de echte mod-naam niet vinden voor: $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
-"Mod installeren: kan geen geschikte map-naam vinden voor modverzameling $1"
+"Mod installeren: kan geen geschikte map naam vinden voor mod verzameling $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: Unsupported file type \"$1\" or broken archive"
@@ -460,21 +637,19 @@ msgstr "Niet mogelijk om geschikte map-naam vinden voor modverzameling $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr "Niet mogelijk om een $1 als textuuren pakket te installeren"
+msgstr "Kan $1 niet als textuurpakket installeren"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
msgstr "Installeren van een spel als $1 mislukt"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a mod as a $1"
msgstr "Installeren van mod $1 in $2 is mislukt"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a modpack as a $1"
-msgstr "Installeren van mod $1 in $2 is mislukt"
+msgstr "Installeren van mod verzameling $1 in $2 is mislukt"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
@@ -485,9 +660,8 @@ msgid "Content"
msgstr "Inhoud"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Disable Texture Pack"
-msgstr "Selecteer textuurverzameling:"
+msgstr "Uitschakelen Textuurverzameling"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
@@ -502,23 +676,20 @@ msgid "No dependencies."
msgstr "Geen afhankelijkheden."
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "No package description available"
-msgstr "Geen mod-beschrijving aanwezig"
+msgstr "Geen pakketbeschrijving beschikbaar"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
msgstr "Hernoemen"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Uninstall Package"
-msgstr "Geselecteerde mod deïnstalleren"
+msgstr "Pakket verwijderen"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Use Texture Pack"
-msgstr "Textuurverzamelingen"
+msgstr "Gebruik textuurverzamelingen"
#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
@@ -569,6 +740,10 @@ msgid "Host Server"
msgstr "Server Hosten"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Naam / Wachtwoord"
@@ -581,7 +756,6 @@ msgid "No world created or selected!"
msgstr "Geen wereldnaam opgegeven of geen wereld aangemaakt!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Play Game"
msgstr "Spel Spelen"
@@ -594,9 +768,8 @@ msgid "Select World:"
msgstr "Selecteer Wereld:"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Server Port"
-msgstr "Server-poort"
+msgstr "Server Poort"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
@@ -616,7 +789,7 @@ msgstr "Creatieve modus"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "Verwondingen aangeschakeld"
+msgstr "Verwondingen ingeschakeld"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Del. Favorite"
@@ -627,9 +800,8 @@ msgid "Favorite"
msgstr "Favorieten"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Join Game"
-msgstr "Spel Hosten"
+msgstr "Join spel"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Name / Password"
@@ -639,9 +811,10 @@ msgstr "Naam / Wachtwoord"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
-msgstr "Spelergevechten aangeschakeld"
+msgstr "Spelergevechten ingeschakeld"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -660,9 +833,8 @@ msgid "8x"
msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "All Settings"
-msgstr "Instellingen"
+msgstr "Alle Instellingen"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
@@ -673,9 +845,8 @@ msgid "Are you sure to reset your singleplayer world?"
msgstr "Weet je zeker dat je je wereld wilt resetten?"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Autosave Screen Size"
-msgstr "Scherm afmetingen automatisch bewaren"
+msgstr "Schermafmetingen automatisch bewaren"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
@@ -698,9 +869,8 @@ msgid "Fancy Leaves"
msgstr "Mooie bladeren"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Generate Normal Maps"
-msgstr "Genereer normaalmappen"
+msgstr "Genereer normale werelden"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
@@ -756,7 +926,7 @@ msgstr "Reset Singleplayer wereld"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr "Schermafbeelding:"
+msgstr "Scherm:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
@@ -768,7 +938,7 @@ msgstr "Shaders"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "Shaders (niet beschikbaar)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -791,9 +961,8 @@ msgid "Tone Mapping"
msgstr "Tone-mapping"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Touchthreshold: (px)"
-msgstr "Toetsgrenswaarde (px)"
+msgstr "Toetsgrenswaarde: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
@@ -804,9 +973,8 @@ msgid "Waving Leaves"
msgstr "Bewegende bladeren"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Liquids"
-msgstr "Bewegende nodes"
+msgstr "Golvende Vloeistoffen"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
@@ -846,7 +1014,7 @@ msgstr "Nodes initialiseren..."
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr "Bezig met texturen te laden..."
+msgstr "Texturen laden..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
@@ -874,7 +1042,7 @@ msgstr "Geen wereld geselecteerd en geen adres opgegeven. Niets te doen."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr "Spelernaam is te lang."
+msgstr "Speler-naam is te lang."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
@@ -882,14 +1050,21 @@ msgstr "Kies alsjeblieft een naam!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr ""
+msgstr "Opgegeven wachtwoordbestand kan niet worden geopend: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr "Het gespecificeerde wereld-pad bestaat niet: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
-#, fuzzy
msgid "needs_fallback_font"
msgstr "no"
@@ -902,16 +1077,14 @@ msgstr ""
"Kijk in debug.txt voor details."
#: src/client/game.cpp
-#, fuzzy
msgid "- Address: "
-msgstr "Lokaal server-adres "
+msgstr "- Adres: "
#: src/client/game.cpp
msgid "- Creative Mode: "
msgstr "- Creatieve Modus: "
#: src/client/game.cpp
-#, fuzzy
msgid "- Damage: "
msgstr "- Verwondingen: "
@@ -924,10 +1097,10 @@ msgid "- Port: "
msgstr "- Poort: "
#: src/client/game.cpp
-#, fuzzy
msgid "- Public: "
-msgstr "- Publiek: "
+msgstr "- Openbaar: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -937,42 +1110,36 @@ msgid "- Server Name: "
msgstr "- Server Naam: "
#: src/client/game.cpp
-#, fuzzy
msgid "Automatic forward disabled"
-msgstr "Vooruit toets"
+msgstr "Automatisch vooruit uitgeschakeld"
#: src/client/game.cpp
-#, fuzzy
msgid "Automatic forward enabled"
-msgstr "Vooruit toets"
+msgstr "Automatisch vooruit ingeschakeld"
#: src/client/game.cpp
-#, fuzzy
msgid "Camera update disabled"
-msgstr "Toets voor cameraverversing aan/uit"
+msgstr "Camera-update uitgeschakeld"
#: src/client/game.cpp
-#, fuzzy
msgid "Camera update enabled"
-msgstr "Toets voor cameraverversing aan/uit"
+msgstr "Camera-update ingeschakeld"
#: src/client/game.cpp
msgid "Change Password"
msgstr "Verander wachtwoord"
#: src/client/game.cpp
-#, fuzzy
msgid "Cinematic mode disabled"
-msgstr "Cinematic modus aan/uit toets"
+msgstr "Filmische modus uitgeschakeld"
#: src/client/game.cpp
-#, fuzzy
msgid "Cinematic mode enabled"
-msgstr "Cinematic modus aan/uit toets"
+msgstr "Filmische modus ingeschakeld"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
-msgstr ""
+msgstr "Client-side scripting is uitgeschakeld"
#: src/client/game.cpp
msgid "Connecting to server..."
@@ -983,7 +1150,7 @@ msgid "Continue"
msgstr "Verder spelen"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1000,22 +1167,24 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
-"Standaard toetsen:\n"
-"- W,A,S,D: bewegen\n"
-"- Spatie: spring/klim\n"
-"- Shift: kruip/duik\n"
-"- Q: item weggooien\n"
-"- I: rugzak\n"
-"- Muis: draaien/kijken\n"
-"- Linker muisknop: graaf/sla\n"
-"- Rechter muisknop: plaats/gebruik\n"
-"- Muiswiel: selecteer item\n"
-"- T: chatten\n"
+"Besturing: \n"
+"-%s: ga vooruit \n"
+"-%s: ga achteruit \n"
+"-%s: ga naar links \n"
+"-%s: ga naar rechts \n"
+"-%s: springen / klimmen \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"
#: src/client/game.cpp
-#, fuzzy
msgid "Creating client..."
-msgstr "Bezig cliënt te maken..."
+msgstr "Gebruiker aanmaken..."
#: src/client/game.cpp
msgid "Creating server..."
@@ -1023,16 +1192,15 @@ msgstr "Bezig server te maken..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr ""
+msgstr "Debug info en profiler grafiek verborgen"
#: src/client/game.cpp
-#, fuzzy
msgid "Debug info shown"
-msgstr "Toets voor aan/uitzetten debug informatie"
+msgstr "Debug informatie weergegeven"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr ""
+msgstr "Debug info, profiler grafiek en wireframe verborgen"
#: src/client/game.cpp
msgid ""
@@ -1060,15 +1228,15 @@ msgstr ""
"- aanraken stapel of vak:\n"
" --> stapel verplaatsen\n"
"- aanraken & slepen, tik met tweede vinger\n"
-" --> plaats enkel object in vak\n"
+" --> plaats enkel object in vak\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr ""
+msgstr "Oneindige kijkafstand uitgezet"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr ""
+msgstr "Oneindige kijkafstand aangezet"
#: src/client/game.cpp
msgid "Exit to Menu"
@@ -1079,42 +1247,36 @@ msgid "Exit to OS"
msgstr "Afsluiten"
#: src/client/game.cpp
-#, fuzzy
msgid "Fast mode disabled"
-msgstr "Snelheid in snelle modus"
+msgstr "Snelle modus uitgeschakeld"
#: src/client/game.cpp
-#, fuzzy
msgid "Fast mode enabled"
-msgstr "Snelheid in snelle modus"
+msgstr "Snelle modus ingeschakeld"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr ""
+msgstr "Snelle modus ingeschakeld (let op: geen 'fast' recht)"
#: src/client/game.cpp
-#, fuzzy
msgid "Fly mode disabled"
-msgstr "Snelheid in snelle modus"
+msgstr "Vlieg modus uitgeschakeld"
#: src/client/game.cpp
-#, fuzzy
msgid "Fly mode enabled"
-msgstr "Verwondingen aangeschakeld"
+msgstr "Vlieg modus ingeschakeld"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr ""
+msgstr "Vliegmodus ingeschakeld (let op: geen 'fly'-privilege)"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog disabled"
-msgstr "MP uitschakelen"
+msgstr "Mist uitgeschakeld"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog enabled"
-msgstr "aangeschakeld"
+msgstr "Mist ingeschakeld"
#: src/client/game.cpp
msgid "Game info:"
@@ -1125,9 +1287,8 @@ msgid "Game paused"
msgstr "Spel gepauzeerd"
#: src/client/game.cpp
-#, fuzzy
msgid "Hosting server"
-msgstr "Bezig server te maken..."
+msgstr "Server maken"
#: src/client/game.cpp
msgid "Item definitions..."
@@ -1147,49 +1308,47 @@ msgstr "MiB/s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "Mini-kaart momenteel uitgeschakeld door spel of mod"
#: src/client/game.cpp
-#, fuzzy
msgid "Minimap hidden"
-msgstr "Mini-kaart toets"
+msgstr "Mini-kaart verborgen"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x1"
-msgstr ""
+msgstr "Mini-kaart in radar modus, Zoom x1"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x2"
-msgstr ""
+msgstr "Mini-kaart in radar modus, Zoom x2"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x4"
-msgstr ""
+msgstr "Mini-kaart in radar modus, Zoom x4"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x1"
-msgstr ""
+msgstr "Minimap in oppervlaktemodus, Zoom x1"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x2"
-msgstr ""
+msgstr "Minimap in oppervlaktemodus, Zoom x2"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x4"
-msgstr ""
+msgstr "Minimap in oppervlaktemodus, Zoom x4"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr ""
+msgstr "Noclip-modus uitgeschakeld"
#: src/client/game.cpp
-#, fuzzy
msgid "Noclip mode enabled"
-msgstr "Verwondingen aangeschakeld"
+msgstr "Noclip-modus ingeschakeld"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr ""
+msgstr "Noclip-modus ingeschakeld (opmerking: geen 'noclip' recht)"
#: src/client/game.cpp
msgid "Node definitions..."
@@ -1197,28 +1356,27 @@ msgstr "Node definities..."
#: src/client/game.cpp
msgid "Off"
-msgstr "Uitgeschakeld"
+msgstr "Uit"
#: src/client/game.cpp
msgid "On"
-msgstr "Ingeschakeld"
+msgstr "Aan"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr ""
+msgstr "Pitch move-modus uitgeschakeld"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr ""
+msgstr "Pitch move-modus ingeschakeld"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "Profiler-grafiek weergegeven"
#: src/client/game.cpp
-#, fuzzy
msgid "Remote server"
-msgstr "Poort van externe server"
+msgstr "Externe server"
#: src/client/game.cpp
msgid "Resolving address..."
@@ -1237,73 +1395,78 @@ msgid "Sound Volume"
msgstr "Geluidsvolume"
#: src/client/game.cpp
-#, fuzzy
msgid "Sound muted"
-msgstr "Geluidsvolume"
+msgstr "Geluid gedempt"
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
#: src/client/game.cpp
-#, fuzzy
msgid "Sound unmuted"
-msgstr "Geluidsvolume"
+msgstr "Geluid niet gedempt"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Viewing range changed to %d"
-msgstr "Volume veranderd naar %d1%%2"
+msgstr "Kijkbereik gewijzigd naar %d"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr "Minimale zichtafstand"
+msgstr "Het kijkbereik is maximaal: %d"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr "Minimale zichtafstand"
+msgstr "Het kijkbereik is minimaal: %d"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Volume changed to %d%%"
-msgstr "Volume veranderd naar %d1%%2"
+msgstr "Volume gewijzigd naar %d%%"
#: src/client/game.cpp
+#, fuzzy
msgid "Wireframe shown"
-msgstr ""
+msgstr "Draadframe weergegeven"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr ""
+msgstr "Zoom momenteel uitgeschakeld door game of mod"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "oké"
#: src/client/gameui.cpp
-#, fuzzy
msgid "Chat hidden"
-msgstr "Chat-toets"
+msgstr "Chat verborgen"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "Chat weergegeven"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "HUD verborgen"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "HUD getoond"
#: src/client/gameui.cpp
-#, fuzzy
msgid "Profiler hidden"
-msgstr "Profiler"
+msgstr "Profiler verborgen"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr ""
+msgstr "Profiler getoond (pagina %d van %d)"
#: src/client/keycode.cpp
msgid "Apps"
@@ -1335,7 +1498,6 @@ msgid "End"
msgstr "Einde"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Erase EOF"
msgstr "Verwijder EOF"
@@ -1352,19 +1514,16 @@ msgid "Home"
msgstr "Home"
#: src/client/keycode.cpp
-#, fuzzy
msgid "IME Accept"
msgstr "IME Accepteren"
#: src/client/keycode.cpp
-#, fuzzy
msgid "IME Convert"
msgstr "IME Converteren"
#: src/client/keycode.cpp
-#, fuzzy
msgid "IME Escape"
-msgstr "IME Escape"
+msgstr "IME Ontsnappen"
#: src/client/keycode.cpp
msgid "IME Mode Change"
@@ -1372,7 +1531,7 @@ msgstr "Modus veranderen"
#: src/client/keycode.cpp
msgid "IME Nonconvert"
-msgstr "IME Nonconvert"
+msgstr "IME Niet-converteren"
#: src/client/keycode.cpp
msgid "Insert"
@@ -1402,6 +1561,7 @@ msgstr "Linker Shift"
msgid "Left Windows"
msgstr "Linker Windowstoets"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menu"
@@ -1415,12 +1575,10 @@ msgid "Num Lock"
msgstr "Num Lock"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad *"
msgstr "Numpad *"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad +"
msgstr "Numpad +"
@@ -1478,15 +1636,15 @@ msgstr "Numpad 9"
#: src/client/keycode.cpp
msgid "OEM Clear"
-msgstr "OEM Clear"
+msgstr "OEM duidelijk"
#: src/client/keycode.cpp
msgid "Page down"
-msgstr ""
+msgstr "Pagina omlaag"
#: src/client/keycode.cpp
msgid "Page up"
-msgstr ""
+msgstr "Pagina omhoog"
#: src/client/keycode.cpp
msgid "Pause"
@@ -1496,9 +1654,10 @@ msgstr "Pauze"
msgid "Play"
msgstr "Spelen"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
-msgstr "Print"
+msgstr "Schermafbeelding"
#: src/client/keycode.cpp
msgid "Return"
@@ -1532,6 +1691,7 @@ msgstr "Rechter Windowstoets"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Selecteren"
@@ -1578,7 +1738,7 @@ msgstr "De wachtwoorden zijn niet gelijk!"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
-msgstr ""
+msgstr "Registreer en doe mee"
#: src/gui/guiConfirmRegistration.cpp
#, c-format
@@ -1589,33 +1749,37 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
+"U staat op het punt om voor het eerst lid te worden van deze server met de "
+"naam \"%s\". \n"
+"Als u doorgaat, wordt op deze server een nieuw account gemaakt met uw "
+"inloggegevens. \n"
+"Voer uw wachtwoord opnieuw in en klik op 'Registreren en aanmelden' om het "
+"aanmaken van een account te bevestigen, of klik op 'Annuleren' om af te "
+"breken."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Doorgaan"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "\"Special\" = climb down"
-msgstr "\"Gebruiken\" = omlaag klimmen"
+msgstr "\"Speciaal\" = naar beneden klimmen"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Autoforward"
-msgstr "Vooruit"
+msgstr "Automatisch Vooruit"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
-msgstr ""
+msgstr "Automatisch springen"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Achteruit"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Change camera"
-msgstr "Toetsen aanpassen"
+msgstr "Camera veranderen"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
@@ -1630,9 +1794,8 @@ msgid "Console"
msgstr "Console"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Dec. range"
-msgstr "Zichtafstand"
+msgstr "Zichtafstand verkleinen"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
@@ -1651,14 +1814,12 @@ msgid "Forward"
msgstr "Vooruit"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Inc. range"
-msgstr "Zichtafstand"
+msgstr "Afstand verhogen"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Inc. volume"
-msgstr "Geluidsvolume"
+msgstr "Volume verhogen"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inventory"
@@ -1679,16 +1840,14 @@ msgstr ""
"minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Local command"
-msgstr "Chat-commando's"
+msgstr "Lokale commando"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Mute"
msgstr "Dempen"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Next item"
msgstr "Volgende item"
@@ -1710,17 +1869,15 @@ msgstr "Sluipen"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Special"
-msgstr ""
+msgstr "Speciaal"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle HUD"
-msgstr "Vliegen aan/uit"
+msgstr "Schakel HUD in/uit"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle chat log"
-msgstr "Snel bewegen aan/uit"
+msgstr "Chatlogboek wisselen"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
@@ -1731,23 +1888,20 @@ msgid "Toggle fly"
msgstr "Vliegen aan/uit"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle fog"
-msgstr "Vliegen aan/uit"
+msgstr "Schakel mist in/uit"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle minimap"
-msgstr "Noclip aan/uit"
+msgstr "Schakel mini-kaart in/uit"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Noclip aan/uit"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
-msgstr "Snel bewegen aan/uit"
+msgstr "Schakel pitchmove aan/uit"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -1774,18 +1928,22 @@ msgid "Exit"
msgstr "Terug"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy
msgid "Muted"
-msgstr "Dempen"
+msgstr "Gedempt"
#: src/gui/guiVolumeChange.cpp
msgid "Sound Volume: "
msgstr "Geluidsvolume: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Enter "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "nl"
@@ -1795,6 +1953,9 @@ msgid ""
"(Android) Fixes the position of virtual joystick.\n"
"If disabled, virtual joystick will center to first-touch's position."
msgstr ""
+"(Android) Corrigeert de positie van virtuele joystick. \n"
+"Indien uitgeschakeld, wordt de virtuele joystick gecentreerd op de positie "
+"van de eerste aanraking."
#: src/settings_translation_file.cpp
msgid ""
@@ -1802,9 +1963,11 @@ msgid ""
"If enabled, virtual joystick will also tap \"aux\" button when out of main "
"circle."
msgstr ""
+"(Android) Gebruik virtuele joystick om de \"aux\" -knop te activeren. \n"
+"Indien ingeschakeld, zal de virtuele joystick ook op de \"aux\" -knop tikken "
+"wanneer deze buiten de hoofdcirkel is."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1815,16 +1978,15 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-"(X,Y,Z)-afstand van de fractal, vanaf het centrum van de wereld, als "
-"veelvoud van de schaal.\n"
-"Te gebruiken om een geschikt geboortegebied met laaggelegen land in de buurt "
-"van (0,0)\n"
-"te krijgen.\n"
-"De standaardwaarde is geschikt voor Mandelbrot fractals. Aanpassing is nodig "
-"voor\n"
-"Julia fractals.\n"
-"Bereik: circa -2 tot +2. Vermenigvuldig dit met de 'schaal' voor de afstand "
-"in nodes."
+"X, Y, Z) offset van fractal van wereldcentrum in eenheden van 'schaal'. \n"
+"Kan worden gebruikt om een gewenst punt naar (0, 0) te verplaatsen om een \n"
+"geschikt spawnpunt, of om 'inzoomen' op een gewenst \n"
+"punt mogelijk te maken punt door 'schaal' te vergroten. \n"
+"De standaard is afgestemd op een geschikt spawn-punt voor Mandelbrot \n"
+"sets met standaardparameters, moet deze mogelijk in andere \n"
+"worden gewijzigd situaties. \n"
+"Bereik ongeveer -2 tot 2. Vermenigvuldig met 'schaal' voor offset in "
+"knooppunten."
#: src/settings_translation_file.cpp
msgid ""
@@ -1836,6 +1998,13 @@ 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) schaal van fractal in knooppunten. \n"
+"De werkelijke fractale grootte is 2 tot 3 keer groter. \n"
+"Deze getallen kunnen heel groot gemaakt worden, \n"
+"de fractal wel hoeven niet in de wereld te passen. \n"
+"Verhoog deze om te 'zoomen' tot in de details van de fractal. \n"
+"Standaard is voor een verticaal geplette vorm geschikt voor \n"
+"een eiland, stel alle 3 getallen gelijk voor de ruwe vorm."
#: src/settings_translation_file.cpp
msgid ""
@@ -1847,31 +2016,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr ""
+msgstr "2D-ruis die de vorm/grootte van geribbelde bergen bepaalt."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "2D-ruis die de vorm / grootte van glooiende heuvels bepaalt."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "2D-ruis die de vorm / grootte van step-bergen regelt."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
msgstr ""
+"2D-ruis die de grootte / het voorkomen van geribbelde bergketens regelt."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "2D-ruis die de grootte / het optreden van glooiende heuvels regelt."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr ""
+msgstr "2D-ruis die de grootte / het optreden van bergketens regelt."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "2D-ruis die de rivierdalen en -kanalen lokaliseert."
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -1882,6 +2052,11 @@ msgid "3D mode"
msgstr "3D modus"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Sterkte van normal-maps"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "3D geluid voor grote holtes."
@@ -1894,24 +2069,31 @@ msgstr ""
"Ook voor luchtdrijvende bergen."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "3D geluid voor wanden van diepe rivier kloof."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D noise defining terrain."
-msgstr "3D geluid voor grote holtes."
+msgstr "3D-ruisbepalend terrein."
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
msgstr ""
+"3D-ruis voor overhangende bergen, kliffen, etc. Meestal kleine variaties."
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "3D-ruis die het aantal kerkers per mapchunk bepaalt."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"3D support.\n"
"Currently supported:\n"
@@ -1930,18 +2112,18 @@ msgstr ""
"- anaglyph: 3D met de kleuren cyaan en magenta.\n"
"- interlaced: 3D voor polariserend scherm (even/oneven beeldlijnen).\n"
"- topbottom: 3D met horizontaal gedeeld scherm (boven/onder).\n"
-"- sidebyside: 3D met vertikaal gedeeld scherm (links/rechts).\n"
-"- pageflip: 3D met vier buffers ('quad buffer')."
+"- sidebyside: 3D met verticaal gedeeld scherm (links/rechts).\n"
+"- crossview: Schele 3d\n"
+"- pageflip: 3D met vier buffers ('quad buffer').\n"
+"Merk op dat de geïnterlinieerde modus vereist dat shaders zijn ingeschakeld."
#: 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 ""
-"Vooringesteld kiemgetal voor de wereld. Indien leeg, wordt een willekeurige\n"
-"waarde gekozen.\n"
-"Wanneer vanuit het hoofdmenu een nieuwe wereld gecreëerd wordt, kan een\n"
-"ander kiemgetal gekozen worden."
+"Een gekozen kaartzaad voor een nieuwe kaart, laat leeg voor willekeurig. \n"
+"Wordt overschreven bij het creëren van een nieuwe wereld in het hoofdmenu."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
@@ -1961,7 +2143,8 @@ msgid "ABM interval"
msgstr "Interval voor opslaan wereld"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "Maximaal aantal 'emerge' blokken in de wachtrij"
#: src/settings_translation_file.cpp
@@ -1970,16 +2153,15 @@ msgstr "Versnelling in lucht"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr ""
+msgstr "Versnelling van de zwaartekracht, in knopen per seconde per seconde."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
msgstr "Actieve blokken wijzigers (ABMs)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Active block management interval"
-msgstr "Bereik waarbinnen blokken actief zijn"
+msgstr "Actief blokbeheerinterval"
#: src/settings_translation_file.cpp
msgid "Active block range"
@@ -2008,8 +2190,18 @@ msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
-"Aangepaste DPI (dots per inch) instelling voor het scherm.\n"
-"Bijv. voor 4k schermen (niet voor X11 of Android)."
+"Pas de dpi-configuratie aan op uw scherm (alleen niet X11 / Android), b.v. "
+"voor 4k-schermen."
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2023,11 +2215,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Altitude chill"
-msgstr "Temperatuurverschil vanwege hoogte"
+"Verandert de lichtcurve door er 'gammacorrectie' op toe te passen. \n"
+"Hogere waarden maken het middelste en lagere lichtniveau helderder. \n"
+"Waarde '1.0' laat de lichtcurve ongewijzigd. \n"
+"Dit heeft alleen een significant effect op daglicht en kunstmatig \n"
+"licht, heeft het weinig effect op natuurlijk nachtlicht."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2035,16 +2227,15 @@ msgstr "Zet 'snel' altijd aan bij 'vliegen'"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
-msgstr "Ambient occlusion gamma"
+msgstr "omringende Occlusie gamma"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "Aantal berichten dat een speler per 10 seconden mag verzenden."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Amplifies the valleys."
-msgstr "Vergroot de valleien"
+msgstr "Versterkt de valleien."
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
@@ -2055,17 +2246,16 @@ msgid "Announce server"
msgstr "Meldt server aan bij de server-lijst"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Announce to this serverlist."
-msgstr "Meldt server aan bij de server-lijst"
+msgstr "Kondig aan op deze serverlijst."
#: src/settings_translation_file.cpp
msgid "Append item name"
-msgstr ""
+msgstr "Voeg itemnaam toe"
#: src/settings_translation_file.cpp
msgid "Append item name to tooltip."
-msgstr ""
+msgstr "Voeg itemnaam toe aan knopinfo."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
@@ -2073,20 +2263,21 @@ msgstr "Appel boom geluid"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
-msgstr ""
+msgstr "Arm traagheid"
#: src/settings_translation_file.cpp
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
+"Arm traagheid, geeft een meer realistische beweging van \n"
+"de arm wanneer de camera beweegt."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
msgstr "verbinding herstellen na een server-crash"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"At this distance the server will aggressively optimize which blocks are sent "
"to\n"
@@ -2100,29 +2291,30 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
-"Op deze afstand zal de server agressief optimaliseren welke blokken naar de "
-"cliënt worden gezonden.\n"
-"Kleine waarden kunnen prestaties verbeteren ten koste van zichtbare fouten "
-"in de weergave.\n"
-"(sommige blokken onder water en in grotten en soms op land zullen niet "
-"worden weergegeven)\n"
-"Indien deze waarde groter is dan max_block_send_distance is deze "
-"optimalisatie uitgeschakeld.\n"
-"Getal duidt het aantal mapblocks aan (16 nodes)"
+"Op deze afstand zal de server agressief optimaliseren naar welke blokken "
+"gestuurd worden \n"
+"gebruikers. \n"
+"Kleine waarden kunnen de prestaties mogelijk aanzienlijk verbeteren, ten "
+"koste van zichtbaar \n"
+"rendering glitches (sommige blokken worden niet onder water en in grotten "
+"weergegeven, \n"
+"evenals soms op het land). \n"
+"Als u dit instelt op een waarde die groter is dan max_block_send_distance, "
+"wordt dit uitgeschakeld \n"
+"optimalisatie. \n"
+"Vermeld in mapblocks (16 blokken)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatic forward key"
-msgstr "Vooruit toets"
+msgstr "Automatisch Vooruit toets"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "Spring automatisch op obstakels met één knooppunt."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatically report to the serverlist."
-msgstr "Meldt de server automatisch aan bij de serverlijst."
+msgstr "Server automatisch aan melden bij de serverlijst."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
@@ -2130,30 +2322,27 @@ msgstr "Scherm afmetingen automatisch bewaren"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "Automatische schaalmodus"
#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Achteruit"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Base ground level"
-msgstr "Grondniveau"
+msgstr "Basis grondniveau"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Base terrain height."
-msgstr "Basishoogte van terrein"
+msgstr "Basis terrein hoogte."
#: src/settings_translation_file.cpp
msgid "Basic"
msgstr "Basis"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Basic privileges"
-msgstr "Basisvoorrechten"
+msgstr "Basis rechten"
#: src/settings_translation_file.cpp
msgid "Beach noise"
@@ -2172,14 +2361,12 @@ msgid "Bind address"
msgstr "Lokaal server-adres"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Biome API temperature and humidity noise parameters"
-msgstr "Vochtigheid ruisparameters"
+msgstr "Biome API parameters voor temperatuur- en vochtigheidsruis"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Biome noise"
-msgstr "Rivier ruis parameters"
+msgstr "Biome-ruis"
#: src/settings_translation_file.cpp
msgid "Bits per pixel (aka color depth) in fullscreen mode."
@@ -2188,27 +2375,23 @@ msgstr "Aantal bits per pixel (oftewel: kleurdiepte) in full-screen modus."
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Block send optimize distance"
-msgstr "Maximale afstand voor te versturen blokken"
+msgstr "Blok verzend optimaliseren afstand"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Vaste-breedte font pad"
+msgstr "Vet en cursief pad"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Vaste-breedte font pad"
+msgstr "Vet en cursief monospace-lettertypepad"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Font pad"
+msgstr "Vet lettertypepad"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Vaste-breedte font pad"
+msgstr "Vet monospace-lettertypepad"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2224,11 +2407,16 @@ msgstr "Bumpmapping"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
+"Camera 'near clipping plane' afstand in knooppunten, tussen 0 en 0,25 \n"
+"Werkt alleen op GLES-platforms. De meeste gebruikers hoeven dit niet te "
+"wijzigen. \n"
+"Verhogen kan artefacten op zwakkere GPU's verminderen. \n"
+"0,1 = standaard, 0,25 = goede waarde voor zwakkere tablets."
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
@@ -2236,16 +2424,15 @@ msgstr "Vloeiender camerabeweging"
#: src/settings_translation_file.cpp
msgid "Camera smoothing in cinematic mode"
-msgstr "Vloeiender camerabeweging (in cinematic modus)"
+msgstr "Vloeiendere camerabeweging (in cinematic modus)"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
-msgstr "Toets voor cameraverversing aan/uit"
+msgstr "Toets voor het aan of uit schakelen van cameraverversing"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cave noise"
-msgstr "Grot ruispatroon #1"
+msgstr "Grot ruis"
#: src/settings_translation_file.cpp
msgid "Cave noise #1"
@@ -2260,44 +2447,40 @@ msgid "Cave width"
msgstr "Grot breedte"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cave1 noise"
-msgstr "Grot ruispatroon #1"
+msgstr "Grot1 ruis"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cave2 noise"
-msgstr "Grot ruispatroon #1"
+msgstr "Grot2 ruis"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cavern limit"
-msgstr "Grot breedte"
+msgstr "Grot limiet"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cavern noise"
-msgstr "Grot ruispatroon #1"
+msgstr "Grot ruis"
#: src/settings_translation_file.cpp
msgid "Cavern taper"
msgstr "Grot hoogtepunt"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cavern threshold"
-msgstr "Heuvel-grenswaarde"
+msgstr "Grot drempel"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cavern upper limit"
-msgstr "Grot breedte"
+msgstr "Bovengrens grot"
#: 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 ""
+"Midden van het lichtcurve-boostbereik. \n"
+"Waar 0,0 het minimale lichtniveau is, is 1,0 het maximale lichtniveau."
#: src/settings_translation_file.cpp
msgid ""
@@ -2308,6 +2491,17 @@ msgid ""
"be\n"
"necessary for smaller screens."
msgstr ""
+"Verandert de gebruikersinterface van het hoofdmenu: \n"
+"- Volledig: meerdere werelden voor één speler, spelkeuze, de kiezer van "
+"textuurpak, etc. \n"
+"- Eenvoudig: één wereld voor één speler, geen game- of texture pack-kiezers. "
+"Kan zijn \n"
+"noodzakelijk voor kleinere schermen."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Lettergrootte"
#: src/settings_translation_file.cpp
msgid "Chat key"
@@ -2315,22 +2509,24 @@ msgstr "Chat-toets"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat log level"
+msgstr "Debug logniveau"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr "Status bericht bij verbinding"
+msgstr "Limiet aantal chatberichten"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
-msgstr "Status bericht bij verbinding"
+msgstr "Chatbericht formaat"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message kick threshold"
-msgstr "Woestijn ruis drempelwaarde"
+msgstr "Drempel voor kick van chatbericht"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr ""
+msgstr "Maximale lengte chatbericht"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
@@ -2354,7 +2550,7 @@ msgstr "Cinematic modus aan/uit toets"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
-msgstr "Schoonmaken Transparante texturen"
+msgstr "Schone transparante texturen"
#: src/settings_translation_file.cpp
msgid "Client"
@@ -2370,13 +2566,12 @@ msgid "Client modding"
msgstr "Cliënt modding"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Client side modding restrictions"
-msgstr "Cliënt modding"
+msgstr "Aanpassingen aan clientzijde"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
-msgstr ""
+msgstr "Clientzijde blok opzoekbereikbeperking"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
@@ -2412,15 +2607,24 @@ msgid ""
"These flags are independent from Minetest versions,\n"
"so see a full list at https://content.minetest.net/help/content_flags/"
msgstr ""
+"Door komma's gescheiden lijst met vlaggen om te verbergen in de "
+"inhoudsbibliotheek. \n"
+"\"nonfree\" kan gebruikt worden om pakketten te verbergen die niet "
+"kwalificeren als 'vrije software', \n"
+"zoals gedefinieerd door de Free Software Foundation. \n"
+"U kunt ook inhoudsclassificaties specificeren. \n"
+"Deze vlaggen zijn onafhankelijk van Minetest-versies, \n"
+"zie dus een volledige lijst op https://content.minetest.net/help/"
+"content_flags/"
#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
"allow them to upload and download data to/from the internet."
msgstr ""
-"Lijst van mods die HTTP mogen gebruiken. Deze mods kunnen gegevens uploaden\n"
-"naar en downloaden van het internet.\n"
-"Gescheiden door komma's."
+"Door komma's gescheiden lijst met mods die toegang hebben tot HTTP API's, "
+"die \n"
+"sta hen toe om gegevens van / naar internet te uploaden en te downloaden."
#: src/settings_translation_file.cpp
msgid ""
@@ -2434,7 +2638,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Command key"
-msgstr "Opdracht-toets"
+msgstr "Commando-toets"
#: src/settings_translation_file.cpp
msgid "Connect glass"
@@ -2446,7 +2650,8 @@ msgstr "Gebruik van externe media-server toestaan"
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
-msgstr "Verbind glas-nodes met elkaar (indien ondersteund door het type node)."
+msgstr ""
+"Verbind glas-nodes met elkaar (indien ondersteund door het type node/blok)."
#: src/settings_translation_file.cpp
msgid "Console alpha"
@@ -2457,18 +2662,17 @@ msgid "Console color"
msgstr "Console-kleur"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Console height"
-msgstr "Console hoogte"
+msgstr "Hoogte console"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "ContentDB Flag Blacklist"
-msgstr ""
+msgstr "ContentDB markeert zwarte lijst"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB URL"
-msgstr "Verder spelen"
+msgstr "ContentDB-URL"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
@@ -2479,28 +2683,28 @@ msgid ""
"Continuous forward movement, toggled by autoforward key.\n"
"Press the autoforward key again or the backwards movement to disable."
msgstr ""
+"Continue voorwaartse beweging, geschakeld door autoforward-toets. \n"
+"Druk nogmaals op de autoforward-toets of de achterwaartse beweging om uit te "
+"schakelen."
#: src/settings_translation_file.cpp
msgid "Controls"
msgstr "Besturing"
#: 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 ""
-"Bepaalt de lengte van de dag/nacht cyclus\n"
-"Voorbeelden:\n"
-"72 = 20min\n"
-"360 = 4min\n"
-"1 = 24 uur\n"
-"0 = de kloktijd (dag, nacht, schemering) verandert niet."
+"Regelt de lengte van de dag/nacht-cyclus. \n"
+"Voorbeelden: \n"
+"72 = 20 min, 360 = 4 min, 1 = 24 uur, 0 = dag nacht /wat dan ook onveranderd "
+"blijft."
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
-msgstr ""
+msgstr "Regelt de zinksnelheid in vloeistof."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2516,10 +2720,15 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Bepaalt de breedte van tunnels, een kleinere waarde creëert bredere "
+"tunnels. \n"
+"Waarde> = 10,0 schakelt het genereren van tunnels volledig uit en vermijdt "
+"de \n"
+"intensieve geluidsberekeningen."
#: src/settings_translation_file.cpp
msgid "Crash message"
-msgstr "Crash boodschap"
+msgstr "Crashbericht"
#: src/settings_translation_file.cpp
msgid "Creative"
@@ -2547,33 +2756,31 @@ msgstr "Scherm DPI"
#: src/settings_translation_file.cpp
msgid "Damage"
-msgstr "Verwondingen"
+msgstr "Verwondingen/schade"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
msgstr "Toets voor aan/uitzetten debug informatie"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Debug log file size threshold"
-msgstr "Woestijn ruis drempelwaarde"
+msgstr "Debug logbestand drempel"
#: src/settings_translation_file.cpp
msgid "Debug log level"
msgstr "Debug logniveau"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dec. volume key"
msgstr "Volume verlagen toets"
#: src/settings_translation_file.cpp
msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgstr "Verlaag dit om de vloeistofweerstand te vergroten."
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
-msgstr "Tijdsstaplengte van de server"
+msgstr "Toegewijde serverstap"
#: src/settings_translation_file.cpp
msgid "Default acceleration"
@@ -2597,13 +2804,18 @@ msgstr "Standaardwachtwoord"
#: src/settings_translation_file.cpp
msgid "Default privileges"
-msgstr "Standaard voorrechten"
+msgstr "Standaard rechten"
#: src/settings_translation_file.cpp
msgid "Default report format"
msgstr "Standaardformaat voor rapport-bestanden"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Standaardspel"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2620,16 +2832,12 @@ msgid "Defines areas with sandy beaches."
msgstr "Bepaalt gebieden met zandstranden."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines distribution of higher terrain and steepness of cliffs."
-msgstr ""
-"Bepaalt gebieden van hoger (rotswand-top) terrein en de steilte van de "
-"rotswand."
+msgstr "Definieert de verdeling van hoger terrein en steilheid van kliffen."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines distribution of higher terrain."
-msgstr "Bepaalt gebieden van 'terrain_higher' (rotswand-top terrein)."
+msgstr "Definieert de verdeling van hoger terrein."
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
@@ -2653,14 +2861,12 @@ msgstr ""
"Een hogere waarde geeft vloeiender normal maps."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the base ground level."
-msgstr "Bepaalt de gebieden met bomen en hun dichtheid."
+msgstr "Definieert het basisgrondniveau."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the depth of the river channel."
-msgstr "Bepaalt de gebieden met bomen en hun dichtheid."
+msgstr "Definieert de diepte van het rivierkanaal."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
@@ -2670,14 +2876,12 @@ msgstr ""
"(0 = oneindig ver)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river channel."
-msgstr "Bepaalt de grootschalige rivierkanaal structuren."
+msgstr "Definieert de breedte van het rivierkanaal."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river valley."
-msgstr "Bepaalt gebieden met appels in de bomen."
+msgstr "Definieert de breedte van de riviervallei."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
@@ -2705,9 +2909,8 @@ msgid "Deprecated Lua API handling"
msgstr "Gedrag bij gebruik van verouderde Lua API functies"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Depth below which you'll find giant caverns."
-msgstr "Diepte waaronder je grote grotten vind."
+msgstr "Diepte waaronder je gigantische grotten vindt."
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find large caves."
@@ -2726,20 +2929,18 @@ msgid "Desert noise threshold"
msgstr "Woestijn ruis drempelwaarde"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Deserts occur when np_biome exceeds this value.\n"
"When the 'snowbiomes' flag is enabled, this is ignored."
msgstr ""
-"Woestijnen ontstaan wanneer np_biome deze waarde overstijgt.\n"
-"Indien het nieuwe biome systeem is ingeschakeld wordt dit genegeerd."
+"Woestijnen treden op wanneer np_biome deze waarde overschrijdt. \n"
+"Als de vlag 'snowbiomes' is ingeschakeld, wordt dit genegeerd."
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
msgstr "Textuur-animaties niet synchroniseren"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Digging particles"
msgstr "Graaf deeltjes"
@@ -2768,28 +2969,28 @@ msgid "Drop item key"
msgstr "Weggooi-toets"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dump the mapgen debug information."
-msgstr "Print wereldgenerator debug informatie."
+msgstr "Dump de mapgen-debug informatie."
#: src/settings_translation_file.cpp
msgid "Dungeon maximum Y"
-msgstr ""
+msgstr "Dungeon maximaal Y"
#: src/settings_translation_file.cpp
msgid "Dungeon minimum Y"
-msgstr ""
+msgstr "Dungeon minimaal Y"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dungeon noise"
-msgstr "Bergen ruis"
+msgstr "Kerker ruis"
#: src/settings_translation_file.cpp
msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Schakel IPv6-ondersteuning in (voor zowel client als server). \n"
+"Vereist om IPv6-verbindingen te laten werken."
#: src/settings_translation_file.cpp
msgid ""
@@ -2808,14 +3009,12 @@ msgid "Enable creative mode for new created maps."
msgstr "Schakel creatieve modus in voor nieuwe kaarten."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable joysticks"
-msgstr "Joysticks aanzetten"
+msgstr "Schakel joysticks in"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable mod channels support."
-msgstr "Veilige modus voor mods aanzetten"
+msgstr "Ondersteuning voor mod-kanalen inschakelen."
#: src/settings_translation_file.cpp
msgid "Enable mod security"
@@ -2831,13 +3030,15 @@ msgstr "Schakel willkeurige invoer aan (enkel voor testen)."
#: src/settings_translation_file.cpp
msgid "Enable register confirmation"
-msgstr ""
+msgstr "Registerbevestiging inschakelen"
#: src/settings_translation_file.cpp
msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
+"Schakel registerbevestiging in wanneer u verbinding maakt met de server. \n"
+"Indien uitgeschakeld, wordt een nieuw account automatisch geregistreerd."
#: src/settings_translation_file.cpp
msgid ""
@@ -2879,6 +3080,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Vertex-bufferobjecten inschakelen. \n"
+"Dit zou de grafische prestaties aanzienlijk moeten verbeteren."
#: src/settings_translation_file.cpp
msgid ""
@@ -2892,15 +3095,14 @@ msgstr ""
"2.0 voor twee keer grotere loopbeweging."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
-"Schakel IPv6 in voor de server. Afhankelijk van de systeemconfiguratie\n"
-"kan dit tot gevolg hebben dat enkel IPv6 cliënten verbinding kunnen maken\n"
-"Deze instelling wordt genegeerd als een lokaal server-adres ingesteld is."
+"Schakel het uitvoeren van een IPv6-server in/uit. \n"
+"Wordt genegeerd als bind_address is ingesteld. \n"
+"Moet inschakelen_ipv6 moet worden ingeschakeld."
#: src/settings_translation_file.cpp
msgid ""
@@ -2909,6 +3111,11 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Maakt Hable's 'Uncharted 2' filmische tonemapping mogelijk. \n"
+"Simuleert de tooncurve van fotografische film en hoe deze de \n"
+"uiterlijk van afbeeldingen met een hoog dynamisch bereik. Het contrast in "
+"het middenbereik is iets \n"
+"verbeterd, worden hooglichten en schaduwen geleidelijk gecomprimeerd."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -2957,6 +3164,10 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Schakelt het geluidssysteem in. \n"
+"Als deze optie is uitgeschakeld, worden alle geluiden overal en in de game \n"
+"volledig uitgeschakeld geluidsbesturingen zullen niet functioneel zijn. \n"
+"Het wijzigen van deze instelling vereist een herstart."
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -2975,6 +3186,16 @@ msgstr ""
"ruimtes tussen blokken tot gevolg hebben."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS in het pauze-menu"
@@ -2987,14 +3208,12 @@ msgid "Factor noise"
msgstr "Ruis factor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fall bobbing factor"
-msgstr "Loopbeweging bij vallen"
+msgstr "Val dobberende factor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Terugval-font"
+msgstr "Terugvallettertype"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -3025,13 +3244,12 @@ msgid "Fast movement"
msgstr "Snelle modus"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Fast movement (via the \"special\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Snelle beweging toestaan (met de \"gebruiken\" toets).\n"
-"Het \"fast\" voorrecht is vereist op de server."
+"Snelle beweging (via de \"speciale\" toets). \n"
+"Dit vereist het \"snelle\" recht op de server."
#: src/settings_translation_file.cpp
msgid "Field of view"
@@ -3042,24 +3260,22 @@ msgid "Field of view in degrees."
msgstr "Zichthoek in graden."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"File in client/serverlist/ that contains your favorite servers displayed in "
"the\n"
"Multiplayer Tab."
msgstr ""
-"Bestand in de map 'client/serverlist/' met favoriete servers die getoond\n"
-"worden in de multiplayer tab."
+"Bestand in client / serverlijst / dat uw favoriete servers bevat die worden "
+"weergegeven in de \n"
+"Tabblad Multiplayer."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Filler depth"
-msgstr "Filler Diepte"
+msgstr "Vuldiepte"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Filler depth noise"
-msgstr "Filler Diepte"
+msgstr "Vuldiepte ruis"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
@@ -3099,7 +3315,42 @@ msgstr "Vast kiemgetal"
#: src/settings_translation_file.cpp
msgid "Fixed virtual joystick"
-msgstr ""
+msgstr "Vaste virtuele joystick"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "Drijvend gebergte dichtheid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "Dungeon maximaal Y"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "Dungeon minimaal Y"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Drijvend land basis ruis"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "Drijvend gebergte dichtheid"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Drijvend land basis ruis"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Waterniveau"
#: src/settings_translation_file.cpp
msgid "Fly key"
@@ -3124,11 +3375,11 @@ msgstr "Mist aan/uitschakelen toets"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Standaard vetgedrukt"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Standaard cursief"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3144,14 +3395,20 @@ msgstr "Lettergrootte"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "Lettergrootte van het standaardlettertype in punt (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "Lettergrootte van het fallback-lettertype in punt (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "Lettergrootte van het monospace-lettertype in punt (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 ""
#: src/settings_translation_file.cpp
@@ -3160,6 +3417,9 @@ msgid ""
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
+"Formaat van chatberichten van spelers. De volgende tekenreeksen zijn geldige "
+"tijdelijke aanduidingen: \n"
+"@name, @message, @timestamp (optioneel)"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
@@ -3167,19 +3427,19 @@ msgstr "Formaat van screenshots."
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Color"
-msgstr ""
+msgstr "Formspec Standaard achtergrondkleur"
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Opacity"
-msgstr ""
+msgstr "Formspec Standaard achtergronddekking"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Color"
-msgstr ""
+msgstr "Formspec Achtergrondkleur op volledig scherm"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Opacity"
-msgstr ""
+msgstr "Formspec Achtergronddekking op volledig scherm"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3248,6 +3508,13 @@ msgid ""
"to maintain active objects up to this distance in the direction the\n"
"player is looking. (This can avoid mobs suddenly disappearing from view)"
msgstr ""
+"Van hoe ver klanten weten over objecten, vermeld in mapblocks (16 "
+"knooppunten). \n"
+"\n"
+"Het instellen van dit groter dan active_block_range zal ook de server \n"
+"veroorzaken om actieve objecten tot deze afstand in de richting \n"
+"van de speler kijkt. (Dit kan voorkomen dat mobs plotseling uit het zicht "
+"verdwijnen)"
#: src/settings_translation_file.cpp
msgid "Full screen"
@@ -3302,12 +3569,16 @@ msgid ""
"Gradient of light curve at maximum light level.\n"
"Controls the contrast of the highest light levels."
msgstr ""
+"Verloop van lichtkromme bij maximaal lichtniveau. \n"
+"Regelt het contrast van de hoogste lichtniveaus."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at minimum light level.\n"
"Controls the contrast of the lowest light levels."
msgstr ""
+"Verloop van lichtkromme bij minimaal lichtniveau. \n"
+"Regelt het contrast van de laagste lichtniveaus."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3366,9 +3637,8 @@ msgid ""
msgstr ""
"Laat de profiler zichzelf profileren:\n"
"* Profileer een lege functie.\n"
-" Dit geeft een schatting van de CPU-tijd die door de profiler zelf "
-"gebruikt wordt,\n"
-" ten koste van één extra functie-aanroep.\n"
+" Dit geeft een schatting van de CPU-tijd die door de profiler zelf gebruikt "
+"wordt (+1 functie-aanroep).\n"
"* Profileer de code die de statistieken ververst."
#: src/settings_translation_file.cpp
@@ -3434,22 +3704,31 @@ msgid "Homepage of server, to be displayed in the serverlist."
msgstr "Home-pagina van de server. Wordt getoond in de serverlijst."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
+"Horizontale acceleratie in lucht bij springen of vallen, \n"
+"in knooppunten per seconde per seconde."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Horizontal and vertical acceleration in fast mode,\n"
"in nodes per second per second."
msgstr ""
+"Horizontale en verticale acceleratie in snelle modus, \n"
+"in knooppunten per seconde per seconde."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Horizontal and vertical acceleration on ground or when climbing,\n"
"in nodes per second per second."
msgstr ""
+"Horizontale en verticale acceleratie op de grond of bij het klimmen, \n"
+"in knooppunten per seconde per seconde."
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
@@ -3620,9 +3899,8 @@ msgid "Hotbar slot 9 key"
msgstr "Toets voor volgend gebruikte tool"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "How deep to make rivers."
-msgstr "Diepte van de rivieren"
+msgstr "Diepte van de rivieren."
#: src/settings_translation_file.cpp
msgid ""
@@ -3630,6 +3908,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Hoe snel vloeibare golven zullen bewegen. Hoger = sneller. \n"
+"Indien negatief, zullen vloeibare golven achteruit bewegen. \n"
+"Vereist dat golvende vloeistoffen zijn ingeschakeld."
#: src/settings_translation_file.cpp
msgid ""
@@ -3641,9 +3922,8 @@ msgstr ""
"geheugen."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "How wide to make rivers."
-msgstr "Breedte van rivieren"
+msgstr "Breedte van rivieren."
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
@@ -3746,6 +4026,8 @@ msgid ""
"If enabled, makes move directions relative to the player's pitch when flying "
"or swimming."
msgstr ""
+"Indien ingeschakeld, maakt verplaatsingsrichtingen ten opzichte van het veld "
+"van de speler tijdens het vliegen of zwemmen."
#: src/settings_translation_file.cpp
msgid "If enabled, new players cannot join with an empty password."
@@ -3768,6 +4050,9 @@ msgid ""
"limited\n"
"to this distance from the player to the node."
msgstr ""
+"Als de CSM-beperking voor het blok is ingeschakeld, zijn get_node-aanroepen "
+"beperkt \n"
+"tot deze afstand van de speler tot het blok."
#: src/settings_translation_file.cpp
msgid ""
@@ -3776,6 +4061,12 @@ msgid ""
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
+"Als de bestandsgrootte van debug.txt groter is dan het aantal megabytes dat "
+"is opgegeven in \n"
+"deze instelling wanneer het wordt geopend, wordt het bestand verplaatst naar "
+"debug.txt.1, \n"
+"het verwijderen van een oudere debug.txt.1 als deze bestaat. \n"
+"debug.txt wordt alleen verplaatst als deze instelling positief is."
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
@@ -3812,7 +4103,7 @@ msgstr "Console-toets"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr ""
+msgstr "Verticale beginsnelheid tijdens springen, in blokken per seconde."
#: src/settings_translation_file.cpp
msgid ""
@@ -3869,7 +4160,7 @@ msgstr "Inventaris items animaties"
#: src/settings_translation_file.cpp
msgid "Inventory key"
-msgstr "Rugzak toets"
+msgstr "Inventaristoets"
#: src/settings_translation_file.cpp
msgid "Invert mouse"
@@ -3905,6 +4196,12 @@ msgid ""
"increases processing load.\n"
"At iterations = 20 this mapgen has a similar load to mapgen V7."
msgstr ""
+"Aantal iteraties van de recursieve functie.\n"
+"Het groter maken hiervan zorgt voor een toename in fijne details, maar zorgt "
+"ook \n"
+"voor een toename in processorgebruik.\n"
+"Bij iteraties = 20 heeft deze mapgen een vergelijkbare belasting als mapgen "
+"V7."
#: src/settings_translation_file.cpp
msgid "Joystick ID"
@@ -4737,11 +5034,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
+"Schop spelers die meer dan X berichten per 10 seconden hebben verzonden."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lake steepness"
-msgstr "Steilheid Van de meren"
+msgstr "Steilheid van meren"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4758,15 +5055,15 @@ msgstr "Diepte van grote grotten"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Maximaal aantal grote grotten"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Groot minimumaantal grotten"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Grote grotaandeel overstroomd"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -4850,35 +5147,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Light curve boost"
-msgstr ""
+msgstr "Lichtcurve boost"
#: src/settings_translation_file.cpp
msgid "Light curve boost center"
-msgstr ""
+msgstr "Lichtcurve boost centrum"
#: src/settings_translation_file.cpp
msgid "Light curve boost spread"
-msgstr ""
+msgstr "Lichtcurve boost verspreiding"
#: src/settings_translation_file.cpp
msgid "Light curve gamma"
-msgstr ""
+msgstr "Lichtcurve gamma"
#: src/settings_translation_file.cpp
msgid "Light curve high gradient"
-msgstr ""
+msgstr "Lichtcurve hoog verloop"
#: src/settings_translation_file.cpp
msgid "Light curve low gradient"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Emerge-wachtrij voor lezen"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Emerge-wachtrij voor genereren"
+msgstr "Lichtcurve laag verloop"
#: src/settings_translation_file.cpp
msgid ""
@@ -4955,7 +5244,12 @@ msgstr "Geladen blokken aanpassers (LBMs)"
#: src/settings_translation_file.cpp
msgid "Lower Y limit of dungeons."
-msgstr ""
+msgstr "Onderste Y-limiet van kerkers."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "Onderste Y-limiet van kerkers."
#: src/settings_translation_file.cpp
msgid "Main menu script"
@@ -4988,7 +5282,7 @@ msgstr "Wereld map"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen Carpathian."
-msgstr ""
+msgstr "Wereldgeneratieattributen specifiek aan Mapgen Carpathian."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5024,10 +5318,16 @@ msgid ""
"to become shallower and occasionally dry.\n"
"'altitude_dry': Reduces humidity with altitude."
msgstr ""
+"Wereldgeneratieattributen specifiek aan Mapgen Valleys.\n"
+"'altitude_chill': Hoe groter de hoogte, hoe lager de temperatuur.\n"
+"'humid_rivers': Hogere vochtigheidsgraad rond rivieren.\n"
+"'vary_river_depth': Lage vochtigheidsgraad en hoge temperatuur\n"
+"zorgen ervoor dat rivieren smaller worden en uiteindelijk uitdrogen.\n"
+"'altitude_dry': Hoe groter de hoogte, hoe lager de vochtigheidsgraad."
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen v5."
-msgstr ""
+msgstr "Wereldgenerator instellingen specifiek voor Mapgen V5."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5045,10 +5345,16 @@ msgstr ""
"Zet \"no\" voor een vlag om hem expliciet uit te zetten."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
+"Kenmerken voor het genereren van kaarten die specifiek zijn voor Mapgen "
+"v7. \n"
+"'richels' maakt de rivieren mogelijk."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -5150,10 +5456,6 @@ msgid "Mapgen debug"
msgstr "Wereldgenerator debug"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Wereldgenerator vlaggen"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Wereldgenerator"
@@ -5197,17 +5499,20 @@ msgstr "Maximale breedte van de 'hotbar'"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Maximale limiet van willekeurig aantal grote grotten per mapchunk."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Maximale limiet van willekeurig aantal kleine grotten per mapchunk."
#: src/settings_translation_file.cpp
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
+"Maximale vloeistofweerstand. Regelt de vertraging bij het invoeren van "
+"vloeistof op \n"
+"hoge snelheid."
#: src/settings_translation_file.cpp
msgid ""
@@ -5215,23 +5520,28 @@ msgid ""
"The maximum total count is calculated dynamically:\n"
"max_total = ceil((#clients + max_users) * per_client / 4)"
msgstr ""
+"Maximum aantal blokken dat tegelijkertijd verzonden kan worden\n"
+"per client. Het totale maximum wordt dynamisch berekend:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that can be queued for loading."
msgstr "Maximaal aantal blokken in de wachtrij voor laden/genereren."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Maximaal aantal blokken in de wachtrij om gegenereerd te worden.\n"
"Laat leeg om een geschikt aantal automatisch te laten berekenen."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Maximaal aantal blokken in de wachtrij om van disk geladen te worden.\n"
"Laat leeg om een geschikt aantal automatisch te laten berekenen."
@@ -5262,14 +5572,12 @@ msgstr ""
"dat gelijk verbonden kan zijn."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum number of players that can be connected simultaneously."
-msgstr "Maximaal aantal spelers dat tegelijk verbonden kan zijn."
+msgstr "Maximaal aantal spelers dat tegelijkertijd verbonden kan zijn."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum number of recent chat messages to show"
-msgstr "Maximaal aantal geforceerd geladen blokken."
+msgstr "Maximaal aantal zichtbare recente chatberichten"
#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
@@ -5294,13 +5602,15 @@ msgstr "Maximaal simultaan verzonden blokken per cliënt"
#: src/settings_translation_file.cpp
msgid "Maximum size of the out chat queue"
-msgstr ""
+msgstr "Maximale omvang van de wachtrij uitgezonden berichten"
#: src/settings_translation_file.cpp
msgid ""
"Maximum size of the out chat queue.\n"
"0 to disable queueing and -1 to make the queue size unlimited."
msgstr ""
+"Maximale omvang van de wachtrij uitgezonden berichten.\n"
+"'0' om de wachtrij uit te schakelen en '-1' om de wachtrij oneindig te maken."
#: src/settings_translation_file.cpp
msgid "Maximum time in ms a file download (e.g. a mod download) may take."
@@ -5336,6 +5646,10 @@ msgstr ""
"* halo: node licht op."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Mini-kaart"
@@ -5349,11 +5663,11 @@ msgstr "Mini-kaart scan-hoogte"
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Minimumlimiet van willekeurig aantal grote grotten per mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Minimale limiet van willekeurig aantal kleine grotten per mapchunk."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5366,7 +5680,7 @@ msgstr "Mip-Mapping"
#: src/settings_translation_file.cpp
msgid "Mod channels"
-msgstr ""
+msgstr "Mod-kanalen"
#: src/settings_translation_file.cpp
msgid "Modifies the size of the hudbar elements."
@@ -5395,9 +5709,8 @@ msgid "Mountain variation noise"
msgstr "Heuvel-hoogte ruisparameters"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mountain zero level"
-msgstr "Bergen ruis"
+msgstr "Nulniveau bergen"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
@@ -5428,7 +5741,7 @@ msgstr "Demp toets"
#: src/settings_translation_file.cpp
msgid "Mute sound"
-msgstr ""
+msgstr "Geluid dempen"
#: src/settings_translation_file.cpp
msgid ""
@@ -5437,6 +5750,11 @@ msgid ""
"Current mapgens in a highly unstable state:\n"
"- The optional floatlands of v7 (disabled by default)."
msgstr ""
+"Naam van de wereldgenerator die gebruikt moet worden om een nieuwe wereld "
+"aan te maken. \n"
+"Een nieuwe wereld aanmaken in het hoofdmenu heeft echter voorrang.\n"
+"Huidige wereldgeneratoren in zeer instabiele staat:\n"
+"- De optionele zweeflanden van v7 (standaard uitgeschakeld)."
#: src/settings_translation_file.cpp
msgid ""
@@ -5457,8 +5775,8 @@ msgstr ""
"inloggen."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
-msgstr ""
+msgid "Near plane"
+msgstr "Dichtbij vliegtuig"
#: src/settings_translation_file.cpp
msgid "Network"
@@ -5509,11 +5827,9 @@ msgid "Number of emerge threads"
msgstr "Aantal 'emerge' threads"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5524,6 +5840,23 @@ 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 ""
+"Aantal te gebruiken emerge-threads. \n"
+"WAARSCHUWING: Momenteel zijn er meerdere bugs die crashes kunnen veroorzaken "
+"wanneer \n"
+"'num_emerge_threads' is groter dan 1. Totdat deze waarschuwing is "
+"verwijderd, is dat \n"
+"zo sterk aanbevolen deze waarde is ingesteld op de standaard '1'. \n"
+"Waarde 0: \n"
+"- Automatische selectie. Het aantal emerge threads zal zijn \n"
+"- 'aantal processors - 2', met een ondergrens van 1. \n"
+"Elke andere waarde: \n"
+"- Specificeert het aantal emerge threads, met een ondergrens van 1. \n"
+"WAARSCHUWING: Door het aantal emerge threads te vergroten, worden de motor "
+"mapgen \n"
+"vergroot snelheid, maar dit kan de spelprestaties schaden door interfereren "
+"met andere \n"
+"processen, vooral in singleplayer en/of bij het uitvoeren van Lua-code in \n"
+"'on_generated'. Voor veel gebruikers kan de optimale instelling '1' zijn."
#: src/settings_translation_file.cpp
msgid ""
@@ -5544,21 +5877,25 @@ msgstr "Aantal parallax occlusie iteraties."
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
-msgstr ""
+msgstr "Online inhoud repository"
#: src/settings_translation_file.cpp
msgid "Opaque liquids"
-msgstr "Ondoorschijnende vloeistoffen"
+msgstr "Ondoorzichtige vloeistoffen"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
msgstr ""
+"Ondoorzichtigheid (alpha) van de schaduw achter het standaardlettertype, "
+"tussen 0 en 255."
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
msgstr ""
+"Ondoorzichtigheid (alpha) van de schaduw achter het fallback-lettertype, "
+"tussen 0 en 255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5566,6 +5903,8 @@ msgid ""
"formspec is\n"
"open."
msgstr ""
+"Pauzemenu openen als het venster focus verliest. Pauzeert niet als er\n"
+"een formspec geopend is."
#: src/settings_translation_file.cpp
msgid "Overall bias of parallax occlusion effect, usually scale/2."
@@ -5598,10 +5937,6 @@ msgid "Parallax occlusion scale"
msgstr "Parallax occlusie schaal"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Parallax occlusie sterkte"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5609,10 +5944,19 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Pad van het fallback-lettertype. \n"
+"Als de instelling \"freetype\" is ingeschakeld: Moet een TrueType-lettertype "
+"zijn. \n"
+"Als de instelling \"freetype\" is uitgeschakeld: Moet een bitmap- of XML-"
+"vectorenlettertype zijn. \n"
+"Dit lettertype wordt gebruikt voor bepaalde talen of als het "
+"standaardlettertype niet beschikbaar is."
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Pad waar screenshots bewaard worden."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5634,6 +5978,13 @@ 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 ""
+"Pad naar het standaardlettertype. \n"
+"Als de instelling \"freetype\" is ingeschakeld: Moet een TrueType-lettertype "
+"zijn. \n"
+"Als de instelling \"freetype\" is uitgeschakeld: Moet een bitmap- of XML-"
+"vectorenlettertype zijn. \n"
+"Het fallback-lettertype wordt gebruikt als het lettertype niet kan worden "
+"geladen."
#: src/settings_translation_file.cpp
msgid ""
@@ -5642,12 +5993,27 @@ 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 ""
+"Pad naar het monospace-lettertype. \n"
+"Als de instelling \"freetype\" is ingeschakeld: Moet een TrueType-lettertype "
+"zijn. \n"
+"Als de instelling \"freetype\" is uitgeschakeld: Moet een bitmap- of XML-"
+"vectorenlettertype zijn. \n"
+"Dit lettertype wordt o.a. gebruikt voor het console- en profilerscherm."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
+msgstr "Pauzeer als venster focus verliest"
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Emerge-wachtrij voor genereren"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Fysica"
@@ -5658,7 +6024,7 @@ msgstr "Vliegen toets"
#: src/settings_translation_file.cpp
msgid "Pitch move mode"
-msgstr ""
+msgstr "Pitch beweeg modus"
#: src/settings_translation_file.cpp
msgid ""
@@ -5694,6 +6060,9 @@ msgid ""
"Prevent digging and placing from repeating when holding the mouse buttons.\n"
"Enable this when you dig or place too often by accident."
msgstr ""
+"Voorkom dat graven en plaatsen zich herhaalt wanneer u de muisknoppen "
+"ingedrukt houdt. \n"
+"Schakel dit in als u per ongeluk te vaak graaft of plaatst."
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
@@ -5726,11 +6095,23 @@ msgid "Profiling"
msgstr "Profileren"
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "Prometheus listener address"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr "Aandeel grote grotten die vloeistof bevatten."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Radius of cloud area stated in number of 64 node cloud squares.\n"
"Values larger than 26 will start to produce sharp cutoffs at cloud area "
"corners."
@@ -5739,9 +6120,8 @@ msgstr ""
"Waarden groter dan 26 hebben scherpe wolkenranden tot gevolg."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Raises terrain to make valleys around the rivers."
-msgstr "Verhoogt het terrein om rond de rivieren valleien te maken"
+msgstr "Verhoogt het terrein om rond de rivieren valleien te maken."
#: src/settings_translation_file.cpp
msgid "Random input"
@@ -5753,7 +6133,7 @@ msgstr "Zichtafstand toets"
#: src/settings_translation_file.cpp
msgid "Recent Chat Messages"
-msgstr ""
+msgstr "Recente chatberichten"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5773,6 +6153,9 @@ msgid ""
"Remove color codes from incoming chat messages\n"
"Use this to stop players from being able to use color in their messages"
msgstr ""
+"Verwijder kleurcodes van binnenkomende chatberichten\n"
+"Gebruik dit om er voor te zorgen dat spelers geen kleuren kunnen gebruiken "
+"in hun berichten"
#: src/settings_translation_file.cpp
msgid "Replaces the default main menu with a custom one."
@@ -5795,6 +6178,18 @@ msgid ""
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
+"Beperkt de toegang van bepaalde client-side functies op servers. \n"
+"Combineer de onderstaande byteflags om functies aan de clientzijde te "
+"beperken of stel deze in op 0 \n"
+"voor geen beperkingen: \n"
+"LOAD_CLIENT_MODS: 1 (schakel het laden van door de gebruiker geleverde mods "
+"uit) \n"
+"CHAT_MESSAGES: 2 (schakel send_chat_message call client-side uit) \n"
+"READ_ITEMDEFS: 4 (schakel get_item_def call client-side uit) \n"
+"READ_NODEDEFS: 8 (schakel get_node_def call client-side uit) \n"
+"LOOKUP_NODES_LIMIT: 16 (beperkt get_node call client-side tot \n"
+"csm_restriction_noderange) \n"
+"READ_PLAYERINFO: 32 (deactiveer get_player_names call client-side)"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5829,9 +6224,8 @@ msgid "River channel depth"
msgstr "Diepte van rivieren"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel width"
-msgstr "Diepte van rivieren"
+msgstr "Breedte van rivieren"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5859,11 +6253,11 @@ msgstr "Opnemen terugrolgegevens"
#: src/settings_translation_file.cpp
msgid "Rolling hill size noise"
-msgstr ""
+msgstr "Ruis golvende heuvels"
#: src/settings_translation_file.cpp
msgid "Rolling hills spread noise"
-msgstr ""
+msgstr "Glooiende heuvels verspreiden ruis"
#: src/settings_translation_file.cpp
msgid "Round minimap"
@@ -5871,7 +6265,7 @@ msgstr "Ronde mini-kaart"
#: src/settings_translation_file.cpp
msgid "Safe digging and placing"
-msgstr ""
+msgstr "Veilig breken en plaatsen"
#: src/settings_translation_file.cpp
msgid "Sandy beaches occur when np_beach exceeds this value."
@@ -5883,7 +6277,7 @@ msgstr "Bewaar de ontvangen wereld lokaal (op de cliënt)."
#: src/settings_translation_file.cpp
msgid "Save window size automatically when modified."
-msgstr ""
+msgstr "Onthoud venstergrootte wanneer veranderd."
#: src/settings_translation_file.cpp
msgid "Saving map received from server"
@@ -5935,9 +6329,8 @@ msgstr ""
"0 = een redelijke standaardwaarde."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Seabed noise"
-msgstr "Grot ruispatroon #1"
+msgstr "Zeebodem ruis"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6059,7 +6452,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Set the maximum character length of a chat message sent by clients."
-msgstr ""
+msgstr "Maximaal aantal tekens voor chatberichten van gebruikers instellen."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6142,6 +6535,14 @@ msgid ""
"Altering this value is for special usage, leaving it unchanged is\n"
"recommended."
msgstr ""
+"Grootte van mapchunks gegenereerd door mapgen, vermeld in mapblocks (16 "
+"blokken). \n"
+"WAARSCHUWING !: Er is geen voordeel en er zijn verschillende gevaren het \n"
+"verhogen van deze waarde boven 5. \n"
+"Het verlagen van deze waarde verhoogt de dichtheid van grotten en kerkers. \n"
+"Het wijzigen van deze waarde is voor speciaal gebruik, maar blijft "
+"ongewijzigd \n"
+"aanbevolen."
#: src/settings_translation_file.cpp
msgid ""
@@ -6159,17 +6560,16 @@ msgid "Slice w"
msgstr "Slice w"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Slope and fill work together to modify the heights."
-msgstr "Helling en vulling bepalen in combinatie de hoogte"
+msgstr "Helling en vulling bepalen in combinatie de hoogte."
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Maximaal aantal kleine grotten"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Minimaal aantal kleine grotten"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6206,13 +6606,12 @@ msgid "Sneak key"
msgstr "Sluipen toets"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Sneaking speed"
-msgstr "Loopsnelheid"
+msgstr "Sluipsnelheid"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
-msgstr ""
+msgstr "Sluipsnelheid, in blokken per seconde."
#: src/settings_translation_file.cpp
msgid "Sound"
@@ -6243,10 +6642,20 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread 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 ""
+"Verspreiding van het bereik van de lichtcurve. \n"
+"Bepaalt de breedte van het bereik dat moet worden versterkt. \n"
+"Standaardafwijking van de lichtcurve boost Gaussian."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6267,6 +6676,11 @@ msgid "Step mountain spread noise"
msgstr "Bergen ruis"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "Sterkte van de parallax."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Sterkte van de normal-maps."
@@ -6276,10 +6690,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Sterkte van de parallax."
+"Kracht van lichtcurve boost. \n"
+"De 3 'boost'-parameters bepalen een bereik van het licht \n"
+"curve die wordt versterkt in helderheid."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6287,6 +6700,20 @@ msgstr "Stricte protocolcontrole"
#: src/settings_translation_file.cpp
msgid "Strip color codes"
+msgstr "Kleurcodes weghalen"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6359,10 +6786,20 @@ msgid ""
"this option allows enforcing it for certain node types. Note though that\n"
"that is considered EXPERIMENTAL and may not work properly."
msgstr ""
+"Texturen op een blok kunnen worden uitgelijnd met het blok of met de "
+"wereld. \n"
+"De eerste modus past bij betere dingen zoals machines, meubels, enz \n"
+"dit laatste zorgt ervoor dat trappen en microblokken beter in de omgeving "
+"passen. \n"
+"Deze mogelijkheid is echter nieuw en mag daarom niet worden gebruikt door "
+"oudere servers, \n"
+"Met deze optie kan deze voor bepaalde blokkentypen worden afgedwongen. Merk "
+"echter op dat \n"
+"die als EXPERIMENTEEL wordt beschouwd en mogelijk niet goed werkt."
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
-msgstr ""
+msgstr "De URL voor de inhoudsrepository"
#: src/settings_translation_file.cpp
msgid ""
@@ -6373,17 +6810,15 @@ msgstr ""
" als '/profiler save' wordt aangeroepen zonder expliciet formaat."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The depth of dirt or other biome filler node."
-msgstr "De diepte van aarde of andersoortige toplaag"
+msgstr "De diepte van aarde of andersoortige toplaag."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The file path relative to your worldpath in which profiles will be saved to."
msgstr ""
-"Het pad, ten opzichte van het wereld-pad, waar profilerings-gegevens worden "
-"opgeslagen.\n"
+"Het bestand pad ten opzichte van de wereldfolder waar profilerings-gegevens "
+"worden opgeslagen."
#: src/settings_translation_file.cpp
msgid "The identifier of the joystick to use"
@@ -6392,6 +6827,7 @@ msgstr "De identificatie van de stuurknuppel die u gebruikt"
#: src/settings_translation_file.cpp
msgid "The length in pixels it takes for touch screen interaction to start."
msgstr ""
+"De lengte in pixels die nodig is om een touchscreeninteractie te starten."
#: src/settings_translation_file.cpp
msgid ""
@@ -6401,6 +6837,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"De maximale hoogte van het oppervlak van golvende vloeistoffen. \n"
+"4.0 = Golfhoogte is twee knooppunten. \n"
+"0.0 = Golf beweegt helemaal niet. \n"
+"De standaardwaarde is 1,0 (1/2 blok). \n"
+"Vereist dat golvende vloeistoffen zijn ingeschakeld."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6416,6 +6857,7 @@ msgstr ""
"van beschikbare voorrechten op de server."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The radius of the volume of blocks around every player that is subject to "
"the\n"
@@ -6423,8 +6865,15 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
+"De straal van het volume van blokken rond elke speler die onderworpen is aan "
+"de \n"
+"actieve blokspullen, vermeld in mapblocks (16 blokken). \n"
+"In actieve blokken worden objecten geladen en ABM's uitgevoerd. \n"
+"Dit is ook het minimumbereik waarin actieve objecten (mobs) worden "
+"onderhouden. \n"
+"Dit moet samen met active_object_range worden geconfigureerd."
#: src/settings_translation_file.cpp
msgid ""
@@ -6435,6 +6884,12 @@ msgid ""
"On other platforms, OpenGL is recommended, and it’s the only driver with\n"
"shader support currently."
msgstr ""
+"De rendering back-end voor Irrlicht. \n"
+"Na het wijzigen hiervan is een herstart vereist. \n"
+"Opmerking: op Android, blijf bij OGLES1 als je het niet zeker weet! Anders "
+"start de app mogelijk niet. \n"
+"Op andere platforms wordt OpenGL aanbevolen en het is de enige driver met \n"
+"shader-ondersteuning momenteel."
#: src/settings_translation_file.cpp
msgid ""
@@ -6495,6 +6950,11 @@ msgid ""
"enabled. Also the vertical distance over which humidity drops by 10 if\n"
"'altitude_dry' is enabled."
msgstr ""
+"De verticale afstand waarover de warmte met 20 daalt als 'altitude_chill' "
+"is \n"
+"ingeschakeld. Ook de verticale afstand waarover de vochtigheid met 10 daalt "
+"als \n"
+"'altitude_dry' is ingeschakeld."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6512,6 +6972,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Time of day when a new world is started, in millihours (0-23999)."
msgstr ""
+"Tijdstip waarop een nieuwe wereld wordt gestart, in mili-uren (0-23999)."
#: src/settings_translation_file.cpp
msgid "Time send interval"
@@ -6580,9 +7041,8 @@ msgid "URL to the server list displayed in the Multiplayer Tab."
msgstr "URL voor de serverlijst in de multiplayer tab."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Undersampling"
-msgstr "Rendering:"
+msgstr "Rendering"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6609,7 +7069,12 @@ msgstr "Vergeet ongebruikte server gegevens"
#: src/settings_translation_file.cpp
msgid "Upper Y limit of dungeons."
-msgstr ""
+msgstr "Bovenste Y-limiet van kerkers."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Bovenste Y-limiet van kerkers."
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
@@ -6633,6 +7098,10 @@ msgid ""
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
+"Gebruik mip-mapping om texturen te schalen. Kan de prestaties enigszins "
+"verbeteren, \n"
+"vooral bij gebruik van een textuurpakket met hoge resolutie. \n"
+"Gamma-correcte verkleining wordt niet ondersteund."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -6706,7 +7175,7 @@ msgstr "Bepaalt steilheid/hoogte van heuvels."
#: src/settings_translation_file.cpp
msgid "Vertical climbing speed, in nodes per second."
-msgstr ""
+msgstr "Verticale klimsnelheid, in blokken per seconde."
#: src/settings_translation_file.cpp
msgid "Vertical screen synchronization."
@@ -6743,7 +7212,7 @@ msgstr "Zichtafstand"
#: src/settings_translation_file.cpp
msgid "Virtual joystick triggers aux button"
-msgstr ""
+msgstr "Virtuele joystick activeert aux-knop"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -6774,7 +7243,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
-msgstr ""
+msgstr "Loop- en vliegsnelheid, in blokken per seconde."
#: src/settings_translation_file.cpp
msgid "Walking speed"
@@ -6782,7 +7251,7 @@ msgstr "Loopsnelheid"
#: src/settings_translation_file.cpp
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
-msgstr ""
+msgstr "Loop-, vlieg- en klimsnelheid in snelle modus, in blokken per seconde."
#: src/settings_translation_file.cpp
msgid "Water level"
@@ -6911,12 +7380,19 @@ msgstr ""
"Maak het einde van het zichtbereik mistig, zodat het einde niet opvalt."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Whether to mute sounds. You can unmute sounds at any time, unless the\n"
"sound system is disabled (enable_sound=false).\n"
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Of geluiden moeten worden gedempt. U kunt het dempen van geluiden op elk "
+"moment opheffen, tenzij de \n"
+"geluidssysteem is uitgeschakeld (enable_sound = false). \n"
+"In de game kun je de mute-status wijzigen met de mute-toets of door de te "
+"gebruiken \n"
+"pauzemenu."
#: src/settings_translation_file.cpp
msgid ""
@@ -6967,10 +7443,18 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
+"Wereldwijd uitgelijnde texturen kunnen worden geschaald over meerdere "
+"knooppunten. Echter, \n"
+"de server verzendt mogelijk niet de gewenste weegschaal, vooral als u "
+"gebruikt \n"
+"een speciaal ontworpen texture pack; met deze optie probeert de gebruiker\n"
+"om de schaal automatisch te bepalen op basis van de textuurgrootte. \n"
+"Zie ook texture_min_size. \n"
+"Waarschuwing: deze optie is EXPERIMENTEEL!"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
-msgstr ""
+msgstr "Wereldwijd uitgelijnde texturenmodus"
#: src/settings_translation_file.cpp
msgid "Y of flat ground."
@@ -6981,6 +7465,8 @@ msgid ""
"Y of mountain density gradient zero level. Used to shift mountains "
"vertically."
msgstr ""
+"Y van het niveau van de gradiënt nul van de bergdichtheid. Gebruikt om "
+"bergen verticaal te verschuiven."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6992,6 +7478,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr "Y-afstand waar over grotten uitbreiden tot volle grootte."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Y-niveau van gemiddeld terrein oppervlak."
@@ -7023,7 +7517,7 @@ msgstr "Maximaal parallellisme in cURL"
#: src/settings_translation_file.cpp
msgid "cURL timeout"
-msgstr "cURL timeout"
+msgstr "cURL time-out"
#~ msgid "Toggle Cinematic"
#~ msgstr "Cinematic modus aan/uit"
@@ -7085,20 +7579,6 @@ msgstr "cURL timeout"
#~ msgid "Floatland mountain height"
#~ msgstr "Drijvend gebergte hoogte"
-#, fuzzy
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Drijvend gebergte dichtheid"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Drijvend gebergte dichtheid"
-
-#, fuzzy
-#~ msgid "Floatland level"
-#~ msgstr "Waterniveau"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Drijvend land basis ruis"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Drijvend land basis hoogte ruis"
@@ -7140,3 +7620,21 @@ msgstr "cURL timeout"
#~ "Aangepaste gamma voor de licht-tabellen. Lagere waardes zijn helderder.\n"
#~ "Deze instelling wordt enkel gebruikt door de cliënt, en wordt genegeerd "
#~ "door de server."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Pad waar screenshots bewaard worden."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Parallax occlusie sterkte"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Emerge-wachtrij voor lezen"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "$1 wordt gedownload, een ogenblik geduld alstublieft..."
+
+#~ msgid "Back"
+#~ msgstr "Terug"
+
+#~ msgid "Ok"
+#~ msgstr "Oké"
diff --git a/po/nn/minetest.po b/po/nn/minetest.po
index e6cf4d8d7..9a0b036d3 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-11-10 15:04+0000\n"
-"Last-Translator: Krock <mk939@ymail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-03-31 10:14+0000\n"
+"Last-Translator: sfan5 <sfan5@live.de>\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 3.10-dev\n"
+"X-Generator: Weblate 4.0-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr "Du har kome at"
msgid "You died"
msgstr "Du døydde"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -36,10 +40,6 @@ msgid "Main menu"
msgstr "Hovudmeny"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "OK"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Kople attende sambandet"
@@ -116,6 +116,10 @@ msgstr ""
"Berre teikna [a-z0-9_] e tillaten."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Modifikasjon:"
@@ -164,16 +168,17 @@ msgid "All packages"
msgstr "Alle pakker"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Attende"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Attende til hovudmeny"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Henter og installerer $1, ver vennleg og vent..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "Laster ned..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -218,15 +223,53 @@ msgstr "Avinstaller"
msgid "Update"
msgstr "Oppdater"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Ein verd med namnet \"$1\" finns allereie"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Oktaver"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Skap"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Informasjon:"
+
+#: 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"
@@ -234,25 +277,144 @@ msgstr "Last ned eit spel, sånn som Minetest spellet, ifrå minetest.net"
msgid "Download one from minetest.net"
msgstr "Last eit ned på minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Spel"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Kart generator"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Ikkje noko spel valgt"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Frø"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Ã…tvaring: Den minimale utviklings-testen e meint for utviklare."
#: builtin/mainmenu/dlg_create_world.lua
@@ -405,14 +567,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z spreiing"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "Absolutt verdi"
+#. ~ "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 "Standard"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "letta"
@@ -558,6 +731,10 @@ msgid "Host Server"
msgstr "Bli tenarmaskin's vert"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Namn/passord"
@@ -625,6 +802,7 @@ msgstr "Namn/Passord"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Spelar mot spelar aktivert"
@@ -870,9 +1048,17 @@ msgstr "Passord dokumentet du ga går ikkje an å åpne: "
msgid "Provided world path doesn't exist: "
msgstr "Verds-ruta du ga finnes ikkje: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr "yes"
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -906,6 +1092,7 @@ msgstr "- Port: "
msgid "- Public: "
msgstr "- Offentleg: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- Spelar mot spelar (PvP): "
@@ -1205,6 +1392,14 @@ msgid "Sound muted"
msgstr "Lyd e dempa"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Lyd e ikkje dempa lengre"
@@ -1236,7 +1431,7 @@ msgstr "Jern-tråd-ramma er vist"
msgid "Zoom currently disabled by game or mod"
msgstr "Zoom er for tiden deaktivert tå spelet eller ein modifikasjon"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "ok"
@@ -1357,6 +1552,7 @@ msgstr "Venstre skift"
msgid "Left Windows"
msgstr "Venstre, meta knapp"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Meny"
@@ -1449,6 +1645,7 @@ msgstr "Pause"
msgid "Play"
msgstr "Spel"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Skriv ut"
@@ -1485,6 +1682,7 @@ msgstr "Høgre, meta knapp"
msgid "Scroll Lock"
msgstr "Skrolle feste"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Velj"
@@ -1727,10 +1925,15 @@ msgstr "MÃ¥lbindt"
msgid "Sound Volume: "
msgstr "Lydstyrke: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "GÃ¥ "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "nn-NO"
@@ -1814,6 +2017,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1824,6 +2031,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1872,7 +2087,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1917,6 +2132,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1930,10 +2155,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2104,8 +2325,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2183,10 +2404,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2452,6 +2681,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2760,6 +2993,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2869,6 +3112,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2922,6 +3193,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4217,14 +4494,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4288,6 +4557,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4354,7 +4627,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4442,10 +4717,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4513,13 +4784,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4604,6 +4875,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4710,7 +4985,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4762,9 +5037,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4841,10 +5113,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4854,7 +5122,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4888,6 +5158,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4956,6 +5234,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5394,6 +5684,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5416,6 +5713,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5427,15 +5728,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5552,7 +5863,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5705,6 +6016,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6028,6 +6343,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6064,3 +6387,12 @@ msgstr ""
#~ msgid "Select Package File:"
#~ msgstr "Velje eit pakke dokument:"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Henter og installerer $1, ver vennleg og vent..."
+
+#~ msgid "Back"
+#~ msgstr "Attende"
+
+#~ msgid "Ok"
+#~ msgstr "OK"
diff --git a/po/pl/minetest.po b/po/pl/minetest.po
index cf677bb15..015692182 100644
--- a/po/pl/minetest.po
+++ b/po/pl/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Polish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-11-04 17:03+0000\n"
-"Last-Translator: Mateusz Mendel <mendelm9@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-09 12:14+0000\n"
+"Last-Translator: Mikołaj Zaremba <mikolajzaremba03@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/minetest/minetest/"
"pl/>\n"
"Language: pl\n"
@@ -13,7 +13,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 3.10-dev\n"
+"X-Generator: Weblate 4.1-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -23,10 +23,13 @@ msgstr "Wróć do gry"
msgid "You died"
msgstr "Umarłeś"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "Wystąpił błąd w skrypcie Lua, na przykład w modyfikacji:"
+msgstr "Wystąpił błąd w skrypcie Lua:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -37,10 +40,6 @@ msgid "Main menu"
msgstr "Menu główne"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "OK"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Połącz ponownie"
@@ -68,7 +67,7 @@ msgstr "Serwer wspiera protokoły w wersjach od $1 do $2. "
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 "
-"internetowe."
+"z sieciÄ… Internet."
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
@@ -117,31 +116,32 @@ msgstr ""
"znaki. Tylko znaki od [a-z, 0-9 i _] sÄ… dozwolone."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No (optional) dependencies"
-msgstr "Dodatkowe zależności:"
+msgstr "Brak (dodatkowych) zależności"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
msgstr "Brak dostępnych informacji o grze."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "Brak wymaganych zależności."
+msgstr "Brak wymaganych zależności"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
msgstr "Brak dostępnych informacji o modzie."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No optional dependencies"
-msgstr "Dodatkowe zależności:"
+msgstr "Brak dodatkowych zależności."
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
@@ -165,16 +165,17 @@ msgid "All packages"
msgstr "Wszystkie zasoby"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Backspace"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Powrót do menu głównego"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Pobieranie i instalowanie $1, proszÄ™ czekaj..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "Åadowanie..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -196,7 +197,7 @@ msgstr "Mody"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr "Nie można pobrać żadnych pakietów"
+msgstr "Nie można pobrać pakietów"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
@@ -219,15 +220,58 @@ msgstr "Odinstaluj"
msgid "Update"
msgstr "Aktualizacja"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Istnieje już świat o nazwie \"$1\""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Altitude chill"
+msgstr "Wysokość mrozu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Wysokość mrozu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Szum biomu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Szum biomu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Szum jaskini #1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Oktawy"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Utwórz"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Iteracje"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Pobierz tryb gry, taki jak Minetest Game, z minetest.net"
@@ -235,25 +279,153 @@ msgstr "Pobierz tryb gry, taki jak Minetest Game, z minetest.net"
msgid "Download one from minetest.net"
msgstr "ÅšciÄ…gnij takÄ… z minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Minimalna wartość Y lochu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floating landmasses in the sky"
+msgstr "Gęstość gór na latających wyspach"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "Poziom wznoszonego terenu"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Gra"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "Sterownik graficzny"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Generator mapy"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Flagi generatora mapy"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Generator mapy flat flagi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mountains"
+msgstr "Szum góry"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Nie wybrano gry"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Rozmiar rzeki"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Ziarno losowości"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "Szum podłoża"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Głębokość rzeki"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
"Uwaga: Minimal development test jest przeznaczony tylko dla developerów."
@@ -407,14 +579,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Rozrzut Z"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "wartość bezwzględna"
+#. ~ "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 "domyślne"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "wygładzony"
@@ -557,6 +740,10 @@ msgid "Host Server"
msgstr "Udostępnij serwer"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Nazwa gracza/Hasło"
@@ -624,6 +811,7 @@ msgstr "Nazwa gracza / Hasło"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP włączone"
@@ -785,9 +973,8 @@ msgid "Waving Leaves"
msgstr "Falujące liście"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Liquids"
-msgstr "FalujÄ…ce bloki"
+msgstr "Fale (Ciecze)"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
@@ -869,9 +1056,17 @@ msgstr "Nie udało się otworzyć dostarczonego pliku z hasłem "
msgid "Provided world path doesn't exist: "
msgstr "Podana ścieżka świata nie istnieje: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr "yes"
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -905,6 +1100,7 @@ msgstr "- Port: "
msgid "- Public: "
msgstr "- Publiczne: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "Gracz przeciwko graczowi: "
@@ -1203,6 +1399,14 @@ msgid "Sound muted"
msgstr "Głośność wyciszona"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Głośność włączona ponownie"
@@ -1234,7 +1438,7 @@ msgstr "Siatka widoczna"
msgid "Zoom currently disabled by game or mod"
msgstr "Powiększenie jest obecnie wyłączone przez grę lub mod"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "ok"
@@ -1355,6 +1559,7 @@ msgstr "Lewy Shift"
msgid "Left Windows"
msgstr "Lewy Windows"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menu"
@@ -1447,6 +1652,7 @@ msgstr "Pause"
msgid "Play"
msgstr "Graj"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Drukuj"
@@ -1483,6 +1689,7 @@ msgstr "Prawy Windows"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Wybierz"
@@ -1532,7 +1739,7 @@ msgid "Register and Join"
msgstr "Zarejestruj się i dołącz"
#: src/gui/guiConfirmRegistration.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"You are about to join this server with the name \"%s\" for the first time.\n"
"If you proceed, a new account using your credentials will be created on this "
@@ -1540,10 +1747,11 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
-"Próbujesz po raz pierwszy wejść na serwer %1$s1 o nazwie \"%2$s2\" . Jeśli "
-"kontynuujesz na serwerze zostanie utworzone nowe konto z Twoim danymi.\n"
-"Wpisz ponownie hasło i wciśnij Zarejestruj oraz Dołącz, aby potwierdzić "
-"utworzenie konta lub wciśnij Anuluj, aby przerwać ten proces."
+"Próbujesz wejść na serwer \"%s\" o nazwie \"%2$s2\" po raz pierwszy . Jeśli "
+"zdecydujesz się kontynuować na serwerze zostanie utworzone nowe konto z "
+"Twoim danymi.\n"
+"Wpisz ponownie hasło i wciśnij \"Zarejestruj się i Dołącz\" aby potwierdzić "
+"utworzenie konta lub wciśnij \"Anuluj\" aby przerwać ten proces."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
@@ -1657,7 +1865,7 @@ msgstr "Skradanie"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Special"
-msgstr "Specjalny"
+msgstr "Specialne"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
@@ -1724,10 +1932,15 @@ msgstr "Wyciszony"
msgid "Sound Volume: "
msgstr "Głośność: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Enter "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "pl"
@@ -1772,7 +1985,6 @@ msgstr ""
"węzłech."
#: 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"
@@ -1782,7 +1994,7 @@ msgid ""
"Default is for a vertically-squashed shape suitable for\n"
"an island, set all 3 numbers equal for the raw shape."
msgstr ""
-"Skala (X.Y.Z) fraktali w blokach.\n"
+"Skala (X.Y.Z) fraktali w węzłach.\n"
"Rzeczywisty rozmiar fraktali będzie 2, 3 raz większy.\n"
"Te wartości mogą być bardzo wysokie, \n"
"fraktal nie musi mieścić się wewnątrz świata.\n"
@@ -1837,6 +2049,11 @@ msgid "3D mode"
msgstr "Modele 3D"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Siła map normlanych"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "Szum 3d określający olbrzymie jaskinie."
@@ -1849,6 +2066,14 @@ msgstr ""
"Określa również strukturę wznoszącego się terenu górzystego."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "Szum 3d określający strukturę kanionów rzecznych."
@@ -1914,7 +2139,8 @@ msgid "ABM interval"
msgstr "Interwał zapisu mapy"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "Bezwzględny limit kolejki"
#: src/settings_translation_file.cpp
@@ -1965,6 +2191,16 @@ msgstr ""
"ekranów 4k."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Zaawansowane"
@@ -1976,11 +2212,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Altitude chill"
-msgstr "Wysokość mrozu"
+"Modyfikuje krzywą światła przez nałożenie na nią 'korekcji gamma'.\n"
+"Im wyższa wartość, tym jaśniejsze światło ze średniego i niskiego zakresu.\n"
+"Wartość '1.0' oznacza brak zmian.\n"
+"Tylko światło dnia i sztuczne światło są znacząco zmieniane, \n"
+"światło nocne podlega zmianie w minimalnym stopniu."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2174,8 +2410,8 @@ msgstr "Mapowanie wypukłości"
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2264,11 +2500,21 @@ msgstr ""
"Może być konieczny dla mniejszych ekranów."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Rozmiar czcionki"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Klawisz czatu"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat log level"
+msgstr "Poziom logowania debugowania"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Chat message count limit"
msgstr "Komunikat o stanie połączenia"
@@ -2556,6 +2802,11 @@ msgid "Default report format"
msgstr "Domyślny format raportu"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Domyślna gra"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2915,6 +3166,16 @@ msgstr ""
"pomiędzy blokami kiedy ustawiona powyżej 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS podczas pauzy w menu"
@@ -3037,6 +3298,41 @@ msgid "Fixed virtual joystick"
msgstr "Ustaw wirtualny joystick"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "Gęstość gór na latających wyspach"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "Maksymalna wartość Y lochu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "Minimalna wartość Y lochu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Podstawowy szum wznoszÄ…cego siÄ™ terenu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "Gęstość gór na latających wyspach"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Podstawowy szum wznoszÄ…cego siÄ™ terenu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Poziom wznoszonego terenu"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Klawisz latania"
@@ -3090,6 +3386,12 @@ msgid "Font size of the monospace font in point (pt)."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Format of player chat messages. The following strings are valid "
@@ -3324,7 +3626,7 @@ msgstr "Szum wysokości"
#: src/settings_translation_file.cpp
msgid "Height select noise"
-msgstr "Szum wyboru wysokości"
+msgstr "Rożnorodność wysokości"
#: src/settings_translation_file.cpp
msgid "High-precision FPU"
@@ -3734,7 +4036,7 @@ msgstr "Kolor tła konsoli czatu w grze (R,G,B)."
#: src/settings_translation_file.cpp
msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
-msgstr "Wysokość konsoli w grze, od 0.1 (10%) do 1.0 (100%)."
+msgstr "Przeźroczystość konsoli w grze (od 0.0 do 1.0)."
#: src/settings_translation_file.cpp
msgid "Inc. volume key"
@@ -4805,14 +5107,6 @@ msgid "Light curve low gradient"
msgstr "Centrum środkowego przyśpieszenia krzywej światła"
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Limit oczekiwań na dysku"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Limit kolejek oczekujÄ…cych do wytworzenia"
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4889,6 +5183,11 @@ msgid "Lower Y limit of dungeons."
msgstr "Zmniejsz limit Y dla lochów."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "Zmniejsz limit Y dla lochów."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Skrypt głównego menu"
@@ -4978,7 +5277,9 @@ msgstr ""
#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
"Właściwości generowania mapy określające Mapgen v7.\n"
"\"grzbiety\" aktywujÄ… rzeki."
@@ -5082,10 +5383,6 @@ msgid "Mapgen debug"
msgstr "Generator mapy debugowanie"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Flagi generatora mapy"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Nazwa generatora mapy"
@@ -5156,17 +5453,19 @@ msgstr ""
"Maksymalna liczba bloków, które mogą być skolejkowane podczas wczytywania."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Maksymalna liczba bloków do skolejkowania, które mają być wygenerowane.\n"
"Pozostaw puste a odpowiednia liczba zostanie dobrana automatycznie."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Maksymalna liczba bloków do skolejkowania które mają być wczytane z pliku.\n"
"Pozostaw puste a odpowiednia liczba zostanie dobrana automatycznie."
@@ -5265,6 +5564,10 @@ msgid "Method used to highlight selected object."
msgstr "Metoda użyta do podświetlenia wybranego obiektu."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Minimapa"
@@ -5382,7 +5685,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr "Najbliższy wymiar"
#: src/settings_translation_file.cpp
@@ -5436,9 +5739,6 @@ msgstr "Liczba powstających wątków"
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5523,10 +5823,6 @@ msgid "Parallax occlusion scale"
msgstr "Skala parallax occlusion"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Siła zamknięcia paralaksy"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5536,8 +5832,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Ścieżka, pod którą zapisywane są zrzuty ekranu."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5574,6 +5872,15 @@ msgid "Pause on lost window focus"
msgstr "Pauza, gdy okno jest nieaktywne"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Limit kolejek oczekujÄ…cych do wytworzenia"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Fizyka"
@@ -5659,6 +5966,18 @@ msgid "Profiling"
msgstr "Profilowanie modyfikacji"
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -6174,6 +6493,13 @@ msgstr ""
"Pliki nieaktualne będą pobierane standardową metodą."
#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
@@ -6202,6 +6528,11 @@ msgid "Step mountain spread noise"
msgstr "Szum góry"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "Siła paralaksy."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Siła generowanych zwykłych map."
@@ -6213,10 +6544,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Siła paralaksy."
-
-#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
msgstr "Sztywne sprawdzanie protokołu"
@@ -6226,6 +6553,20 @@ msgid "Strip color codes"
msgstr "Usuń kody kolorów"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "Synchroniczny SQLite"
@@ -6354,7 +6695,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6536,6 +6877,11 @@ msgid "Upper Y limit of dungeons."
msgstr "Górna granica Y lochów."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Górna granica Y lochów."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Włącz chmury 3D zamiast płaskich."
@@ -6919,6 +7265,14 @@ msgstr ""
"rozmiarów."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Wartość Y przeciętnego terenu."
@@ -7020,19 +7374,6 @@ msgstr "Limit czasu cURL"
#~ msgid "Floatland mountain height"
#~ msgstr "Wysokość gór latających wysp"
-#, fuzzy
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Gęstość gór na latających wyspach"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Gęstość gór na latających wyspach"
-
-#~ msgid "Floatland level"
-#~ msgstr "Poziom wznoszonego terenu"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Podstawowy szum wznoszÄ…cego siÄ™ terenu"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Podstawowy szum wysokości wznoszącego się terenu"
@@ -7079,3 +7420,21 @@ msgstr "Limit czasu cURL"
#~ "Ustaw kodowanie gamma dla tablic świateł. Wyższe wartości to większa "
#~ "jasność.\n"
#~ "To ustawienie jest tylko dla klientów, ignorowane przez serwer."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Ścieżka, pod którą zapisywane są zrzuty ekranu."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Siła zamknięcia paralaksy"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Limit oczekiwań na dysku"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Pobieranie i instalowanie $1, proszÄ™ czekaj..."
+
+#~ msgid "Back"
+#~ msgstr "Backspace"
+
+#~ msgid "Ok"
+#~ msgstr "OK"
diff --git a/po/pt/minetest.po b/po/pt/minetest.po
index c4dce6b9c..466428c35 100644
--- a/po/pt/minetest.po
+++ b/po/pt/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Portuguese (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2020-01-11 18:26+0000\n"
-"Last-Translator: rubenwardy <rubenwardy@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-03-31 10:14+0000\n"
+"Last-Translator: ssantos <ssantos@web.de>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/minetest/"
"minetest/pt/>\n"
"Language: pt\n"
@@ -12,7 +12,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 3.10.1\n"
+"X-Generator: Weblate 4.0-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr "Renascer"
msgid "You died"
msgstr "Você morreu"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Um erro ocorreu num script Lua:"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "Menu principal"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Ok"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Reconectar"
@@ -116,6 +116,10 @@ msgstr ""
"permitidos."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
@@ -161,16 +165,17 @@ msgid "All packages"
msgstr "Todos os pacotes"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Voltar"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Voltar ao menu principal"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Descarregando e instalando $1, por favor aguarde..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "A carregar..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -215,15 +220,57 @@ msgstr "Desinstalar"
msgid "Update"
msgstr "Atualizar"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "O mundo com o nome \"$1\" já existe"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Frio de altitude"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Frio de altitude"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Ruído da Biome"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Ruído da Biome"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Barulho da caverna"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Octavos"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Criar"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Monitorização"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Baixe um jogo, como Minetest Game, do site minetest.net"
@@ -231,25 +278,153 @@ msgstr "Baixe um jogo, como Minetest Game, do site minetest.net"
msgid "Download one from minetest.net"
msgstr "Descarregue um do site minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Ruído de masmorra"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floating landmasses in the sky"
+msgstr "Densidade da terra flutuante montanhosa"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "Nível de água"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Jogo"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "Driver de vídeo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Geração de Mapa"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Flags do mapgen"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Flags específicas do gerador de mundo V5"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mountains"
+msgstr "Ruído da montanha"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Nenhum jogo selecionado"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Tamanho do Rio"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Seed"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "Altura do terreno"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Profundidade do Rio"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Aviso: O minimal development test destina-se apenas a desenvolvedores."
#: builtin/mainmenu/dlg_create_world.lua
@@ -402,14 +577,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "amplitude Z"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "valor absoluto"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr "Padrões"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "amenizado"
@@ -554,6 +740,10 @@ msgid "Host Server"
msgstr "Servidor"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Nome/palavra-passe"
@@ -621,6 +811,7 @@ msgstr "Nome / Palavra-passe"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP ativado"
@@ -865,6 +1056,14 @@ msgstr "Ficheiro de palavra-passe fornecido falhou em abrir : "
msgid "Provided world path doesn't exist: "
msgstr "O caminho fornecido do mundo não existe: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -901,6 +1100,7 @@ msgstr "-Porta: "
msgid "- Public: "
msgstr "- Público: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -1212,6 +1412,14 @@ msgid "Sound muted"
msgstr "Som mutado"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Som desmutado"
@@ -1243,7 +1451,7 @@ msgstr "Mostrar wireframe"
msgid "Zoom currently disabled by game or mod"
msgstr "Zoom atualmente desabilitado por jogo ou mod"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "ok"
@@ -1364,6 +1572,7 @@ msgstr "Shift Esquerdo"
msgid "Left Windows"
msgstr "Tecla WINDOWS esquerda"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menu"
@@ -1456,6 +1665,7 @@ msgstr "Pausa"
msgid "Play"
msgstr "Jogar"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Tecla Print Screen"
@@ -1492,6 +1702,7 @@ msgstr "Tecla WINDOWS direita"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Seleccionar"
@@ -1732,10 +1943,15 @@ msgstr "Mutado"
msgid "Sound Volume: "
msgstr "Volume do som: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Enter "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "pt"
@@ -1760,7 +1976,6 @@ msgstr ""
"estiver fora do circulo principal."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1771,13 +1986,14 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-"(X,Y,Z) Espaço do fractal a partir centro do mundo em unidades de 'escala'.\n"
-"Pode ser usado para mover um ponto desejado para (0, 0) para criar um ponto "
-"de spawn apropriado, ou para permitir zoom em um ponto desejado aumentando "
-"sua escala.\n"
-"O padrão é configurado para ponto de spawn mandelbrot, pode ser necessário "
-"altera-lo em outras situações.\n"
-"Variam de -2 a 2. Multiplica por \"escala\" para compensação de nós."
+"(X,Y,Z) compensação de fractal do centro mundial em unidades de 'escala'.\n"
+"Pode ser usado para mover um ponto desejado para (0, 0) para criar um\n"
+"ponto de desova adequado ou para permitir o \"zoom in\" sobre um\n"
+"ponto por aumentar a \"escala\".\n"
+"O padrão é sintonizado para um ponto de desova adequado para Mandelbrot\n"
+"com parâmetros padrão, pode precisar ser alterado em outras\n"
+"situações.\n"
+"Gama aproximadamente -2 a 2. Multiplicar por 'escala' para compensar em nós."
#: src/settings_translation_file.cpp
msgid ""
@@ -1842,6 +2058,11 @@ msgid "3D mode"
msgstr "Modo 3D"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Intensidade de normalmaps"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "Ruído 3D a definir cavernas gigantes."
@@ -1854,6 +2075,14 @@ msgstr ""
"Também define estrutura de terra flutuante e terreno montanhoso."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "Ruído 3D a definir estrutura do rio e paredes do desfiladeiro."
@@ -1920,7 +2149,8 @@ msgid "ABM interval"
msgstr "Intervalo do ABM"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "Limite absoluto da fila de espera emergente"
#: src/settings_translation_file.cpp
@@ -1970,6 +2200,16 @@ msgstr ""
"para ecrãs 4K."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avançado"
@@ -1981,10 +2221,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Frio de altitude"
+"Altera a curva da luz, aplicando-lhe a 'correção gama'.\n"
+"Valores altos tornam os níveis médios e inferiores de luz mais brilhantes.\n"
+"O valor '1.0' deixa a curva de luz inalterada.\n"
+"Isto só tem um efeito significativo sobre a luz do dia e a luz artificial,\n"
+"tem muito pouco efeito na luz natural da noite."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2138,22 +2379,18 @@ msgid "Block send optimize distance"
msgstr "Distância otimizada de envio de bloco"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Caminho de fonte monoespaçada"
+msgstr "Caminho de fonte para negrito e itálico"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Caminho de fonte monoespaçada"
+msgstr "Caminho de fonte monoespacial negrito e itálico"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Caminho para ficheiro fonte"
+msgstr "Caminho da fonte negrito"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
msgstr "Caminho de fonte monoespaçada"
@@ -2170,9 +2407,10 @@ msgid "Bumpmapping"
msgstr "Bump mapping"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2242,6 +2480,8 @@ msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Faixa de aumento do centro da curva de luz.\n"
+"0,0 é o nível mínimo de luz, 1,0 é o nível máximo de luz."
#: src/settings_translation_file.cpp
msgid ""
@@ -2259,10 +2499,20 @@ msgstr ""
"texturas. Pode ser necessário para telas menores."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Tamanho da fonte"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Tecla de conversação"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Nível de log de depuração"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "Limite do contador de mensagens de bate-papo"
@@ -2464,6 +2714,9 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Controla a largura de túneis, um valor mais baixo cria túneis mais largos.\n"
+"Valores >= 10,0 desativam completamente a geração de túneis e evitam\n"
+"cálculos intensos de ruído."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2551,6 +2804,11 @@ msgid "Default report format"
msgstr "Formato de report predefinido"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Jogo por defeito"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2726,6 +2984,8 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Ativar suporte de IPv6 (tanto para cliente como para servidor).\n"
+"Necessário para que conexões de IPv6 funcionem."
#: src/settings_translation_file.cpp
msgid ""
@@ -2814,6 +3074,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Ativar os objectos buffer de vértice.\n"
+"Isto deve melhorar muito o desempenho gráfico."
#: src/settings_translation_file.cpp
msgid ""
@@ -2840,6 +3102,12 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Permite o mapeamento de tom de filme 'Uncharted 2' de Hable.\n"
+"Simula a curva de tonalidade do filme fotográfico e como esta se aproxima "
+"da\n"
+"aparência de imagens de alta gama dinâmica. O contraste de gama média é "
+"ligeiramente\n"
+"melhorada, os destaques e as sombras são gradualmente comprimidos."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -2888,6 +3156,10 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Possibilita o sistema de som.\n"
+"Se desativado, desativa completamente todos os sons em todo o lado e \n"
+"os controles de som no jogo não funcionarão.\n"
+"A alteração desta configuração requer um reinício."
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -2906,6 +3178,16 @@ msgstr ""
"quando definido com num úmero superior a 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS em menu de pausa"
@@ -3025,6 +3307,41 @@ msgid "Fixed virtual joystick"
msgstr "Joystick virtual fixo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "Densidade da terra flutuante montanhosa"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "Y máximo da dungeon"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "Y mínimo da dungeon"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Ruído base de terra flutuante"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "Expoente de terras flutuantes montanhosas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Ruído base de terra flutuante"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Nível de água"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Tecla de voar"
@@ -3046,11 +3363,11 @@ msgstr "Tecla de ativar/desativar nevoeiro"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Fonte em negrito por predefinição"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Fonte em itálico por predefinição"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3066,7 +3383,7 @@ msgstr "Tamanho da fonte"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "Tamanho da fonte predefinida em pontos (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
@@ -3078,6 +3395,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4712,14 +5035,6 @@ msgid "Light curve low gradient"
msgstr "Centro do aumento leve da curva de luz"
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Limite de filas emerge no disco"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Limite de filas emerge para gerar"
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4795,6 +5110,11 @@ 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."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Menu principal de scripts"
@@ -4879,9 +5199,12 @@ msgstr ""
"a marcação 'selvas' é ignorada."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'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."
@@ -4973,10 +5296,6 @@ msgid "Mapgen debug"
msgstr "Depuração do gerador de mapa"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Flags do mapgen"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Nome do gerador de mapa"
@@ -5050,18 +5369,20 @@ 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"
-"Set to blank for an appropriate amount to be chosen automatically."
+"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."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Número máximo de blocos para ser enfileirado que serão carregados do "
"ficheiro.\n"
@@ -5162,6 +5483,10 @@ msgid "Method used to highlight selected object."
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 ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Mini-mapa"
@@ -5281,7 +5606,8 @@ msgstr ""
"servidores."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+#, fuzzy
+msgid "Near plane"
msgstr "Plano de corte próximo"
#: src/settings_translation_file.cpp
@@ -5333,11 +5659,9 @@ 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"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5436,10 +5760,6 @@ msgid "Parallax occlusion scale"
msgstr "Escala de Oclusão de paralaxe"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Força da oclusão paralaxe"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5449,8 +5769,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Caminho para onde salvar screenshots."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5487,6 +5809,15 @@ msgid "Pause on lost window focus"
msgstr "Pausa quando o foco da janela é perdido"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Limite de filas emerge para gerar"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Física"
@@ -5565,6 +5896,18 @@ msgid "Profiling"
msgstr "Analizando"
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -6084,6 +6427,13 @@ msgstr ""
"Arquivos que não estão presentes serão obtidos da maneira usual por UDP."
#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
@@ -6110,6 +6460,11 @@ 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."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Intensidade de normalmaps gerados."
@@ -6121,10 +6476,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Intensidade de paralaxe."
-
-#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
msgstr "Verificação rígida de protocolo"
@@ -6133,6 +6484,20 @@ msgid "Strip color codes"
msgstr "Códigos de faixa de cor"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "SQLite síncrono"
@@ -6260,6 +6625,7 @@ 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"
@@ -6267,7 +6633,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"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"
@@ -6468,6 +6834,11 @@ 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."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Usar nuvens 3D em vez de planas."
@@ -6855,6 +7226,14 @@ msgstr ""
"Distância em Y sobre a qual as cavernas se expandem até o tamanho total."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Nível em Y da superfície média do terreno."
@@ -6955,18 +7334,6 @@ msgstr "Tempo limite de cURL"
#~ msgid "Floatland mountain height"
#~ msgstr "Altura da terra flutuante montanhosa"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Expoente de terras flutuantes montanhosas"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Densidade da terra flutuante montanhosa"
-
-#~ msgid "Floatland level"
-#~ msgstr "Nível de água"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Ruído base de terra flutuante"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Altura base de ruído de terra flutuante"
@@ -7021,3 +7388,21 @@ msgstr "Tempo limite de cURL"
#~ "Ajustar a gama de codificação para a tabela de claridade. Os números mais "
#~ "elevados são mais brilhantes.\n"
#~ "Esta configuração é somente para o cliente e é ignorada pelo servidor."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Caminho para onde salvar screenshots."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Força da oclusão paralaxe"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Limite de filas emerge no disco"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Descarregando e instalando $1, por favor aguarde..."
+
+#~ msgid "Back"
+#~ msgstr "Voltar"
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po
index 384cfec25..fc31640c4 100644
--- a/po/pt_BR/minetest.po
+++ b/po/pt_BR/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Portuguese (Brazil) (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: 2019-12-11 13:36+0000\n"
"Last-Translator: ramon.venson <ramon.venson@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
@@ -22,6 +22,10 @@ msgstr "Reviver"
msgid "You died"
msgstr "Você morreu"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Ocorreu um erro em um script Lua:"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "Menu principal"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Ok"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Reconectar"
@@ -116,6 +116,10 @@ msgstr ""
"permitidos."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
@@ -162,16 +166,17 @@ msgid "All packages"
msgstr "Todos os pacotes"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Backspace"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Voltar ao menu principal"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Baixando e instalando $1, por favor aguarde..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "Carregando..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -216,15 +221,57 @@ msgstr "Desinstalar"
msgid "Update"
msgstr "Atualizar"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Já existe um mundo com o nome \"$1\""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Frio de altitude"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Frio de altitude"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Ruído do bioma"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Ruído do bioma"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Barulho da caverna"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Octavos"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Criar"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Monitorização"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Baixe um jogo, como Minetest Game, do site minetest.net"
@@ -232,25 +279,153 @@ msgstr "Baixe um jogo, como Minetest Game, do site minetest.net"
msgid "Download one from minetest.net"
msgstr "Baixe um apartir do site minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Y mínimo da dungeon"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floating landmasses in the sky"
+msgstr "Densidade da Ilha Flutuante montanhosa"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "Nível de água"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Jogo"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "Driver de vídeo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Gerador de mapa"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Flags do gerador de mundo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Flags específicas do gerador de mundo V5"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mountains"
+msgstr "Ruído da montanha"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Nenhum jogo selecionado"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Tamanho do Rio"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Seed"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "Altura do terreno"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Profundidade do Rio"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
"Aviso: O game \"minimal development test\" apenas serve para desenvolvedores."
@@ -404,14 +579,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "amplitude Z"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "valor absoluto"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr "Padrões"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "amenizado"
@@ -556,6 +742,10 @@ msgid "Host Server"
msgstr "Criar Servidor"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Nome / Senha"
@@ -623,6 +813,7 @@ msgstr "Nome / Senha"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP habilitado"
@@ -869,6 +1060,14 @@ msgstr "Arquivo de senha fornecido falhou em abrir : "
msgid "Provided world path doesn't exist: "
msgstr "O caminho do mundo providenciado não existe. "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -905,6 +1104,7 @@ msgstr "-Porta: "
msgid "- Public: "
msgstr "- Público: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -1216,6 +1416,14 @@ msgid "Sound muted"
msgstr "Som mutado"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Som desmutado"
@@ -1247,7 +1455,7 @@ msgstr "Mostrar wireframe"
msgid "Zoom currently disabled by game or mod"
msgstr "Zoom atualmente desabilitado por jogo ou mod"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "Ok"
@@ -1368,6 +1576,7 @@ msgstr "Shift esquerdo"
msgid "Left Windows"
msgstr "Windows esquerdo"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menu"
@@ -1460,6 +1669,7 @@ msgstr "Pausar"
msgid "Play"
msgstr "Jogar"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Print Screen"
@@ -1496,6 +1706,7 @@ msgstr "Windows direito"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Tecla Select"
@@ -1738,10 +1949,15 @@ msgstr "Mutado"
msgid "Sound Volume: "
msgstr "Volume do som: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Entrar "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "pt_BR"
@@ -1849,6 +2065,11 @@ msgid "3D mode"
msgstr "modo 3D"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Intensidade de normalmaps"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "barulho 3D que define cavernas gigantes."
@@ -1861,6 +2082,14 @@ msgstr ""
"Também define a estrutura do terreno da montanha das ilhas flutuantes."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "Ruído 3D definindo a estrutura das paredes dos cânions dos rios."
@@ -1927,7 +2156,8 @@ msgid "ABM interval"
msgstr "Intervalo do ABM"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "Limite absoluto de filas emergentes"
#: src/settings_translation_file.cpp
@@ -1977,6 +2207,16 @@ msgstr ""
"quem não usa X11/Android) Ex para telas 4K."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avançado"
@@ -1990,10 +2230,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Frio de altitude"
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr "Sempre voar e correr"
@@ -2181,8 +2417,8 @@ msgstr "Bump mapping"
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2269,10 +2505,20 @@ msgstr ""
"texturas. Pode ser necessário para telas menores."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Tamanho da fonte"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Tecla de Chat"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Nível de log do Debug"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "Limite do contador de mensagens de bate-papo"
@@ -2560,6 +2806,11 @@ msgid "Default report format"
msgstr "Formato de reporte padrão"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Jogo padrão"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2919,6 +3170,16 @@ msgstr ""
"quando definido como número maior do que 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS no menu de pausa"
@@ -3038,6 +3299,41 @@ msgid "Fixed virtual joystick"
msgstr "Joystick virtual fixo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "Densidade da Ilha Flutuante montanhosa"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "Y máximo da dungeon"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "Y mínimo da dungeon"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Ruído base de Ilha Flutuante"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "Expoente de terras flutuantes montanhosas"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Ruído base de Ilha Flutuante"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Nível de água"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Tecla de voar"
@@ -3091,6 +3387,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4713,14 +5015,6 @@ msgid "Light curve low gradient"
msgstr "Centro do aumento leve da curva de luz"
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Limite de filas emerge no disco"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Limite de filas emerge para gerar"
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4797,6 +5091,11 @@ 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."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Menu principal do script"
@@ -4880,9 +5179,12 @@ msgstr ""
"automaticamente habilitadas e a flag 'jungles' é ignorada."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'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."
@@ -4975,10 +5277,6 @@ msgid "Mapgen debug"
msgstr "Debug do mapgen"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Flags do gerador de mundo"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Nome do gerador de mundo"
@@ -5048,18 +5346,20 @@ 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"
-"Set to blank for an appropriate amount to be chosen automatically."
+"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."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Número máximo de blocos para ser enfileirado que serão carregados do "
"arquivo.\n"
@@ -5160,6 +5460,10 @@ msgid "Method used to highlight selected object."
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 ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Minimapa"
@@ -5283,7 +5587,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr "plano próximo"
#: src/settings_translation_file.cpp
@@ -5338,9 +5642,6 @@ msgstr "Número de seguimentos de emersão"
#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5434,10 +5735,6 @@ msgid "Parallax occlusion scale"
msgstr "Escala de Oclusão de paralaxe"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Insinsidade de oclusão de paralaxe"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5447,8 +5744,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Caminho para onde salvar screenshots."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5485,6 +5784,15 @@ msgid "Pause on lost window focus"
msgstr "Pausa quando o foco da janela é perdido"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Limite de filas emerge para gerar"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Física"
@@ -5563,6 +5871,18 @@ msgid "Profiling"
msgstr "Analizando"
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -6086,6 +6406,13 @@ msgstr ""
"Arquivos que não estão presentes serão obtidos da maneira usual por UDP."
#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
@@ -6112,6 +6439,11 @@ 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."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Intensidade de normalmaps gerados."
@@ -6123,10 +6455,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Intensidade de paralaxe."
-
-#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
msgstr "Verificação rígida de protocolo"
@@ -6135,6 +6463,20 @@ msgid "Strip color codes"
msgstr "Códigos de faixa de cor"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "SQLite síncrono"
@@ -6262,6 +6604,7 @@ 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"
@@ -6269,7 +6612,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"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"
@@ -6470,6 +6813,11 @@ 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."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Usar nuvens 3D em vez de planas."
@@ -6857,6 +7205,14 @@ msgstr ""
"Distância em Y sobre a qual as cavernas se expandem até o tamanho total."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Nível em Y da superfície média do terreno."
@@ -6957,18 +7313,6 @@ msgstr "Tempo limite de cURL"
#~ msgid "Floatland mountain height"
#~ msgstr "Altura da Ilha Flutuante montanhosa"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Expoente de terras flutuantes montanhosas"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Densidade da Ilha Flutuante montanhosa"
-
-#~ msgid "Floatland level"
-#~ msgstr "Nível de água"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Ruído base de Ilha Flutuante"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Altura base de ruído de Ilha Flutuante"
@@ -7015,3 +7359,21 @@ msgstr "Tempo limite de cURL"
#~ "Ajustar a gama de codificação para a tabela de claridade. Os números mais "
#~ "elevados são mais brilhantes.\n"
#~ "Esta configuração é somente para o cliente e é ignorada pelo servidor."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Caminho para onde salvar screenshots."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Insinsidade de oclusão de paralaxe"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Limite de filas emerge no disco"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Baixando e instalando $1, por favor aguarde..."
+
+#~ msgid "Back"
+#~ msgstr "Backspace"
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
diff --git a/po/ro/minetest.po b/po/ro/minetest.po
index f7bf0f871..f7c6b6fef 100644
--- a/po/ro/minetest.po
+++ b/po/ro/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Romanian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-04 16:41+0000\n"
+"Last-Translator: f0roots <f0rootss@gmail.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/minetest/"
"minetest/ro/>\n"
"Language: ro\n"
@@ -13,24 +13,25 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 3.9-dev\n"
+"X-Generator: Weblate 4.1-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Reînviere"
#: builtin/client/death_formspec.lua src/client/game.cpp
-#, fuzzy
msgid "You died"
-msgstr "Ai murit."
+msgstr "Ai murit"
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "A apărut o eroare într-un script Lua, de exemplu un mod:"
+msgstr "A apărut o eroare într-un script Lua:"
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred:"
msgstr "A apărut o eroare:"
@@ -39,10 +40,6 @@ msgid "Main menu"
msgstr "Meniul principal"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Ok"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Reconectează-te"
@@ -56,15 +53,15 @@ msgstr "Se încarcă..."
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
-msgstr ""
+msgstr "Nepotrivire versiune protocol. "
#: builtin/mainmenu/common.lua
msgid "Server enforces protocol version $1. "
-msgstr ""
+msgstr "Serverul forțează versiunea protocolului $1. "
#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
-msgstr ""
+msgstr "Acest Server suporta versiunile protocolului intre $1 si $2. "
#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
@@ -74,11 +71,11 @@ msgstr ""
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
-msgstr ""
+msgstr "Suportam doar versiunea de protocol $1."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
-msgstr ""
+msgstr "Acceptăm versiuni de protocol între versiunea 1$ și 2$."
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_delete_content.lua
@@ -99,24 +96,28 @@ msgid "Disable all"
msgstr "Dezactivează toate"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "Disable modpack"
-msgstr "Dezactivat"
+msgstr "Dezactiveaza pachet mod"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
msgstr "Activează tot"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "Enable modpack"
-msgstr "Redenumiți Pachetul de moduri:"
+msgstr "Activeaza pachet mod"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
+"Nu a reuÈ™it activarea modului „$ 1â€, deoarece conÈ›ine caractere "
+"neautorizate. Doar caracterele [a-z0-9_] sunt permise."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
@@ -124,30 +125,27 @@ msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr ""
+msgstr "Nu există dependențe (opționale)"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No game description provided."
-msgstr "Nici o descriere de mod disponibilă"
+msgstr "Nu este oferită nicio descriere a jocului."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "Dependențe:"
+msgstr "Nu există dependențe dure"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No modpack description provided."
-msgstr "Nici o descriere de mod disponibilă"
+msgstr "Nici o descriere a pachetului de moduri nu este furnizată."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr ""
+msgstr "Nu există dependențe opționale"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr ""
+msgstr "Dependențe opționale:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
@@ -164,25 +162,24 @@ msgstr "activat"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
-msgstr ""
+msgstr "Toate pachetele"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "ÃŽnapoi"
-
-#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Back to Main Menu"
-msgstr "Meniul Principal"
+msgstr "ÃŽnapoi la meniul principal"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
+msgid "Downloading..."
+msgstr "Se încarcă..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr "Eșuare la instalarea $1 în $2"
+msgstr "Nu a putut descărca $1"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -200,11 +197,11 @@ msgstr "Moduri"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr ""
+msgstr "Nu s-au putut prelua pachete"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
-msgstr ""
+msgstr "Fara rezultate"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
@@ -212,17 +209,19 @@ msgid "Search"
msgstr "Caută"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Texture packs"
msgstr "Pachete de textură"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Uninstall"
-msgstr "Instalează"
+msgstr "Dezinstalare"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
+msgstr "Actualizare"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -230,46 +229,206 @@ msgid "A world named \"$1\" already exists"
msgstr "O lume cu numele \"$1\" deja există"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Altitudine de frisoane"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Altitudine de frisoane"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Biome zgomot"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Biome zgomot"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Pragul cavernei"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Octava"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Creează"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Informații:"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr ""
+msgstr "Descărcați un joc, cum ar fi Minetest Game, de pe minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
+msgstr "Descărcați unul de pe minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Zgomotul temnițelor"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Joc"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
-msgstr "Mapgen"
+msgstr "Gen de hartă"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Steagurile Mapgen"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Steaguri specifice Mapgen V5"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
-msgstr "Selectare distanță"
+msgstr "Nici un joc selectat"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Zgomotul râului"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
+msgstr "Seminţe"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Structures appearing on the terrain, typically trees and plants"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
+msgstr ""
+"Avertisment: Testul de dezvoltare minimă este destinat dezvoltatorilor."
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "Numele lumii"
#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no games installed."
-msgstr ""
+msgstr "Nu aveți jocuri instalate."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
@@ -282,14 +441,12 @@ msgid "Delete"
msgstr "Șterge"
#: builtin/mainmenu/dlg_delete_content.lua
-#, fuzzy
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "Modmgr: Eroare la ștergerea \"$1\""
+msgstr "pkgmgr: nu a reușit să ștergeți \"$1\""
#: builtin/mainmenu/dlg_delete_content.lua
-#, fuzzy
msgid "pkgmgr: invalid path \"$1\""
-msgstr "Modmgr: Pacht de mod invalid \"$1\""
+msgstr "Pkgmgr: calea nevalidă '$ 1'"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
@@ -308,14 +465,16 @@ msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
+"Acest modpack are un nume explicit dat în modpack.conf, care va înlocui "
+"orice redenumire aici."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr ""
+msgstr "(Nicio descriere a setării date)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr ""
+msgstr "2D Zgomot"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -323,7 +482,7 @@ msgstr "< Înapoi la pagina de setări"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
-msgstr ""
+msgstr "Navighează"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Disabled"
@@ -339,27 +498,27 @@ msgstr "Activat"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
-msgstr ""
+msgstr "Lacunaritate"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
-msgstr ""
+msgstr "Octava"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr ""
+msgstr "Decalaj"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Persistance"
-msgstr ""
+msgstr "Persistență"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
-msgstr ""
+msgstr "Vă rugăm să introduceți un număr întreg valid."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
-msgstr ""
+msgstr "Vă rugăm să introduceți un număr valid."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
@@ -367,178 +526,164 @@ msgstr "Restabilește valori implicite"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
-msgstr ""
+msgstr "Scală"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Select directory"
-msgstr "Selectează Fișierul Modului:"
+msgstr "Selectează directorul"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Select file"
-msgstr "Selectează Fișierul Modului:"
+msgstr "Selectează fila"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Show technical names"
-msgstr ""
+msgstr "Afișați numele tehnice"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr ""
+msgstr "Valoarea trebuie să fie de cel puțin $ 1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr ""
+msgstr "Valoarea nu trebuie să fie mai mare de $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
-msgstr ""
+msgstr "X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X spread"
-msgstr ""
+msgstr "expansiunea X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
-msgstr ""
+msgstr "Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y spread"
-msgstr ""
+msgstr "Y răspândit"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
-msgstr ""
+msgstr "Z"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z spread"
-msgstr ""
+msgstr "Z răspândit"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr ""
+msgstr "valoareabs"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "defaults"
-msgstr "modifică jocul"
+msgstr "implicite"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+msgstr "uÅŸura"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "$1 (Enabled)"
-msgstr "Activat"
+msgstr "$1 (Activat)"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "$1 mods"
-msgstr "Configurează"
+msgstr "$1 moduri"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Eșuare la instalarea $1 în $2"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install Mod: Unable to find real mod name for: $1"
msgstr "Instalare mod: nu se poate găsi numele real pentru: $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
"Instalare Mod: nu se poate găsi nume de folder potrivit pentru pachetul de "
-"mod $1"
+"moduri $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"\n"
-"Instalare Mod: tip de fișier neacceptat \"$1\""
+msgstr "Instalare: tipul de fișier neacceptat „$ 1†sau arhiva ruptă"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install: file: \"$1\""
-msgstr "Instalare Mod: fișier: \"$1\""
+msgstr "Instalare: fișier: \"$1\""
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to find a valid mod or modpack"
-msgstr ""
-"Instalare Mod: nu se poate găsi nume de folder potrivit pentru pachetul de "
-"mod $1"
+msgstr "Nu se poate găsi un mod sau un pachet de moduri valid"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a $1 as a texture pack"
-msgstr "Eșuare la instalarea $1 în $2"
+msgstr "Imposibil de instalat un $1 ca pachet de textură"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a game as a $1"
-msgstr "Eșuare la instalarea $1 în $2"
+msgstr "Imposibil de instalat un joc ca $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a mod as a $1"
-msgstr "Eșuare la instalarea $1 în $2"
+msgstr "Imposibil de instalat un mod ca $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a modpack as a $1"
-msgstr "Eșuare la instalarea $1 în $2"
+msgstr "Imposibil de instalat un pachet de moduri ca $ 1"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "Căutați conținut online"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Content"
-msgstr "Continuă"
+msgstr "Conţinut"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Disable Texture Pack"
-msgstr "Selectează pachetul de textură:"
+msgstr "Dezactivați pachetul de textură"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Information:"
-msgstr "Informații mod:"
+msgstr "Informații:"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Installed Packages:"
-msgstr "Moduri Instalate:"
+msgstr "Pachete instalate:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr ""
+msgstr "Fără dependențe."
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "No package description available"
-msgstr "Nici o descriere de mod disponibilă"
+msgstr "Nu există descriere a pachetului disponibilă"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
msgstr "Redenumiți"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Uninstall Package"
-msgstr "Dezinstalaţi modul selectat"
+msgstr "Dezinstalați pachetul"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Use Texture Pack"
-msgstr "Pachete de textură"
+msgstr "Folosiți pachetul de textură"
#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
@@ -550,24 +695,23 @@ msgstr "Dezvoltatori de bază"
#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
-msgstr "Credits"
+msgstr "Credite"
#: builtin/mainmenu/tab_credits.lua
msgid "Previous Contributors"
msgstr "Foști contribuitori"
#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
msgid "Previous Core Developers"
-msgstr "Dezvoltatori de bază"
+msgstr "Dezvoltatori de bază precedenți"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr ""
+msgstr "Anunțare server"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr ""
+msgstr "Adresa legată"
#: builtin/mainmenu/tab_local.lua
msgid "Configure"
@@ -582,14 +726,16 @@ msgid "Enable Damage"
msgstr "Activează Daune"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Host Game"
-msgstr "Ascunde Joc"
+msgstr "Găzduiește joc"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Host Server"
-msgstr "Server"
+msgstr "Găzduiește Server"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
@@ -600,18 +746,16 @@ msgid "New"
msgstr "Nou"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "No world created or selected!"
-msgstr "Jocul nu are nume, sau nu ai selectat un joc"
+msgstr "Nicio lume creată sau selectată!"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Play Game"
-msgstr "ÃŽncepe jocul"
+msgstr "Joacă jocul"
#: builtin/mainmenu/tab_local.lua
msgid "Port"
-msgstr ""
+msgstr "Port"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -622,21 +766,18 @@ msgid "Server Port"
msgstr "Port server"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Start Game"
-msgstr "Ascunde Joc"
+msgstr "ÃŽncepe Jocul"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Address / Port"
-msgstr "Adresă/Port"
+msgstr "Adresă / Port"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "Conectează"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
-#, fuzzy
msgid "Creative mode"
msgstr "Modul Creativ"
@@ -650,12 +791,11 @@ msgstr "Åžterge Favorit"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Favorite"
-msgstr "Favorite"
+msgstr "Favorit"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Join Game"
-msgstr "Ascunde Joc"
+msgstr "Alatură-te jocului"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Name / Password"
@@ -663,8 +803,9 @@ msgstr "Nume / Parolă"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Ping"
-msgstr ""
+msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP activat"
@@ -674,7 +815,6 @@ msgid "2x"
msgstr "2x"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "3D Clouds"
msgstr "Nori 3D"
@@ -687,35 +827,30 @@ msgid "8x"
msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "All Settings"
-msgstr "Setări"
+msgstr "Toate setările"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr ""
+msgstr "Antialiasing:"
#: builtin/mainmenu/tab_settings.lua
msgid "Are you sure to reset your singleplayer world?"
msgstr "Eşti sigur că vrei să resetezi lumea proprie ?"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Autosave Screen Size"
msgstr "Salvează automat dimensiunea ecranului"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Bilinear Filter"
msgstr "Filtrare Biliniară"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Bump Mapping"
-msgstr "Mip Mapping"
+msgstr "Cartografiere cu denivelări"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
-#, fuzzy
msgid "Change Keys"
msgstr "Modifică tastele"
@@ -729,16 +864,15 @@ msgstr "Frunze luxsoase"
#: builtin/mainmenu/tab_settings.lua
msgid "Generate Normal Maps"
-msgstr ""
+msgstr "Generați Hărți Normale"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Mipmap"
-msgstr "Mip Mapping"
+msgstr "Hartă mip"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Hartă mip + filtru aniso."
#: builtin/mainmenu/tab_settings.lua
msgid "No"
@@ -749,9 +883,8 @@ msgid "No Filter"
msgstr "Fără Filtru"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "No Mipmap"
-msgstr "Mip Mapping"
+msgstr "Fără hartă mip"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
@@ -775,7 +908,7 @@ msgstr "Apă opacă"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Parallax Occlusion"
-msgstr ""
+msgstr "Ocluzie Parallax"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
@@ -799,7 +932,7 @@ msgstr "Umbră"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "Shaders (indisponibil)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -818,16 +951,14 @@ msgid "To enable shaders the OpenGL driver needs to be used."
msgstr "Pentru a permite shadere OpenGL trebuie să fie folosite."
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
-#, fuzzy
msgid "Tone Mapping"
-msgstr "Mip Mapping"
+msgstr "Mapare ton"
#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold: (px)"
-msgstr ""
+msgstr "PragulAtingerii: (px)"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Trilinear Filter"
msgstr "Filtrare Triliniară"
@@ -836,9 +967,8 @@ msgid "Waving Leaves"
msgstr "Frunze legănătoare"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Liquids"
-msgstr "Frunze legănătoare"
+msgstr "Fluturarea lichidelor"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
@@ -849,19 +979,16 @@ msgid "Yes"
msgstr "Da"
#: builtin/mainmenu/tab_simple_main.lua
-#, fuzzy
msgid "Config mods"
-msgstr "Configurează"
+msgstr "Configurează moduri"
#: builtin/mainmenu/tab_simple_main.lua
-#, fuzzy
msgid "Main"
-msgstr "Meniul Principal"
+msgstr "Principal"
#: builtin/mainmenu/tab_simple_main.lua
-#, fuzzy
msgid "Start Singleplayer"
-msgstr "Singleplayer"
+msgstr "Începeți Jucător singur"
#: src/client/client.cpp
msgid "Connection timed out."
@@ -873,21 +1000,19 @@ msgstr "Terminat!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr ""
+msgstr "Inițializarea nodurilor"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr ""
+msgstr "Se inițializează nodurile..."
#: src/client/client.cpp
-#, fuzzy
msgid "Loading textures..."
-msgstr "Se încarcă..."
+msgstr "Se încarcă texturi ..."
#: src/client/client.cpp
-#, fuzzy
msgid "Rebuilding shaders..."
-msgstr "Se rezolvă adresa..."
+msgstr "Reconstruirea shaderelor..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
@@ -899,7 +1024,7 @@ msgstr "Nu se poate găsi sau încărca jocul \""
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr "Specificare invalidă"
+msgstr "Jocul este nevalid."
#: src/client/clientlauncher.cpp
msgid "Main Menu"
@@ -911,20 +1036,28 @@ msgstr "Nici un cuvânt selectat și nici o adresă scrisă. Nimic de făcut."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr "Numele jucătorului prea lung."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr ""
+msgstr "Vă rugăm să alegeți un nume!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr ""
+msgstr "Fișierul cu parolă nu a putut fi deschis: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
-msgstr ""
-
+msgstr "Calea aprovizionată a lumii nu există: "
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -938,78 +1071,69 @@ msgstr ""
"Verifică deug.txt pentru detalii."
#: src/client/game.cpp
-#, fuzzy
msgid "- Address: "
-msgstr "Adresă/Port"
+msgstr "- Adresa: "
#: src/client/game.cpp
-#, fuzzy
msgid "- Creative Mode: "
-msgstr "Modul Creativ"
+msgstr "- Modul creativ: "
#: src/client/game.cpp
-#, fuzzy
msgid "- Damage: "
-msgstr "Activează Daune"
+msgstr "- Daune: "
#: src/client/game.cpp
msgid "- Mode: "
-msgstr ""
+msgstr "- Modul: "
#: src/client/game.cpp
msgid "- Port: "
-msgstr ""
+msgstr "- Port: "
#: src/client/game.cpp
-#, fuzzy
msgid "- Public: "
-msgstr "Public"
+msgstr "- Public: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr ""
+msgstr "- Jucător vs jucător: "
#: src/client/game.cpp
-#, fuzzy
msgid "- Server Name: "
-msgstr "Server"
+msgstr "- Numele serverului: "
#: src/client/game.cpp
-#, fuzzy
msgid "Automatic forward disabled"
-msgstr "ÃŽnainte"
+msgstr "Redirecționare automată dezactivată"
#: src/client/game.cpp
-#, fuzzy
msgid "Automatic forward enabled"
-msgstr "ÃŽnainte"
+msgstr "Redirecționare automată activată"
#: src/client/game.cpp
msgid "Camera update disabled"
-msgstr ""
+msgstr "Actualizarea camerei este dezactivată"
#: src/client/game.cpp
-#, fuzzy
msgid "Camera update enabled"
-msgstr "Daune activate"
+msgstr "Actualizarea camerei este activată"
#: src/client/game.cpp
msgid "Change Password"
msgstr "Schimbă Parola"
#: src/client/game.cpp
-#, fuzzy
msgid "Cinematic mode disabled"
-msgstr "Modul Creativ"
+msgstr "Modul cinematografic este dezactivat"
#: src/client/game.cpp
-#, fuzzy
msgid "Cinematic mode enabled"
-msgstr "Modul Creativ"
+msgstr "Modul cinematografic activat"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
-msgstr ""
+msgstr "Scripturile din partea clientului sunt dezactivate"
#: src/client/game.cpp
msgid "Connecting to server..."
@@ -1020,7 +1144,7 @@ msgid "Continue"
msgstr "Continuă"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1037,38 +1161,40 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
-"Controale prestabilite:\n"
-"- WASD: mișcare\n"
-"- Spațiu: sărire/urcare\n"
-"- Shift: furișare/coborâre\n"
-"- Q: aruncă obiect\n"
-"- I: inventar\n"
-"- Mouse: întoarcere/vedere\n"
-"- Click stânga: săpare/lovire\n"
-"- Click dreapta: pune/folosește\n"
-"- Rotiță mouse: selectează obiect\n"
-"- T: chat\n"
+"Controale:\n"
+"-%s: deplasați înainte\n"
+"-%s: deplasați înapoi\n"
+"-%s: deplasați spre stânga\n"
+"-%s: deplasați spre dreapta\n"
+"-%s: salt / urcare\n"
+"-%s: strecurați / coborâți\n"
+"-%s: aruncați element\n"
+"-%s: inventar\n"
+"- Mouse: rotiți / priviți\n"
+"- Mouse stânga: săpați / pocniți\n"
+"- Mouse dreapta: plasați / utilizare\n"
+"- Roată mousului: selectează elementul\n"
+"-%s: chat\n"
#: src/client/game.cpp
msgid "Creating client..."
msgstr "Se creează clientul..."
#: src/client/game.cpp
-#, fuzzy
msgid "Creating server..."
msgstr "Se crează serverul..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr ""
+msgstr "Informațiile de depanare și graficul profilului sunt ascunse"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr ""
+msgstr "Informații de depanare afișate"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr ""
+msgstr "Informații de depanare, grafic de profil și ascuns"
#: src/client/game.cpp
msgid ""
@@ -1085,14 +1211,26 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
+"Controale implicite:\n"
+"Niciun meniu vizibil:\n"
+"- apăsare unică: activare buton\n"
+"- apăsare dublă: plasare / utilizare\n"
+"- deget glisant: privește în jur\n"
+"Meniu / Inventar vizibil:\n"
+"- apăsare dublă (exterior):\n"
+" -> close\n"
+"- touch stack, slot pentru atingere:\n"
+" -> mută stiva\n"
+"- atingeți și trageți, atingeți al doilea deget\n"
+" -> plasați un singur element în slot\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr ""
+msgstr "Interval de vizualizare nelimitat dezactivat"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr ""
+msgstr "Interval de vizualizare nelimitat activat"
#: src/client/game.cpp
msgid "Exit to Menu"
@@ -1103,56 +1241,48 @@ msgid "Exit to OS"
msgstr "Ieși din joc"
#: src/client/game.cpp
-#, fuzzy
msgid "Fast mode disabled"
-msgstr "Dezactivează MP"
+msgstr "Modul rapid este dezactivat"
#: src/client/game.cpp
-#, fuzzy
msgid "Fast mode enabled"
-msgstr "Daune activate"
+msgstr "Modul rapid activat"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr ""
+msgstr "Modul rapid activat (notă: niciun privilegiu „rapidâ€)"
#: src/client/game.cpp
-#, fuzzy
msgid "Fly mode disabled"
-msgstr "Dezactivează MP"
+msgstr "Modul zburat dezactivat"
#: src/client/game.cpp
-#, fuzzy
msgid "Fly mode enabled"
-msgstr "Daune activate"
+msgstr "Modul zburat activat"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr ""
+msgstr "Modul de zbor este activat (notă: niciun privilegiu „zboarăâ€)"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog disabled"
-msgstr "Dezactivează MP"
+msgstr "Ceață dezactivată"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog enabled"
-msgstr "activat"
+msgstr "Ceață activată"
#: src/client/game.cpp
msgid "Game info:"
-msgstr ""
+msgstr "Informatii despre joc:"
#: src/client/game.cpp
-#, fuzzy
msgid "Game paused"
-msgstr "Numele jocului"
+msgstr "Joc întrerupt"
#: src/client/game.cpp
-#, fuzzy
msgid "Hosting server"
-msgstr "Se crează serverul..."
+msgstr "Găzduind un server"
#: src/client/game.cpp
msgid "Item definitions..."
@@ -1160,7 +1290,7 @@ msgstr "Definițiile obiectelor..."
#: src/client/game.cpp
msgid "KiB/s"
-msgstr ""
+msgstr "KiB / s"
#: src/client/game.cpp
msgid "Media..."
@@ -1168,52 +1298,51 @@ msgstr "Media..."
#: src/client/game.cpp
msgid "MiB/s"
-msgstr ""
+msgstr "MiB / s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "Hartă mip dezactivată de joc sau mod"
#: src/client/game.cpp
msgid "Minimap hidden"
-msgstr ""
+msgstr "Hartă mip ascunsă"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x1"
-msgstr ""
+msgstr "Hartă mip în modul radar, Zoom x1"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x2"
-msgstr ""
+msgstr "Hartă mip în modul radar, Zoom x2"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x4"
-msgstr ""
+msgstr "Hartă mip în modul radar, Zoom x4"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x1"
-msgstr ""
+msgstr "Hartă mip în modul de suprafață, Zoom x1"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x2"
-msgstr ""
+msgstr "Hartă mip în modul de suprafață, Zoom x2"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x4"
-msgstr ""
+msgstr "Hartă mip în modul de suprafață, Zoom x4"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr ""
+msgstr "Modul Noclip este dezactivat"
#: src/client/game.cpp
-#, fuzzy
msgid "Noclip mode enabled"
-msgstr "Daune activate"
+msgstr "Modul Noclip activat"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr ""
+msgstr "Modul Noclip activat (notă: nu este privilegiat „noclipâ€)"
#: src/client/game.cpp
msgid "Node definitions..."
@@ -1221,125 +1350,128 @@ msgstr "Definițiile Blocurilor..."
#: src/client/game.cpp
msgid "Off"
-msgstr ""
+msgstr "Oprit"
#: src/client/game.cpp
msgid "On"
-msgstr ""
+msgstr "Pornit"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr ""
+msgstr "Mod mutare pitch dezactivat"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr ""
+msgstr "Mod de mutare pitch activat"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "Graficul profilului este afișat"
#: src/client/game.cpp
msgid "Remote server"
-msgstr ""
+msgstr "Server de la distanță"
#: src/client/game.cpp
msgid "Resolving address..."
msgstr "Se rezolvă adresa..."
#: src/client/game.cpp
-#, fuzzy
msgid "Shutting down..."
msgstr "Se închide..."
#: src/client/game.cpp
msgid "Singleplayer"
-msgstr "Singleplayer"
+msgstr "Jucător singur"
#: src/client/game.cpp
msgid "Sound Volume"
msgstr "Volum Sunet"
#: src/client/game.cpp
-#, fuzzy
msgid "Sound muted"
-msgstr "Volum Sunet"
+msgstr "Sunet dezactivat"
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
#: src/client/game.cpp
-#, fuzzy
msgid "Sound unmuted"
-msgstr "Volum Sunet"
+msgstr "Sunet activat"
#: src/client/game.cpp
#, c-format
msgid "Viewing range changed to %d"
-msgstr ""
+msgstr "Intervalul de vizualizare s-a modificat la %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr ""
+msgstr "Intervalul de vizualizare este maxim: %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr ""
+msgstr "Intervalul de vizualizare este cel puțin: %d"
#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
-msgstr ""
+msgstr "Volum modificat la %d%%"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr ""
+msgstr "Cadru de sârmă afișat"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr ""
+msgstr "Zoom dezactivat în prezent de joc sau mod"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
-msgstr ""
+msgstr "O.K"
#: src/client/gameui.cpp
-#, fuzzy
msgid "Chat hidden"
-msgstr "Modifică tastele"
+msgstr "Chat ascuns"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "Chat afișat"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "HUD ascuns"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "HUD afișat"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr ""
+msgstr "Profiler ascuns"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr ""
+msgstr "Profiler afișat (pagina %d din %d)"
#: src/client/keycode.cpp
msgid "Apps"
msgstr "Aplicații"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Backspace"
msgstr "ÃŽnapoi"
#: src/client/keycode.cpp
msgid "Caps Lock"
-msgstr ""
+msgstr "Majuscule"
#: src/client/keycode.cpp
msgid "Clear"
@@ -1355,12 +1487,11 @@ msgstr "Jos"
#: src/client/keycode.cpp
msgid "End"
-msgstr "End"
+msgstr "Sfârșit"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Erase EOF"
-msgstr "Ștergere OEF"
+msgstr "Ștergere EOF"
#: src/client/keycode.cpp
msgid "Execute"
@@ -1375,29 +1506,24 @@ msgid "Home"
msgstr "Home"
#: src/client/keycode.cpp
-#, fuzzy
msgid "IME Accept"
-msgstr "Acceptă"
+msgstr "Acceptare IME"
#: src/client/keycode.cpp
-#, fuzzy
msgid "IME Convert"
-msgstr "Convert"
+msgstr "Conversie IME"
#: src/client/keycode.cpp
-#, fuzzy
msgid "IME Escape"
-msgstr "Escape"
+msgstr "IME de Evacuare"
#: src/client/keycode.cpp
-#, fuzzy
msgid "IME Mode Change"
-msgstr "Schimbă modul"
+msgstr "Schimbare mod IME"
#: src/client/keycode.cpp
-#, fuzzy
msgid "IME Nonconvert"
-msgstr "Nonconvert"
+msgstr "IME Nonconvertit"
#: src/client/keycode.cpp
msgid "Insert"
@@ -1427,6 +1553,7 @@ msgstr "Shift Stânga"
msgid "Left Windows"
msgstr "Windows Stânga"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Meniu"
@@ -1441,64 +1568,63 @@ msgstr "Num Lock"
#: src/client/keycode.cpp
msgid "Numpad *"
-msgstr "Numpad *"
+msgstr "Num pad *"
#: src/client/keycode.cpp
msgid "Numpad +"
-msgstr "Numpad +"
+msgstr "Num pad +"
#: src/client/keycode.cpp
msgid "Numpad -"
-msgstr "Numpad -"
+msgstr "Num pad -"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Numpad ."
-msgstr "Numpad *"
+msgstr "Numpad."
#: src/client/keycode.cpp
msgid "Numpad /"
-msgstr "Numpad /"
+msgstr "Num pad /"
#: src/client/keycode.cpp
msgid "Numpad 0"
-msgstr "Numpad 0"
+msgstr "Num pad 0"
#: src/client/keycode.cpp
msgid "Numpad 1"
-msgstr "Numpad 1"
+msgstr "Num pad 1"
#: src/client/keycode.cpp
msgid "Numpad 2"
-msgstr "Numpad 2"
+msgstr "Num pad 2"
#: src/client/keycode.cpp
msgid "Numpad 3"
-msgstr "Numpad 3"
+msgstr "Num pad 3"
#: src/client/keycode.cpp
msgid "Numpad 4"
-msgstr "Numpad 4"
+msgstr "Num pad 4"
#: src/client/keycode.cpp
msgid "Numpad 5"
-msgstr "Numpad 5"
+msgstr "Num pad 5"
#: src/client/keycode.cpp
msgid "Numpad 6"
-msgstr "Numpad 6"
+msgstr "Num pad 6"
#: src/client/keycode.cpp
msgid "Numpad 7"
-msgstr "Numpad 7"
+msgstr "Num pad 7"
#: src/client/keycode.cpp
msgid "Numpad 8"
-msgstr "Numpad 8"
+msgstr "Num pad 8"
#: src/client/keycode.cpp
msgid "Numpad 9"
-msgstr "Numpad 9"
+msgstr "Num pad 9"
#: src/client/keycode.cpp
msgid "OEM Clear"
@@ -1506,11 +1632,11 @@ msgstr "Curățare OEM"
#: src/client/keycode.cpp
msgid "Page down"
-msgstr ""
+msgstr "Pagină în jos"
#: src/client/keycode.cpp
msgid "Page up"
-msgstr ""
+msgstr "Pagină sus"
#: src/client/keycode.cpp
msgid "Pause"
@@ -1520,9 +1646,10 @@ msgstr "Pauză"
msgid "Play"
msgstr "Joacă"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
-msgstr "Print"
+msgstr "Imprimare"
#: src/client/keycode.cpp
msgid "Return"
@@ -1556,6 +1683,7 @@ msgstr "Windows Dreapta"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Selectează"
@@ -1566,7 +1694,7 @@ msgstr "Shift"
#: src/client/keycode.cpp
msgid "Sleep"
-msgstr "Sleep"
+msgstr "Somn"
#: src/client/keycode.cpp
msgid "Snapshot"
@@ -1602,7 +1730,7 @@ msgstr "Parolele nu se potrivesc!"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
-msgstr ""
+msgstr "Înregistrează-te și Alătură-te"
#: src/gui/guiConfirmRegistration.cpp
#, c-format
@@ -1613,33 +1741,36 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
+"Sunteți pe cale să vă asociați pentru prima dată la acest server cu numele "
+"\"%s\".\n"
+"Dacă continuați, se va crea un cont nou utilizând acreditările pe acest "
+"server.\n"
+"Reintroduceți parola și faceți clic pe \"Înregistrare și asociere\" pentru a "
+"confirma crearea contului sau faceți clic pe \"Revocare\" pentru a abandona."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Continuă"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "\"Special\" = climb down"
-msgstr "\"Aleargă\" = coboară"
+msgstr "\"Special\" = coborâți"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Autoforward"
-msgstr "ÃŽnainte"
+msgstr "Redirecționare înainte"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
-msgstr ""
+msgstr "Salt automat"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "ÃŽnapoi"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Change camera"
-msgstr "Modifică tastele"
+msgstr "Schimba camera"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
@@ -1655,11 +1786,11 @@ msgstr "Consloă"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
-msgstr ""
+msgstr "Interval dec"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
-msgstr ""
+msgstr "Dec. volum"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
@@ -1675,12 +1806,11 @@ msgstr "ÃŽnainte"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
-msgstr ""
+msgstr "Interval Inc"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Inc. volume"
-msgstr "Volum Sunet"
+msgstr "Volumul inc"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inventory"
@@ -1700,31 +1830,28 @@ msgstr ""
"Keybindings. (Dacă acest meniu apare, șterge lucrurile din minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Local command"
-msgstr "Comandă"
+msgstr "Comandă locală"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Mute"
-msgstr ""
+msgstr "Mut"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Next item"
-msgstr "Următorul"
+msgstr "Următorul element"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
-msgstr ""
+msgstr "Elementul anterior"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Range select"
msgstr "Selectare distanță"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
-#, fuzzy
msgid "Screenshot"
-msgstr "PrintScreen"
+msgstr "Captură de ecran"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
@@ -1732,17 +1859,15 @@ msgstr "Furișează"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Special"
-msgstr ""
+msgstr "Special"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle HUD"
-msgstr "Intră pe zbor"
+msgstr "Comutați HUD"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle chat log"
-msgstr "Intră pe rapid"
+msgstr "Comutați jurnalul de chat"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
@@ -1753,23 +1878,20 @@ msgid "Toggle fly"
msgstr "Intră pe zbor"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle fog"
-msgstr "Intră pe zbor"
+msgstr "Comutați ceața"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle minimap"
-msgstr "Intră pe noclip"
+msgstr "Comutați minimap"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Intră pe noclip"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
-msgstr "Intră pe rapid"
+msgstr "Comutați pitchmove"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -1796,18 +1918,22 @@ msgid "Exit"
msgstr "Ieșire"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy
msgid "Muted"
-msgstr "apasă o tastă"
+msgstr "Amuțit"
#: src/gui/guiVolumeChange.cpp
msgid "Sound Volume: "
msgstr "Volum sunet: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
-msgstr ""
+msgstr "Introduceţi "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "ro"
@@ -1817,6 +1943,9 @@ msgid ""
"(Android) Fixes the position of virtual joystick.\n"
"If disabled, virtual joystick will center to first-touch's position."
msgstr ""
+"(Android) Fixează poziția joystick-ului virtual.\n"
+"Dacă este dezactivat, joystick-ul virtual se va orienta către poziția la "
+"prima atingere."
#: src/settings_translation_file.cpp
msgid ""
@@ -1824,6 +1953,9 @@ msgid ""
"If enabled, virtual joystick will also tap \"aux\" button when out of main "
"circle."
msgstr ""
+"(Android) Utilizați joystick-ul virtual pentru a declanșa butonul \"aux\".\n"
+"Dacă este activat, joystick-ul virtual va atinge, de asemenea, butonul \"aux"
+"\" atunci când este în afara cercului principal."
#: src/settings_translation_file.cpp
msgid ""
@@ -1836,6 +1968,17 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
+"(X, Y, Z) compensarea fractalului din centrul lumii în unități de „scarăâ€.\n"
+"Poate fi folosit pentru a muta un punct dorit la (0, 0) pentru a crea o\n"
+"punct de reproducere adecvat sau pentru a permite „mărirea†pe un dorit\n"
+"punct prin creÈ™terea „scarăâ€.\n"
+"Valoarea implicită este reglată pentru un punct de reproducere adecvat "
+"pentru Mandelbrot\n"
+"setează cu parametrii prestabili, este posibil să fie nevoie de modificări "
+"în alte\n"
+"situații.\n"
+"Intervalul aproximativ -2 până la 2. Înmulțiți cu „scala†pentru compensarea "
+"în noduri."
#: src/settings_translation_file.cpp
msgid ""
@@ -1847,75 +1990,99 @@ 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) scara fractalului în noduri.\n"
+"Mărimea efectivă a fractalului va fi de 2 până la 3 ori mai mare.\n"
+"Aceste numere pot fi făcute foarte mari, fractal\n"
+"nu trebuie să se încadreze în interiorul lumii.\n"
+"Măriți acestea pentru a „mări†detaliile fractalei.\n"
+"Valoarea implicită este pentru o formă ghemuită vertical, potrivită pentru\n"
+"o insulă, setați toate cele 3 numere egale pentru forma brută."
#: src/settings_translation_file.cpp
msgid ""
"0 = parallax occlusion with slope information (faster).\n"
"1 = relief mapping (slower, more accurate)."
msgstr ""
+"0 = ocluzia de paralax cu informații despre panta (mai rapid).\n"
+"1 = mapare în relief (mai lentă, mai exactă)."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr ""
+msgstr "Zgomot 2D care controlează forma/dimensiunea munților crestați."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "Zgomot 2D care controlează forma/dimensiune de dealuri."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "Zgomot 2D care controlează forma / dimensiunea munților pas."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
-msgstr ""
+msgstr "Zgomot 2D care controlează mărimea / apariția lanțurilor montate."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "Zgomot 2D care controlează dimensiunea / apariția de dealuri rulate."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
msgstr ""
+"Zgomot 2D care controlează mărimea/apariția intervalelor de munți de pas."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "Zgomot 2D, care localizează văile râurilor și canalelor."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D clouds"
msgstr "Nori 3D"
#: src/settings_translation_file.cpp
msgid "3D mode"
+msgstr "Mod 3D"
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
msgstr ""
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
-msgstr ""
+msgstr "Zgomot 3D care definește caverne gigantice."
#: src/settings_translation_file.cpp
msgid ""
"3D noise defining mountain structure and height.\n"
"Also defines structure of floatland mountain terrain."
msgstr ""
+"Zgomot 3D care definește structura și înălțimea muntelui.\n"
+"De asemenea, definește structura terenului montan floatland."
#: src/settings_translation_file.cpp
-msgid "3D noise defining structure of river canyon walls."
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr "Zgomot 3D care definește structura pereților canionului cu râu."
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining terrain."
-msgstr ""
+msgstr "Zgomot 3D care definește terenul."
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
msgstr ""
+"Zgomot 3D pentru hangare de munte, stânci, etc. De obicei, mici variante."
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "Zgomot 3D care determină numărul de temnițe pe bucată de hartă."
#: src/settings_translation_file.cpp
msgid ""
@@ -1930,52 +2097,69 @@ msgid ""
"- pageflip: quadbuffer based 3d.\n"
"Note that the interlaced mode requires shaders to be enabled."
msgstr ""
+"Suport 3D.\n"
+"ÃŽn prezent, suportate:\n"
+"- Nici unul: nici o ieșire 3d.\n"
+"- anaglyph: cyan / magenta culoare 3d.\n"
+"- întrețesut: ciudat / par linie pe bază de suport ecran de polarizare.\n"
+"- partea de sus: split screen sus / jos.\n"
+"- sidebyside: split ecran unul lângă altul.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer pe bază de 3d.\n"
+"Rețineți că modul între țesutnecesită umbrire pentru a fi activat."
#: 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 ""
+"Un seed de hartă aleasă pentru o hartă nouă, lăsa goală pentru a fii "
+"întâmplătoare.\n"
+"Va fi înlocuit atunci când se creează o lume nouă în meniul principal."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
msgstr ""
+"Un mesaj care va fi afișat tuturor clienților în momentul blocării "
+"serverului."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
msgstr ""
+"Un mesaj care va fi afișat tuturor clienților la închiderea serverului."
#: src/settings_translation_file.cpp
msgid "ABM interval"
-msgstr ""
+msgstr "Interval ABM"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
-msgstr ""
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
+msgstr "Limita absolută a cozilor emergente"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
-msgstr ""
+msgstr "Accelerare în aer"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr ""
+msgstr "Accelerarea gravitației, în noduri pe secundă pe secundă."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
-msgstr ""
+msgstr "Modificatori de bloc activi"
#: src/settings_translation_file.cpp
msgid "Active block management interval"
-msgstr ""
+msgstr "Interval de gestionare a blocurilor activ"
#: src/settings_translation_file.cpp
msgid "Active block range"
-msgstr ""
+msgstr "Interval de bloc activ"
#: src/settings_translation_file.cpp
msgid "Active object send range"
-msgstr ""
+msgstr "Interval de trimitere obiect e activ"
#: src/settings_translation_file.cpp
msgid ""
@@ -1983,22 +2167,37 @@ msgid ""
"Leave this blank to start a local server.\n"
"Note that the address field in the main menu overrides this setting."
msgstr ""
+"Adresa la care să vă conectați.\n"
+"Lăsați necompletat pentru a porni un server local.\n"
+"Rețineți că, câmpul de adresă din meniul principal suprascrie această setare."
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
-msgstr ""
+msgstr "Adăuga particule atunci când săpați un nod."
#: src/settings_translation_file.cpp
msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
+"Ajustați configurația dpi pe ecran (numai pentru x11/Android), de exemplu "
+"pentru ecrane 4k."
#: src/settings_translation_file.cpp
-msgid "Advanced"
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr "Avansat"
+
+#: src/settings_translation_file.cpp
msgid ""
"Alters the light curve by applying 'gamma correction' to it.\n"
"Higher values make middle and lower light levels brighter.\n"
@@ -2006,65 +2205,69 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
+"Modifică curba luminii prin aplicarea 'corecția gamma' la ea.\n"
+"Valori mai mari de a face de mijloc și de jos niveluri de lumină "
+"strălucitoare.\n"
+"Valoarea '1.0' lasă lumina curba nealterată.\n"
+"Aceasta are doar un efect semnificativ asupra lumină naturală și "
+"artificială\n"
+"lumina, are un efect foarte mic asupra naturală lumina de noapte."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
-msgstr ""
+msgstr "Întotdeauna zboară și rapid"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
-msgstr ""
+msgstr "Gamma ocluziei ambientală"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "Cantitatea de mesaje pe care un jucător poate trimite la 10 secunde."
#: src/settings_translation_file.cpp
msgid "Amplifies the valleys."
-msgstr ""
+msgstr "Amplifică văile."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Anisotropic filtering"
msgstr "Filtru Anizotropic"
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr ""
+msgstr "Anunță serverul"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr ""
+msgstr "Anunțați pe această listă de servere."
#: src/settings_translation_file.cpp
msgid "Append item name"
-msgstr ""
+msgstr "Adăugare nume element"
#: src/settings_translation_file.cpp
msgid "Append item name to tooltip."
-msgstr ""
+msgstr "Adăugați numele articolului la sugestia de instrumente."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
-msgstr ""
+msgstr "Zgomotul merilor"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
-msgstr ""
+msgstr "Inerție braț"
#: src/settings_translation_file.cpp
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
+"Inerția brațului, oferă o mișcare mai realistă a\n"
+"brațul când camera se mișcă."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
-msgstr ""
+msgstr "Solicitați să vă reconectați după cădere"
#: src/settings_translation_file.cpp
msgid ""
@@ -2080,19 +2283,28 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
+"La această distanță serverul va optimiza agresiv care blocuri sunt trimise "
+"la\n"
+"Clientii.\n"
+"Valorile mici pot îmbunătăți performanța foarte mult, în detrimentul\n"
+"glitches de redare (unele blocuri nu vor fi redate sub apă și în peșteri,\n"
+"precum și, uneori, pe teren).\n"
+"Setarea acesteia la o valoare mai mare decât max_block_send_distance "
+"dezactivează această\n"
+"Optimizare.\n"
+"În scrise în mapblocks (16 noduri)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatic forward key"
-msgstr "ÃŽnainte"
+msgstr "Tasta de avans automată"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "Săriți automat obstacolele cu un singur nod."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr ""
+msgstr "Raportați automat la lista de server."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
@@ -2100,104 +2312,104 @@ msgstr "Salvează automat dimensiunea ecranului"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "Mod scalare automată"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Backward key"
-msgstr "ÃŽnapoi"
+msgstr "Tastă înapoi"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Base ground level"
-msgstr "Mapgen"
+msgstr "Nivelul solului de bază"
#: src/settings_translation_file.cpp
msgid "Base terrain height."
-msgstr ""
+msgstr "Înălțimea terenului de bază."
#: src/settings_translation_file.cpp
msgid "Basic"
-msgstr ""
+msgstr "De bază"
#: src/settings_translation_file.cpp
msgid "Basic privileges"
-msgstr ""
+msgstr "Privilegii de bază"
#: src/settings_translation_file.cpp
msgid "Beach noise"
-msgstr ""
+msgstr "Zgomot de plajă"
#: src/settings_translation_file.cpp
msgid "Beach noise threshold"
-msgstr ""
+msgstr "Pragul de zgomot de plajă"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bilinear filtering"
msgstr "Filtrare Biliniară"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bind address"
-msgstr "Se rezolvă adresa..."
+msgstr "Adresa de legare"
#: src/settings_translation_file.cpp
msgid "Biome API temperature and humidity noise parameters"
-msgstr ""
+msgstr "Parametrii de zgomot de temperatură și umiditate Biome API"
#: src/settings_translation_file.cpp
msgid "Biome noise"
-msgstr ""
+msgstr "Biome zgomot"
#: src/settings_translation_file.cpp
msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
+msgstr "Biți per pixel (aka adâncime de culoare) în modul ecran complet."
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
-msgstr ""
+msgstr "Distanță de optimizare trimitere bloc"
#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
-msgstr ""
+msgstr "Cale font aldin și cursiv"
#: src/settings_translation_file.cpp
msgid "Bold and italic monospace font path"
-msgstr ""
+msgstr "Cale de font monospațiu aldin și cursiv"
#: src/settings_translation_file.cpp
msgid "Bold font path"
-msgstr ""
+msgstr "Calea cu caractere îngroșate"
#: src/settings_translation_file.cpp
msgid "Bold monospace font path"
-msgstr ""
+msgstr "Calea cu caractere monospațiale îngroșate"
#: src/settings_translation_file.cpp
msgid "Build inside player"
-msgstr ""
+msgstr "Construiți în interiorul jucătorului"
#: src/settings_translation_file.cpp
msgid "Builtin"
-msgstr ""
+msgstr "Incorporat"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bumpmapping"
-msgstr "Mip Mapping"
+msgstr "Hartă pentru Denivelări"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
+"Camera \"aproape de tăiere plan\" distanta în noduri, între 0 și 0.25\n"
+"Funcționează numai pe platforme LeS. Majoritatea utilizatorilor nu vor "
+"trebui să schimbe acest lucru.\n"
+"Creșterea poate reduce artefacte pe gpu-uri mai slabe.\n"
+"0.1 = Implicit, 0,25 = Valoare bună pentru tabletele mai slabe."
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
-msgstr ""
+msgstr "Netezirea camerei"
#: src/settings_translation_file.cpp
msgid "Camera smoothing in cinematic mode"
@@ -2244,9 +2456,8 @@ msgid "Cavern taper"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cavern threshold"
-msgstr "Mapgen"
+msgstr "Pragul cavernei"
#: src/settings_translation_file.cpp
msgid "Cavern upper limit"
@@ -2269,51 +2480,53 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
-msgstr "Modifică tastele"
+msgstr "Tasta de chat"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Cheia de comutare a chatului"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
-msgstr "Mapgen"
+msgstr "Formatul mesajului de chat"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message kick threshold"
-msgstr "Mapgen"
+msgstr "Pragul de lansare a mesajului de chat"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat toggle key"
-msgstr "Modifică tastele"
+msgstr "Cheia de comutare a chatului"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chatcommands"
-msgstr "Comandă"
+msgstr "Comenzi de chat"
#: src/settings_translation_file.cpp
msgid "Chunk size"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cinematic mode"
-msgstr "Modul Creativ"
+msgstr "Modul cinematografic"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cinematic mode key"
-msgstr "Modul Creativ"
+msgstr "Tasta modului cinematografic"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
@@ -2328,14 +2541,12 @@ msgid "Client and Server"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Client modding"
-msgstr "Client"
+msgstr "Modare la client"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Client side modding restrictions"
-msgstr "Client"
+msgstr "Restricții de modificare de partea clientului"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
@@ -2405,9 +2616,8 @@ msgid "Connects glass if supported by node."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Console alpha"
-msgstr "Consloă"
+msgstr "Consola alfa"
#: src/settings_translation_file.cpp
msgid "Console color"
@@ -2422,9 +2632,8 @@ msgid "ContentDB Flag Blacklist"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB URL"
-msgstr "Continuă"
+msgstr "URL-ul ContentDB"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
@@ -2471,9 +2680,8 @@ msgid "Crash message"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Creative"
-msgstr "Creează"
+msgstr "Creativ"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
@@ -2496,9 +2704,8 @@ msgid "DPI"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Damage"
-msgstr "Activează Daune"
+msgstr "Daune"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
@@ -2529,9 +2736,8 @@ msgid "Default acceleration"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Default game"
-msgstr "modifică jocul"
+msgstr "Jocul implicit"
#: src/settings_translation_file.cpp
msgid ""
@@ -2540,9 +2746,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Default password"
-msgstr "Noua parolă"
+msgstr "Parolă implicită"
#: src/settings_translation_file.cpp
msgid "Default privileges"
@@ -2553,6 +2758,11 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Jocul implicit"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2663,14 +2873,12 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Digging particles"
-msgstr "Activează tot"
+msgstr "Particule pentru săpare"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Disable anticheat"
-msgstr "Activează particulele"
+msgstr "Dezactivează anticheatul"
#: src/settings_translation_file.cpp
msgid "Disallow empty passwords"
@@ -2681,14 +2889,12 @@ msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Double tap jump for fly"
msgstr "Apasă de 2 ori \"sari\" pentru a zbura"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Double-tapping the jump key toggles fly mode."
-msgstr "Apasă de 2 ori \"sari\" pentru a zbura"
+msgstr "Apăsând de 2 ori tasta Salt pentru a comuta modul de zburat."
#: src/settings_translation_file.cpp
msgid "Drop item key"
@@ -2707,9 +2913,8 @@ msgid "Dungeon minimum Y"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dungeon noise"
-msgstr "Mapgen"
+msgstr "Zgomotul temnițelor"
#: src/settings_translation_file.cpp
msgid ""
@@ -2736,14 +2941,12 @@ msgid "Enable joysticks"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable mod channels support."
-msgstr "Repozitoriu Online de moduri"
+msgstr "Activați suportul pentru canale mod."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable mod security"
-msgstr "Repozitoriu Online de moduri"
+msgstr "Activați securitatea modului"
#: src/settings_translation_file.cpp
msgid "Enable players getting damage and dying."
@@ -2830,9 +3033,8 @@ msgid "Enables caching of facedir rotated meshes."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enables minimap."
-msgstr "Activează Daune"
+msgstr "Activează minimap."
#: src/settings_translation_file.cpp
msgid ""
@@ -2869,6 +3071,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2885,9 +3097,8 @@ msgid "Fall bobbing factor"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "lipsă_tip_font"
+msgstr "Cale font de rezervă"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -2959,9 +3170,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Filtering"
-msgstr "Filtru Anizotropic"
+msgstr "Filtrarea"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -2980,6 +3190,35 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Zgomotul solului"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -3033,6 +3272,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3075,9 +3320,8 @@ msgid "Formspec full-screen background opacity (between 0 and 255)."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Forward key"
-msgstr "ÃŽnainte"
+msgstr "Tasta înainte"
#: src/settings_translation_file.cpp
msgid "Fourth of 4 2D noises that together define hill/mountain range height."
@@ -3175,19 +3419,16 @@ msgid "Gravity"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ground level"
-msgstr "Mapgen"
+msgstr "Nivelul solului"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ground noise"
-msgstr "Mapgen"
+msgstr "Zgomotul solului"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "HTTP mods"
-msgstr "Moduri"
+msgstr "Moduri HTTP"
#: src/settings_translation_file.cpp
msgid "HUD scale factor"
@@ -3227,9 +3468,8 @@ msgid "Height component of the initial window size."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Height noise"
-msgstr "Windows Dreapta"
+msgstr "Zgomot de înălțime"
#: src/settings_translation_file.cpp
msgid "Height select noise"
@@ -3240,14 +3480,12 @@ msgid "High-precision FPU"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hill steepness"
-msgstr "Mapgen"
+msgstr "Abruptul dealului"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hill threshold"
-msgstr "Mapgen"
+msgstr "Pragul dealului"
#: src/settings_translation_file.cpp
msgid "Hilliness1 noise"
@@ -3557,9 +3795,8 @@ msgid "Ignore world errors"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "In-Game"
-msgstr "Joc"
+msgstr "ÃŽn joc"
#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
@@ -3574,9 +3811,8 @@ msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Inc. volume key"
-msgstr "Consloă"
+msgstr "Inc. tastă de volum"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
@@ -3629,9 +3865,8 @@ msgid "Inventory items animations"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Inventory key"
-msgstr "Inventar"
+msgstr "Tasta pentru inventar"
#: src/settings_translation_file.cpp
msgid "Invert mouse"
@@ -3731,9 +3966,8 @@ msgid "Julia z"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Jump key"
-msgstr "Sari"
+msgstr "Tasta de salt"
#: src/settings_translation_file.cpp
msgid "Jumping speed"
@@ -4230,14 +4464,12 @@ msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lake steepness"
-msgstr "Mapgen"
+msgstr "Abruptitatea lacului"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lake threshold"
-msgstr "Mapgen"
+msgstr "Pragul lacului"
#: src/settings_translation_file.cpp
msgid "Language"
@@ -4260,9 +4492,8 @@ msgid "Large cave proportion flooded"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Large chat console key"
-msgstr "Consloă"
+msgstr "Tasta de consolă de chat mare"
#: src/settings_translation_file.cpp
msgid "Leaves style"
@@ -4277,9 +4508,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Left key"
-msgstr "Meniu Stânga"
+msgstr "Tasta stângă"
#: src/settings_translation_file.cpp
msgid ""
@@ -4343,14 +4573,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4414,14 +4636,16 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
-msgstr "Meniul Principal"
+msgstr "Scriptul meniului principal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Main menu style"
-msgstr "Meniul Principal"
+msgstr "Stilul meniului principal"
#: src/settings_translation_file.cpp
msgid ""
@@ -4482,7 +4706,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4510,89 +4736,68 @@ msgid "Mapblock unload timeout"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Carpathian"
-msgstr "Mapgen"
+msgstr "Gen de mapă carpatin"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Carpathian specific flags"
-msgstr "Mapgen"
+msgstr "Mapgen Drapele specifice carpatin"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Flat"
-msgstr "Mapgen"
+msgstr "Mapgen Plat"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Flat specific flags"
-msgstr "Mapgen"
+msgstr "Mapgen Plat steaguri specifice"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal"
-msgstr "Mapgen"
+msgstr "Fractal Mapgen"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal specific flags"
-msgstr "Mapgen"
+msgstr "Steaguri specifice Mapgen Fractal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V5"
-msgstr "Mapgen"
+msgstr "Genul de mapă V5"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V5 specific flags"
-msgstr "Mapgen"
+msgstr "Steaguri specifice Mapgen V5"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V6"
-msgstr "Mapgen"
+msgstr "Gen de mapă V6"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V6 specific flags"
-msgstr "Mapgen"
+msgstr "Steaguri specifice Mapgen V6"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V7"
-msgstr "Mapgen"
+msgstr "Gen de mapă V7"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V7 specific flags"
-msgstr "Mapgen"
+msgstr "Steaguri specifice Mapgen V7"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Valleys"
-msgstr "Mapgen"
+msgstr "Mapgen Văi"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Valleys specific flags"
-msgstr "Mapgen"
+msgstr "Mapgen Văi specifice steaguri"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen debug"
-msgstr "Mapgen"
-
-#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Mapgen flags"
-msgstr "Mapgen"
+msgstr "Debug Mapgen"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen name"
-msgstr "Mapgen"
+msgstr "Numele Mapgen"
#: src/settings_translation_file.cpp
msgid "Max block generate distance"
@@ -4658,13 +4863,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4729,9 +4934,8 @@ msgid "Maximum users"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Menus"
-msgstr "Meniu"
+msgstr "Meniuri"
#: src/settings_translation_file.cpp
msgid "Mesh cache"
@@ -4750,6 +4954,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4774,9 +4982,8 @@ msgid "Minimum texture size"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mipmapping"
-msgstr "Mip Mapping"
+msgstr "Cartografierea mip"
#: src/settings_translation_file.cpp
msgid "Mod channels"
@@ -4829,9 +5036,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mute key"
-msgstr "apasă o tastă"
+msgstr "Tasta pentru mut"
#: src/settings_translation_file.cpp
msgid "Mute sound"
@@ -4858,7 +5064,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4910,9 +5116,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4989,10 +5192,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5002,7 +5201,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5036,13 +5237,20 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Pitch move key"
-msgstr "Modul Creativ"
+msgstr "Tasta de mutare a pitch"
#: src/settings_translation_file.cpp
msgid "Pitch move mode"
@@ -5105,6 +5313,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5124,18 +5344,16 @@ msgid "Random input"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Range select key"
-msgstr "Selectare distanță"
+msgstr "Tasta de selectare a intervalului"
#: src/settings_translation_file.cpp
msgid "Recent Chat Messages"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Selectează"
+msgstr "Calea regulată a fontului"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5156,9 +5374,8 @@ msgid "Replaces the default main menu with a custom one."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Report path"
-msgstr "Selectează"
+msgstr "Calea raportului"
#: src/settings_translation_file.cpp
msgid ""
@@ -5191,9 +5408,8 @@ msgid "Ridged mountain size noise"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Right key"
-msgstr "Meniu Drepata"
+msgstr "Tasta dreapta"
#: src/settings_translation_file.cpp
msgid "Rightclick repetition interval"
@@ -5212,9 +5428,8 @@ msgid "River depth"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River noise"
-msgstr "Windows Dreapta"
+msgstr "Zgomotul râului"
#: src/settings_translation_file.cpp
msgid "River size"
@@ -5282,14 +5497,12 @@ msgid "Screenshot folder"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Screenshot format"
-msgstr "PrintScreen"
+msgstr "Formatul de captură de ecran"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Screenshot quality"
-msgstr "PrintScreen"
+msgstr "Calitatea capturii de ecran"
#: src/settings_translation_file.cpp
msgid ""
@@ -5354,32 +5567,26 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Server / Singleplayer"
-msgstr "Singleplayer"
+msgstr "Server / Jucător singur"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Server URL"
-msgstr "Server"
+msgstr "URL-ul serverului"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Server address"
-msgstr "Port server"
+msgstr "Adresa serverului"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Server description"
-msgstr "Port server"
+msgstr "Descrierea serverului"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Server name"
-msgstr "Server"
+msgstr "Numele serverului"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Server port"
msgstr "Port server"
@@ -5388,14 +5595,12 @@ msgid "Server side occlusion culling"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Serverlist URL"
-msgstr "Listă de servere publică"
+msgstr "URL listă server"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Serverlist file"
-msgstr "Listă de servere publică"
+msgstr "Fișier listă pentru servere"
#: src/settings_translation_file.cpp
msgid ""
@@ -5426,9 +5631,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Shader path"
-msgstr "Umbră"
+msgstr "Calea shaderului"
#: src/settings_translation_file.cpp
msgid ""
@@ -5508,9 +5712,8 @@ msgid "Small-scale temperature variation for blending biomes on borders."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Smooth lighting"
-msgstr "Lumină mai bună"
+msgstr "Lumină fină"
#: src/settings_translation_file.cpp
msgid ""
@@ -5527,14 +5730,12 @@ msgid "Smooths rotation of camera. 0 to disable."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Sneak key"
-msgstr "Furișează"
+msgstr "Cheie pentru furiÈ™"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Sneaking speed"
-msgstr "Furișează"
+msgstr "Viteza de furișare"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
@@ -5545,9 +5746,8 @@ msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Special key"
-msgstr "Furișează"
+msgstr "Cheie specială"
#: src/settings_translation_file.cpp
msgid "Special key for climbing/descending"
@@ -5563,6 +5763,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5585,6 +5792,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5596,15 +5807,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5654,9 +5875,8 @@ msgid "Terrain persistence noise"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Texture path"
-msgstr "Pachete de tetură"
+msgstr "Calea texturii"
#: src/settings_translation_file.cpp
msgid ""
@@ -5722,7 +5942,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5823,16 +6043,14 @@ msgid "Tooltip delay"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Touch screen threshold"
-msgstr "Mapgen"
+msgstr "Prag ecran tactil"
#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Trilinear filtering"
msgstr "Filtrare Triliniară"
@@ -5877,6 +6095,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6000,9 +6222,8 @@ msgid "Virtual joystick triggers aux button"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Volume"
-msgstr "Volum Sunet"
+msgstr "Volum"
#: src/settings_translation_file.cpp
msgid ""
@@ -6044,29 +6265,24 @@ msgid "Waving Nodes"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving leaves"
-msgstr "Copaci fantezici"
+msgstr "Frunze legănătoare"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
-msgstr "Frunze legănătoare"
+msgstr "Fluturarea lichidelor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Apă ondulatoare"
+msgstr "Ridicând înălțimea valurilor lichidelor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
-msgstr "Frunze legănătoare"
+msgstr "Viteza undelor lichide"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "Apă ondulatoare"
+msgstr "Lungirea undei lichide"
#: src/settings_translation_file.cpp
msgid "Waving plants"
@@ -6166,9 +6382,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "World start time"
-msgstr "Numele lumii"
+msgstr "Ora de începere a lumii"
#: src/settings_translation_file.cpp
msgid ""
@@ -6203,6 +6418,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6253,3 +6476,12 @@ msgstr ""
#, fuzzy
#~ msgid "Darkness sharpness"
#~ msgstr "Mapgen"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Se descarca si se instaleaza $ 1, vă rugăm să așteptați ..."
+
+#~ msgid "Back"
+#~ msgstr "ÃŽnapoi"
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
diff --git a/po/ru/minetest.po b/po/ru/minetest.po
index d02d2a984..e626d58b3 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-12-05 07:05+0000\n"
-"Last-Translator: Andrei Stepanov <adem4ik@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-18 13:41+0000\n"
+"Last-Translator: Maksim Gamarnik <MoNTE48@mail.ua>\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 3.10-dev\n"
+"X-Generator: Weblate 4.1.1-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -23,9 +23,13 @@ msgstr "ВозродитьÑÑ"
msgid "You died"
msgstr "Вы умерли"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "ОК"
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
-msgstr "Обнаружена ошибка в Ñкрипте Lua:"
+msgstr "Произошла ошибка в Ñкрипте Lua:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -36,10 +40,6 @@ msgid "Main menu"
msgstr "Главное меню"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Oк"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "ПереподключитьÑÑ"
@@ -96,7 +96,7 @@ msgstr "Отключить вÑе"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Отключить пакет"
+msgstr "Отключить пакет модов"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -104,7 +104,7 @@ msgstr "Включить вÑе"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Включить пакет"
+msgstr "Включить пакет модов"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
@@ -115,12 +115,16 @@ msgstr ""
"Разрешены только Ñледующие Ñимволы: [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Больше Модов"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Мод:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr "Ðет необÑзательных завиÑимоÑтей"
+msgstr "Ðет (необÑзательных) завиÑимоÑтей"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
@@ -153,25 +157,24 @@ msgstr "Мир:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "включить"
+msgstr "включен"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Ð’Ñе дополнениÑ"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Ðазад"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Ðазад в главное меню"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr ""
-"ЗагружаетÑÑ Ð¸ уÑтанавливаетÑÑ $1.\n"
-"ПожалуйÑта, подождите..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "ContentDB недоÑтупен, когда Minetest Ñкомпилирован без cURL"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "Загрузка..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -216,15 +219,57 @@ msgstr "Удалить"
msgid "Update"
msgstr "Обновить"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Вид"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Мир Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ «$1» уже ÑущеÑтвует"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¼ÐµÑтноÑть"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Ð’Ñ‹Ñота нивального поÑÑа"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Ð’Ñ‹Ñота нивального поÑÑа"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Шум биомов"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Шум биомов"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Шум пещеры"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Октавы"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Создать"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Итерации"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Скачивайте игры, такие как Minetest Game, на minetest.net"
@@ -232,25 +277,153 @@ msgstr "Скачивайте игры, такие как Minetest Game, на min
msgid "Download one from minetest.net"
msgstr "Ð’Ñ‹ можете Ñкачать их на minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Шум подземельÑ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "ПлоÑÐºÐ°Ñ Ð¼ÐµÑтноÑть"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floating landmasses in the sky"
+msgstr "ПлотноÑть гор на парÑщих оÑтровах"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "Уровень парÑщих оÑтровов"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Игра"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Холмы"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "Видеодрайвер"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Озёра"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Картогенератор"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Флаги картогенератора"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Специальные флаги картогенератора V5"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mountains"
+msgstr "Шум гор"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Сеть туннелей и пещер"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Игра не выбрана"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Уменьшает жару Ñ Ð²Ñ‹Ñотой"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Уменьшает влажноÑть Ñ Ð²Ñ‹Ñотой"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Размер рек"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Зерно"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr "Плавный переход между биомами"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "Базовый шум поверхноÑти"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "Ð”ÐµÑ€ÐµÐ²ÑŒÑ Ð¸ Джунгли-трава"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Глубина рек"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
"Внимание: «Minimal development test» предназначен только Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð²."
@@ -297,8 +470,8 @@ msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
-"Этот пакет модов имеет имÑ, Ñвно указанное в modpack.conf, которое не "
-"изменитÑÑ Ð¾Ñ‚ Ð¿ÐµÑ€ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð´ÐµÑÑŒ."
+"Этот модпак имеет Ñвное имÑ, указанное в modpack.conf, который переопределит "
+"любое переименование здеÑÑŒ."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
@@ -354,7 +527,7 @@ msgstr "ПожалуйÑта, введите допуÑтимое чиÑло."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr "СброÑить значение"
+msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð½Ð°Ñтроек"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
@@ -404,14 +577,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Ð Ð°Ð·Ð±Ñ€Ð¾Ñ Ð¿Ð¾ Z"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "абÑÐ¾Ð»ÑŽÑ‚Ð½Ð°Ñ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð°"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr "Ñтандартные"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "облегчённый"
@@ -426,7 +610,7 @@ msgstr "$1 модов"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "Ðевозможно уÑтановить $1 в $2"
+msgstr "Ðе удалоÑÑŒ уÑтановить $1 в $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
@@ -557,8 +741,12 @@ msgid "Host Server"
msgstr "ЗапуÑтить Ñервер"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "УÑтановите игры из ContentDB"
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
-msgstr "Ð˜Ð¼Ñ / Пароль"
+msgstr "ИмÑ/Пароль"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -626,6 +814,7 @@ msgstr "Ð˜Ð¼Ñ / Пароль"
msgid "Ping"
msgstr "Пинг"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP разрешён"
@@ -836,7 +1025,7 @@ msgstr "Сборка шейдеров..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
-msgstr "Ошибка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (таймаут?)"
+msgstr "Ошибка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (тайм-аут?)"
#: src/client/clientlauncher.cpp
msgid "Could not find or load game \""
@@ -870,6 +1059,14 @@ msgstr "Ðе удалоÑÑŒ открыть указанный файл Ñ Ð¿Ð°Ñ€
msgid "Provided world path doesn't exist: "
msgstr "По Ñтому пути мира нет: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -906,6 +1103,7 @@ msgstr "- Порт: "
msgid "- Public: "
msgstr "- ПубличноÑть: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -1114,7 +1312,7 @@ msgstr "МиБ/Ñ"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr "Миникарта в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° игрой или модом"
+msgstr "Миникарта ÑÐµÐ¹Ñ‡Ð°Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° игрой или модом"
#: src/client/game.cpp
msgid "Minimap hidden"
@@ -1205,6 +1403,14 @@ msgid "Sound muted"
msgstr "Звук отключён"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "Звук отключён"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "Звук не поддерживаетÑÑ Ð² Ñтой Ñборке"
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Звук включён"
@@ -1236,7 +1442,7 @@ msgstr "Отображение каркаÑа включено"
msgid "Zoom currently disabled by game or mod"
msgstr "Приближение в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾ игрой или модом"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "OK"
@@ -1357,6 +1563,7 @@ msgstr "Левый Shift"
msgid "Left Windows"
msgstr "Левый Win"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menu"
@@ -1449,6 +1656,7 @@ msgstr "Пауза"
msgid "Play"
msgstr "Играть"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Print"
@@ -1485,6 +1693,7 @@ msgstr "Правый Win"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Выбор"
@@ -1727,10 +1936,15 @@ msgstr "Заглушить"
msgid "Sound Volume: "
msgstr "ГромкоÑть звука: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Введите "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "ru"
@@ -1755,7 +1969,6 @@ msgstr ""
"когда будет находитьÑÑ Ð·Ð° пределами оÑновного колеÑа."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1840,6 +2053,11 @@ msgid "3D mode"
msgstr "3D-режим"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Сила карт нормалей"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "3D-шум, определÑющий огромные пещеры."
@@ -1852,6 +2070,14 @@ msgstr ""
"Также определÑет Ñтруктуру гор на парÑщих оÑтровах."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "3D-шум, определÑющий Ñтруктуру Ñтен речного каньона."
@@ -1913,7 +2139,8 @@ msgid "ABM interval"
msgstr "Интервал ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ñ‹"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "ÐбÑолютный лимит поÑвлÑющихÑÑ Ð·Ð°Ð¿Ñ€Ð¾Ñов"
#: src/settings_translation_file.cpp
@@ -1963,6 +2190,16 @@ msgstr ""
"только Ð´Ð»Ñ Android). Ðапример Ð´Ð»Ñ Ð¼Ð¾Ð½Ð¸Ñ‚Ð¾Ñ€Ð¾Ð² Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸ÐµÐ¼ в 4k."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Дополнительно"
@@ -1974,10 +2211,13 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Ð’Ñ‹Ñота нивального поÑÑа"
+"ИзменÑет кривую блеÑка, применÑÑ Ðº ней «гамма-\n"
+"коррекцию». Более выÑокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´ÐµÐ»Ð°ÑŽÑ‚ Ñредний \n"
+"и нижний уровни Ñвета Ñрче. Значение «1.0» оÑтавлÑет\n"
+"кривую блеÑка без изменений. Это оказывает \n"
+"ÑущеÑтвенное влиÑние только на дневной и \n"
+"иÑкуÑÑтвенный Ñвет, он очень мало влиÑет на \n"
+"еÑтеÑтвенный ночной Ñвет."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2131,24 +2371,20 @@ msgid "Block send optimize distance"
msgstr "Оптимизированное раÑÑтоÑние отправки блока"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Путь к моноширинному шрифту"
+msgstr "Путь к жирному и курÑивному шрифту"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Путь к моноширинному шрифту"
+msgstr "Путь к жирному и курÑиву моноширинного шрифта"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Путь к шрифту"
+msgstr "Путь к жирному шрифту"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Путь к моноширинному шрифту"
+msgstr "Путь к жирному моноширинному шрифту"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2164,13 +2400,14 @@ msgstr "Бампмаппинг"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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.5.\n"
-"БольшинÑтву пользователей не потребуетÑÑ Ð¼ÐµÐ½Ñть Ñтот параметр.\n"
+"Работает только на платформах Ñ GLES. БольшинÑтву пользователей не требуетÑÑ "
+"менÑть его.\n"
"Его увеличение может уменьшить количеÑтво артефактов на Ñлабых графичеÑких "
"процеÑÑорах.\n"
"0.1 — по умолчанию; 0.25 — хорошее значение Ð´Ð»Ñ Ñлабых планшетов."
@@ -2236,6 +2473,8 @@ 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 ""
@@ -2253,10 +2492,20 @@ msgstr ""
"быть полезно Ð´Ð»Ñ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ¸Ñ… Ñкранов."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Размер шрифта"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Кнопка чата"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Отладочный уровень"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "МакÑимальное количеÑтво Ñообщений в чате"
@@ -2455,6 +2704,11 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Контролирует ширину туннелей, меньшее значение Ñоздаёт более широкие "
+"туннели.\n"
+"Значение >= 10.0 полноÑтью отключает генерацию туннелей и позволÑÑŽÑ‚ "
+"избежать\n"
+"интенÑивного раÑчёта шумов."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2505,7 +2759,6 @@ msgid "Dec. volume key"
msgstr "Клавиша ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Decrease this to increase liquid resistance to movement."
msgstr "Уменьшите значение, чтобы увеличить Ñопротивление жидкоÑти движению."
@@ -2542,6 +2795,11 @@ msgid "Default report format"
msgstr "Формат отчёта по умолчанию"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Ð¡Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð¸Ð³Ñ€Ð°"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2717,6 +2975,8 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Включить поддержку IPv6 (Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° и Ñервера).\n"
+"Ðеобходимо Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ IPv6-Ñоединений."
#: src/settings_translation_file.cpp
msgid ""
@@ -2806,6 +3066,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Включить объекты буфера вершин.\n"
+"Это должно значительно улучшить графичеÑкую производительноÑть."
#: src/settings_translation_file.cpp
msgid ""
@@ -2816,14 +3078,14 @@ msgstr ""
"Ðапример: 0 отключает покачивание, 1.0 Ð´Ð»Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð³Ð¾, 2.0 Ð´Ð»Ñ Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð³Ð¾."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
"Включить/отключить запуÑк IPv6-Ñервера.\n"
-"ИгнорируетÑÑ, еÑли задан «bind_address»."
+"ИгнорируетÑÑ, еÑли задан «bind_address».\n"
+"Ð”Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼ «enable_ipv6»."
#: src/settings_translation_file.cpp
msgid ""
@@ -2879,6 +3141,10 @@ 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"
@@ -2897,6 +3163,16 @@ msgstr ""
"между блоками, когда значение больше, чем 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "ÐšÐ°Ð´Ñ€Ð¾Ð²Ð°Ñ Ñ‡Ð°Ñтота во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð°ÑƒÐ·Ñ‹"
@@ -2913,9 +3189,8 @@ msgid "Fall bobbing factor"
msgstr "КоÑффициент Ð¿Ð¾ÐºÐ°Ñ‡Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ падении"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Резервный шрифт"
+msgstr "Путь к резервному шрифту"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -3015,6 +3290,41 @@ msgid "Fixed virtual joystick"
msgstr "ФикÑÐ°Ñ†Ð¸Ñ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ джойÑтика"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "ПлотноÑть гор на парÑщих оÑтровах"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Y подземельÑ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Y подземельÑ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Базовый шум парÑщих оÑтровов"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "ЭкÑпонента гор на парÑщих оÑтровах"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Базовый шум парÑщих оÑтровов"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Уровень парÑщих оÑтровов"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Клавиша полёта"
@@ -3036,11 +3346,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"
@@ -3056,14 +3366,20 @@ msgstr "Размер шрифта"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "Размер Ñтандартного шрифта в пунктах (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "Размер резервного шрифта в пунктах (pt)."
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "Размер моноширинного шрифта в пунктах (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 ""
#: src/settings_translation_file.cpp
@@ -3737,14 +4053,12 @@ msgid "Invert vertical mouse movement."
msgstr "Инвертировать мышь по вертикали."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Путь к моноширинному шрифту"
+msgstr "Путь к курÑивному шрифту"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Путь к моноширинному шрифту"
+msgstr "Путь к курÑивному моноширинному шрифту"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4557,7 +4871,7 @@ msgstr ""
msgid "Kick players who sent more than X messages per 10 seconds."
msgstr ""
"ЕÑли клиент отправит в чат Ñтолько Ñообщений в течении 10 Ñекунд, то будет "
-"отключен от Ñервера."
+"отключён от Ñервера."
#: src/settings_translation_file.cpp
msgid "Lake steepness"
@@ -4577,11 +4891,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"
@@ -4693,14 +5007,6 @@ msgid "Light curve low gradient"
msgstr "Центр Ñреднего подъёма кривой Ñвета"
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Ограничение очередей emerge на диÑке"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Ограничение очередей emerge Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸"
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4777,6 +5083,11 @@ msgid "Lower Y limit of dungeons."
msgstr "Ðижний лимит Y Ð´Ð»Ñ Ð¿Ð¾Ð´Ð·ÐµÐ¼ÐµÐ»Ð¸Ð¹."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "Ðижний лимит Y Ð´Ð»Ñ Ð¿Ð¾Ð´Ð·ÐµÐ¼ÐµÐ»Ð¸Ð¹."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Скрипт главного меню"
@@ -4860,9 +5171,12 @@ msgstr ""
"активируютÑÑ Ð´Ð¶ÑƒÐ½Ð³Ð»Ð¸, а флаг «jungles» игнорируетÑÑ."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
"Ðтрибуты генерации карт Ð´Ð»Ñ Mapgen v7.\n"
"«хребты» включают реки."
@@ -4889,7 +5203,7 @@ msgstr "Размер кÑша блоков карты в генераторе м
#: src/settings_translation_file.cpp
msgid "Mapblock unload timeout"
-msgstr "Таймаут выгрузки блоков"
+msgstr "Тайм-аут выгрузки блоков"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian"
@@ -4952,10 +5266,6 @@ msgid "Mapgen debug"
msgstr "Отладка картогенератора"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Флаги картогенератора"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Ðазвание картогенератора"
@@ -4997,7 +5307,7 @@ 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."
@@ -5029,17 +5339,19 @@ msgstr ""
"загрузки."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"МакÑимальное количеÑтво блоков в очереди на генерацию. ОÑтавьте пуÑтым Ð´Ð»Ñ "
"автоматичеÑкого выбора подходÑщего значениÑ."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"МакÑимальное количеÑтво блоков в очереди на загрузку из файла. ОÑтавьте "
"пуÑтым Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого выбора подходÑщего значениÑ."
@@ -5138,6 +5450,10 @@ msgid "Method used to highlight selected object."
msgstr "Метод подÑветки выделенного объекта."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Миникарта"
@@ -5255,7 +5571,8 @@ msgid ""
msgstr "Ð˜Ð¼Ñ Ñервера, отображаемое при входе и в ÑпиÑке Ñерверов."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+#, fuzzy
+msgid "Near plane"
msgstr "Ð‘Ð»Ð¸Ð·ÐºÐ°Ñ Ð¿Ð»Ð¾ÑкоÑть отÑечениÑ"
#: src/settings_translation_file.cpp
@@ -5307,11 +5624,9 @@ msgid "Number of emerge threads"
msgstr "КоличеÑтво emerge-потоков"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5409,10 +5724,6 @@ msgid "Parallax occlusion scale"
msgstr "МаÑштаб параллакÑной окклюзии"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Сила параллакÑа"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5422,8 +5733,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Путь Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñкриншотов."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5459,6 +5772,15 @@ msgid "Pause on lost window focus"
msgstr "Пауза при потере фокуÑа"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Ограничение очередей emerge Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Физика"
@@ -5539,6 +5861,18 @@ msgid "Profiling"
msgstr "Профилирование"
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -6061,6 +6395,13 @@ msgstr ""
"Файлы, которых не будет, будут Ñкачены обычным путём."
#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
@@ -6087,6 +6428,11 @@ msgid "Step mountain spread noise"
msgstr "Шаг шума раÑпроÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð³Ð¾Ñ€"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "Сила параллакÑа."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Сила Ñгенерированных карт нормалей."
@@ -6098,10 +6444,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Сила параллакÑа."
-
-#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
msgstr "Ð¡Ñ‚Ñ€Ð¾Ð³Ð°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° протокола"
@@ -6110,6 +6452,20 @@ msgid "Strip color codes"
msgstr "ПрÑтать коды цветов"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "Синхронный SQLite"
@@ -6239,6 +6595,7 @@ msgstr ""
"наÑтройке мода."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The radius of the volume of blocks around every player that is subject to "
"the\n"
@@ -6246,7 +6603,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
"Ð Ð°Ð´Ð¸ÑƒÑ Ð¾Ð±ÑŠÑ‘Ð¼Ð° блоков вокруг каждого игрока, в котором дейÑтвуют\n"
"активные блоки, определённые в блоках карты (16 нод).\n"
@@ -6446,6 +6803,11 @@ msgid "Upper Y limit of dungeons."
msgstr "Верхний лимит Y Ð´Ð»Ñ Ð¿Ð¾Ð´Ð·ÐµÐ¼ÐµÐ»Ð¸Ð¹."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Верхний лимит Y Ð´Ð»Ñ Ð¿Ð¾Ð´Ð·ÐµÐ¼ÐµÐ»Ð¸Ð¹."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Объёмные облака вмеÑто плоÑких."
@@ -6830,6 +7192,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr "Y-раÑÑтоÑние, над которым пещеры раÑширÑÑŽÑ‚ÑÑ Ð´Ð¾ полного размера."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Y-уровень Ñредней поверхноÑти рельефа."
@@ -6851,7 +7221,7 @@ msgstr "Y-уровень морÑкого дна."
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
-msgstr "Таймаут загрузки файла Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ cURL"
+msgstr "Тайм-аут загрузки файла Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ cURL"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
@@ -6927,18 +7297,6 @@ msgstr "cURL тайм-аут"
#~ msgid "Floatland mountain height"
#~ msgstr "Ð’Ñ‹Ñота гор на парÑщих оÑтровах"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "ЭкÑпонента гор на парÑщих оÑтровах"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "ПлотноÑть гор на парÑщих оÑтровах"
-
-#~ msgid "Floatland level"
-#~ msgstr "Уровень парÑщих оÑтровов"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Базовый шум парÑщих оÑтровов"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Шум базовой выÑоты парÑщих оÑтровов"
@@ -6993,3 +7351,23 @@ msgstr "cURL тайм-аут"
#~ "Регулирует гамма-кодировку таблиц оÑвещениÑ. Более выÑокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ "
#~ "Ñрче.\n"
#~ "Этот параметр предназначен только Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° и игнорируетÑÑ Ñервером."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Путь Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñкриншотов."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Сила параллакÑа"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Ограничение очередей emerge на диÑке"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr ""
+#~ "ЗагружаетÑÑ Ð¸ уÑтанавливаетÑÑ $1.\n"
+#~ "ПожалуйÑта, подождите..."
+
+#~ msgid "Back"
+#~ msgstr "Ðазад"
+
+#~ msgid "Ok"
+#~ msgstr "Oк"
diff --git a/po/sk/minetest.po b/po/sk/minetest.po
new file mode 100644
index 000000000..843c924e3
--- /dev/null
+++ b/po/sk/minetest.po
@@ -0,0 +1,6341 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-07-08 20:47+0000\n"
+"Last-Translator: rubenwardy <rw@rubenwardy.com>\n"
+"Language-Team: Slovak <https://hosted.weblate.org/projects/minetest/minetest/"
+"sk/>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 4.2-dev\n"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr "Zomrel si"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr "Oživiť"
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "OK"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "Server požadoval obnovu spojenia:"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "Znova pripojiť"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "Hlavné menu"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr "Chyba v lua skripte:"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr "Chyba:"
+
+#: builtin/mainmenu/common.lua src/client/game.cpp
+msgid "Loading..."
+msgstr "Nahrávam..."
+
+#: builtin/mainmenu/common.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+"Skús znova povoliť verejný zoznam serverov a skontroluj internetové "
+"pripojenie."
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "Server podporuje verzie protokolov: $1 - $2. "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "Server vyžaduje protokol verzie $1. "
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "Podporujeme verzie protokolov: $1 - $2."
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "Podporujeme len protokol verzie $1."
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "Nesúhlas verzií protokolov. "
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "World:"
+msgstr "Svet:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr "Popis balíka rozšírení nie je k dispozícií."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr "Popis hry nie je k dispozícií."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "Rozšírenie:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr "Bez (voliteľných) závislostí"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr "Bez povinných závislostí"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr "Voliteľné závislosti:"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr "Závislosti:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr "Bez voliteľných závislostí"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
+msgid "Save"
+msgstr "Ulož"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr "Zruš"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Nájdi viac rozšírení"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr "Deaktivuj rozšírenie"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr "Povoľ rozšírenie"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "enabled"
+msgstr "povolené"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr "Deaktivuj všetko"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "Povoľ všetko"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"characters [a-z0-9_] are allowed."
+msgstr ""
+"Nepodarilo sa aktivovať rozšírenie \"$1\" lebo obsahuje nepovolené znaky. "
+"Povolené sú len znaky [a-z0-9_]."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "ContentDB nie je k dispozícií ak bol Minetest skompilovaný bez cURL"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr "VÅ¡etky balíÄky"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "Hry"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Mods"
+msgstr "Rozšírenia"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr "BalíÄky textúr"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr "Nepodarilo sa stiahnuť $1"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr "Hľadaj"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr "Naspäť do hlavného menu"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr "Bez výsledku"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr "Nepodarilo sa stiahnuÅ¥ žiadne balíÄky"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "SÅ¥ahujem..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr "Inštaluj"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr "Aktualizuj"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr "Odinštaluj"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Zobraziť"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Jaskyne"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "Obrovské jaskyne hlboko v podzemí"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Rieky na úrovni hladiny mora"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Rieky"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "Hory"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "Lietajúce krajiny (experimentálne)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Poletujúce pevniny na oblohe"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Ochladenie s nadmorskou výškou"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Znižuje teplotu s nadmorskou výškou"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "Sucho v nadmorskej výške"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Znižuje vlhkosť s nadmorskou výškou"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Vlhkosť riek"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Zvyšuje vlhkosť v okolí riek"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Premenlivá hĺbka riek"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+"Nízka vlhkosť a vysoké teploty spôsobujú znižovanie hladín, alebo vysychanie "
+"riek"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Kopce"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Jazerá"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "DodatoÄný terén"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "Generuj nefragmentovaný terén: oceány a podzemie"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "Stromy a vysoká tráva"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "Rovný terén"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "Prúd bahna"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "Erózia terénu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "Mierne pásmo, Púšť, Džungľa, Tundra, Tajga"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Mierne pásmo, Púšť, Džungľa"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Mierne pásmo, Púšť"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no games installed."
+msgstr "Nie je nainštalovaná žiadna hra."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download one from minetest.net"
+msgstr "Stiahni jednu z minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "Jaskyne"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "Kobky"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "Dekorácie"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+"Štruktúry objavujúce sa na povrchu (nemá vplyv na stromy a vysokú trávu "
+"vytvorenú verziou v6)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "Štruktúry objavujúce sa na povrchu, typicky stromy a rastliny"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Sieť tunelov a jaskýň"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Ekosystémy"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Miešanie ekosystémov"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr "Plynulý prechod medzi ekosystémami"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Príznaky generátora máp"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Špecifické príznaky generátora máp"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr "Varovanie: Vývojarský Test je urÄený vývojárom."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a game, such as Minetest Game, from minetest.net"
+msgstr "Stiahni si hru, ako napr. Minetest Game z minetest.net"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "Meno sveta"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr "Semienko"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "Generátor mapy"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "Hra"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "Vytvor"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "Svet menom \"$1\" už existuje"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr "Nie je zvolená hra"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "Si si istý, že chceš zmazať \"$1\"?"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
+#: src/client/keycode.cpp
+msgid "Delete"
+msgstr "Zmaž"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr "pkgmgr: neúspech pri mazaní \"$1\""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr "pkgmgr: nesprávna cesta \"$1\""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "Zmazať svet \"$1\"?"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr "Prijať"
+
+#: 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 ""
+"Tento balíÄek rozšírení má vo svojom modpack.conf explicitne zadané meno, "
+"ktoré prepíše akékoľvek tunajšie premenovanie."
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr "Premenuj balíÄek rozšírení:"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Disabled"
+msgstr "Zablokované"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "Povolené"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "Prehliadaj"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr "Ofset"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr "Mierka"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr "Rozptyl X"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr "Rozptyl Y"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr "2D šum"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr "Rozptyl Z"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr "Oktávy"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistance"
+msgstr "Vytrvalosť"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr "Lakunarita"
+
+#. ~ "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 "štandardné hodnoty (defaults)"
+
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "eased"
+msgstr "zjemnené (eased)"
+
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "absvalue"
+msgstr "Absolútna hodnota (absvalue)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr "X"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr "Y"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr "Z"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr "(Nie je zadaný popis nastavenia)"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr "Prosím zadaj platné celé Äíslo."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr "Hodnota musí byť najmenej $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr "Hodnota nesmie byť vyššia ako $1."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr "Prosím vlož platné Äíslo."
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr "Zvoľ adresár"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr "Zvoľ súbor"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr "< Späť na nastavenia"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr "Upraviť"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr "Obnov štandardné hodnoty"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr "Zobraz technické názvy"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr "$1 (povolený)"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr "Nie je možné nainÅ¡talovaÅ¥ $1 ako balíÄek textúr"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr "Zlyhala inštalácia $1 na $2"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr "Nie je možné nájsÅ¥ platné rozšírenie, alebo balíÄek rozšírení"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr "Nie je možné nainÅ¡talovaÅ¥ balíÄek rozšírení $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr ""
+"InÅ¡talácia rozšírenia: Nie je možné nájsÅ¥ vhodný adresár pre balíÄek "
+"rozšírení $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr "Nie je možné nainštalovať rozšírenie $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr ""
+"InÅ¡talácia rozšírenia: Nie je možné nájsÅ¥ skutoÄné meno rozšírenia pre: $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr "Nie je možné nainštalovať hru $1"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: file: \"$1\""
+msgstr "Inštalácia: súbor: \"$1\""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install: Unsupported file type \"$1\" or broken archive"
+msgstr "Inštalácia: Nepodporovaný typ súboru \"$1\", alebo poškodený archív"
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr "$1 rozšírenia"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Installed Packages:"
+msgstr "NainÅ¡talované balíÄky:"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Browse online content"
+msgstr "Prehliadaj online obsah"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No package description available"
+msgstr "Nie je k dispozícií popis balíÄka"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Rename"
+msgstr "Premenuj"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No dependencies."
+msgstr "Bez závislostí."
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Disable Texture Pack"
+msgstr "Deaktivuj balíÄek textúr"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Use Texture Pack"
+msgstr "Použi balíÄek textúr"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Information:"
+msgstr "Informácie:"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Uninstall Package"
+msgstr "OdinÅ¡taluj balíÄek"
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Content"
+msgstr "Obsah"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Credits"
+msgstr "Uznanie"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Core Developers"
+msgstr "Hlavný vývojari"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Active Contributors"
+msgstr "Aktívny prispievatelia"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Core Developers"
+msgstr "Predchádzajúci hlavný vývojári"
+
+#: builtin/mainmenu/tab_credits.lua
+msgid "Previous Contributors"
+msgstr "Predchádzajúci prispievatelia"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "Inštaluj hru z ContentDB"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Configure"
+msgstr "Konfigurácia"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "New"
+msgstr "Nový"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select World:"
+msgstr "Zvoľ si svet:"
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative Mode"
+msgstr "Kreatívny mód"
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Enable Damage"
+msgstr "Povoľ poškodenie"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Server"
+msgstr "Hosťuj server"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Game"
+msgstr "Hosťuj hru"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Announce Server"
+msgstr "Zverejni server"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Name/Password"
+msgstr "Meno/Heslo"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Bind Address"
+msgstr "PriraÄ adresu"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Port"
+msgstr "Port"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Server Port"
+msgstr "Port servera"
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Play Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Start Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Address / Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Name / Password"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Connect"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Ping"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Creative mode"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "Damage enabled"
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
+msgid "PvP enabled"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Join Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "None"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Are you sure to reset your singleplayer world?"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Yes"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (unavailable)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Reset singleplayer world"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
+msgid "Change Keys"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "All Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold: (px)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bump Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Generate Normal Maps"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Parallax Occlusion"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Liquids"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "To enable shaders the OpenGL driver needs to be used."
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Start Singleplayer"
+msgstr ""
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Config mods"
+msgstr ""
+
+#: builtin/mainmenu/tab_simple_main.lua
+msgid "Main"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Connection timed out."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Loading textures..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Rebuilding shaders..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Main Menu"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Player name too long."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Connection error (timed out?)"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided password file failed to open: "
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Please choose a name!"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "No world selected and no address provided. Nothing to do."
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Could not find or load game \""
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Invalid gamespec."
+msgstr ""
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
+#: src/client/fontengine.cpp
+msgid "needs_fallback_font"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Shutting down..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating client..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Resolving address..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connecting to server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Item definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Node definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Media..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "KiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "MiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client side scripting is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound muted"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound unmuted"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Volume changed to %d%%"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "ok"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled (note: no 'fly' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled (note: no 'fast' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled (note: no 'noclip' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x1"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x2"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in surface mode, Zoom x4"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x1"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x2"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap in radar mode, Zoom x4"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Profiler graph shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Wireframe shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info, profiler graph, and wireframe hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info and profiler graph hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update enabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at maximum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range changed to %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at minimum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Enabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Disabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Zoom currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid ""
+"Default Controls:\n"
+"No menu visible:\n"
+"- single tap: button activate\n"
+"- double tap: place/use\n"
+"- slide finger: look around\n"
+"Menu/Inventory visible:\n"
+"- double tap (outside):\n"
+" -->close\n"
+"- touch stack, touch slot:\n"
+" --> move stack\n"
+"- touch&drag, tap 2nd finger\n"
+" --> place single item to slot\n"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid ""
+"Controls:\n"
+"- %s: move forwards\n"
+"- %s: move backwards\n"
+"- %s: move left\n"
+"- %s: move right\n"
+"- %s: jump/climb\n"
+"- %s: sneak/go down\n"
+"- %s: drop item\n"
+"- %s: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse left: dig/punch\n"
+"- Mouse right: place/use\n"
+"- Mouse wheel: select item\n"
+"- %s: chat\n"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Continue"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Change Password"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game paused"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound Volume"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to Menu"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to OS"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game info:"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Mode: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Remote server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Address: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Hosting server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Port: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "On"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Off"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Damage: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Creative Mode: "
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: src/client/game.cpp
+msgid "- PvP: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Public: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Server Name: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+#, c-format
+msgid "Profiler shown (page %d of %d)"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Profiler hidden"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 2"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Backspace"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Return"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Control"
+msgstr ""
+
+#. ~ Key name, common on Windows keyboards
+#: src/client/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Pause"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Caps Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "End"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Left"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Up"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Right"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Down"
+msgstr ""
+
+#. ~ Key name
+#: src/client/keycode.cpp
+msgid "Select"
+msgstr ""
+
+#. ~ "Print screen" key
+#: src/client/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 0"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 2"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 3"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 4"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 5"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 6"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 7"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 8"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 9"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad *"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad +"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad ."
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad -"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad /"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Num Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Escape"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Convert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Nonconvert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Accept"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Mode Change"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Apps"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Erase EOF"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Play"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Zoom"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "OEM Clear"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+#, c-format
+msgid ""
+"You are about to join this server with the name \"%s\" for the first time.\n"
+"If you proceed, a new account using your credentials will be created on this "
+"server.\n"
+"Please retype your password and click 'Register and Join' to confirm account "
+"creation, or click 'Cancel' to abort."
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+msgid "Register and Join"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ""
+
+#: src/gui/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "\"Special\" = climb down"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Automatic jumping"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Special"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Prev. item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Next item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Change camera"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle minimap"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle pitchmove"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Mute"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Autoforward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Local command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle HUD"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle chat log"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fog"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "New Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Change"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Sound Volume: "
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Exit"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Muted"
+msgstr ""
+
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
+#: src/gui/modalMenu.cpp
+msgid "Enter "
+msgstr ""
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
+#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
+msgid "LANG_CODE"
+msgstr "sk"
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, you can place blocks at the position (feet + eye level) where "
+"you stand.\n"
+"This is helpful when working with nodeboxes in small areas."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Flying"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, makes move directions relative to the player's pitch when flying "
+"or swimming."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast movement"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Fast movement (via the \"special\" key).\n"
+"This requires the \"fast\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled together with fly mode, player is able to fly through solid "
+"nodes.\n"
+"This requires the \"noclip\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when looking around. Also called look or mouse smoothing.\n"
+"Useful for recording videos."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera smoothing in cinematic mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert mouse"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Invert vertical mouse movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mouse sensitivity multiplier."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Special key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
+"down and\n"
+"descending."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double tap jump for fly"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Double-tapping the jump key toggles fly mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Always fly and fast"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
+"are\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rightclick repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated right clicks when holding the "
+"right\n"
+"mouse button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically jump up single-node obstacles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Safe digging and placing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prevent digging and placing from repeating when holding the mouse buttons.\n"
+"Enable this when you dig or place too often by accident."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Random input"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable random user input (only used for testing)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Continuous forward movement, toggled by autoforward key.\n"
+"Press the autoforward key again or the backwards movement to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Touch screen threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The length in pixels it takes for touch screen interaction to start."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed virtual joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Fixes the position of virtual joystick.\n"
+"If disabled, virtual joystick will center to first-touch's position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Virtual joystick triggers aux button"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Use virtual joystick to trigger \"aux\" button.\n"
+"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"circle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick ID"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The identifier of the joystick to use"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The type of joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick button repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated events\n"
+"when holding down a joystick button combination."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick frustum sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The sensitivity of the joystick axes for moving the\n"
+"ingame view frustum around."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player forward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player backward.\n"
+"Will also disable autoforward, when active.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Left key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player left.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving the player right.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jump key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for jumping.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneak key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for sneaking.\n"
+"Also used for climbing down and descending in water if aux1_descends is "
+"disabled.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the inventory.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Special key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for moving fast in fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Command key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for opening the chat window to type local commands.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Range select key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling unlimited view range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fly key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling flying.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling fast mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noclip key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling noclip mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar next key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the next item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar previous key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the previous item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for muting the game.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inc. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling autoforward.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cinematic mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling cinematic mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling display of minimap.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for taking screenshots.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Drop item key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for dropping the currently selected item.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View zoom key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key to use view zoom when possible.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 2 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the second hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 3 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the third hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 4 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fourth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 5 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 6 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the sixth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 7 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the seventh hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 8 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the eighth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 9 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 10 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 11 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 14 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 15 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 16 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 17 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 18 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 19 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 19th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 20 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 20th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 21 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 23 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 23rd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 24 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 24th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 25 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 25th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 26 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 26th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 27 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 27th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 28 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 28th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 29 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 29th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 30 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 30th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 31 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 31st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 32 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 32nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the HUD.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of chat.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large chat console key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the large chat console.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of fog.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Camera update toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camera update. Only used for development\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug info toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of debug info.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the display of the profiler. Used for development.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Toggle camera mode key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for switching between first- and third-person camera.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range increase key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View range decrease key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the viewing range.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-Game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable vertex buffer objects.\n"
+"This should greatly improve graphics performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to fog out the end of the visible area."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Leaves style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Leaves style:\n"
+"- Fancy: all faces visible\n"
+"- Simple: only outer faces, if defined special_tiles are used\n"
+"- Opaque: disable transparency"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect glass"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connects glass if supported by node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable smooth lighting with simple ambient occlusion.\n"
+"Disable for speed or for different looks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds are a client side effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use 3D cloud look instead of flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Node highlighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Digging particles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Adds particles when digging a node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Use mip mapping to scale textures. May slightly increase performance,\n"
+"especially when using a high resolution texture pack.\n"
+"Gamma correct downscaling is not supported."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Anisotropic filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use anisotropic filtering when viewing at textures from an angle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use bilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clean transparent textures"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
+"light edge to transparent textures. Apply this filter to clean that up\n"
+"at texture load time."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n"
+"can be blurred, so automatically upscale them with nearest-neighbor\n"
+"interpolation to preserve crisp pixels. This sets the minimum texture size\n"
+"for the upscaled textures; higher values look sharper, but require more\n"
+"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n"
+"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n"
+"enabled.\n"
+"This is also used as the base node texture size for world-aligned\n"
+"texture autoscaling."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Experimental option, might cause visible spaces between blocks\n"
+"when set to higher number than 0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Undersampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Undersampling is similar to using a lower screen resolution, but it applies\n"
+"to the game world only, keeping the GUI intact.\n"
+"It should give a significant performance boost at the cost of less detailed "
+"image.\n"
+"Higher values result in a less detailed image."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visual effects and may increase performance on some "
+"video\n"
+"cards.\n"
+"This only works with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shader path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to shader directory. If no path is defined, default location will be "
+"used."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
+"Simulates the tone curve of photographic film and how this approximates the\n"
+"appearance of high dynamic range images. Mid-range contrast is slightly\n"
+"enhanced, highlights and shadows are gradually compressed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bumpmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables bumpmapping for textures. Normalmaps need to be supplied by the "
+"texture pack\n"
+"or need to be auto-generated.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Generate normalmaps"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables on the fly normalmap generation (Emboss effect).\n"
+"Requires bumpmapping to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of generated normalmaps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Normalmaps sampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Defines sampling step of texture.\n"
+"A higher value results in smoother normal maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables parallax occlusion mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"0 = parallax occlusion with slope information (faster).\n"
+"1 = relief mapping (slower, more accurate)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of parallax occlusion iterations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion scale"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall scale of parallax occlusion effect."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Parallax occlusion bias"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Overall bias of parallax occlusion effect, usually scale/2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving Nodes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The maximum height of the surface of waving liquids.\n"
+"4.0 = Wave height is two nodes.\n"
+"0.0 = Wave doesn't move at all.\n"
+"Default is 1.0 (1/2 node).\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wavelength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How fast liquid waves will move. Higher = faster.\n"
+"If negative, liquid waves will move backwards.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving leaves"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If FPS would go higher than this, limit it by sleeping\n"
+"to not waste CPU power for no benefit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS in pause menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum FPS when game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pause on lost window focus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Open the pause menu when the window's focus is lost. Does not pause if a "
+"formspec is\n"
+"open."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View distance in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Near plane"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n"
+"Only works on GLES platforms. Most users will not need to change this.\n"
+"Increasing can reduce artifacting on weaker GPUs.\n"
+"0.1 = Default, 0.25 = Good value for weaker tablets."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screen height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height component of the initial window size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autosave screen size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save window size automatically when modified."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Full screen BPP"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bits per pixel (aka color depth) in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VSync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical screen synchronization."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Field of view in degrees."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Alters the light curve by applying 'gamma correction' to it.\n"
+"Higher values make middle and lower light levels brighter.\n"
+"Value '1.0' leaves the light curve unaltered.\n"
+"This only has significant effect on daylight and artificial\n"
+"light, it has very little effect on natural night light."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve low gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve high gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at maximum light level.\n"
+"Controls the contrast of the highest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Strength of light curve boost.\n"
+"The 3 'boost' parameters define a range of the light\n"
+"curve that is boosted in brightness."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost center"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Center of light curve boost range.\n"
+"Where 0.0 is minimum light level, 1.0 is maximum light level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost spread"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread of light curve boost range.\n"
+"Controls the width of the range to be boosted.\n"
+"Standard deviation of the light curve boost Gaussian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Path to texture directory. All textures are first searched from here."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Video driver"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The rendering back-end for Irrlicht.\n"
+"A restart is required after changing this.\n"
+"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
+"otherwise.\n"
+"On other platforms, OpenGL is recommended, and it’s the only driver with\n"
+"shader support currently."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cloud radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Radius of cloud area stated in number of 64 node cloud squares.\n"
+"Values larger than 26 will start to produce sharp cutoffs at cloud area "
+"corners."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable view bobbing and amount of view bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Multiplier for fall bobbing.\n"
+"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D support.\n"
+"Currently supported:\n"
+"- none: no 3d output.\n"
+"- anaglyph: cyan/magenta color 3d.\n"
+"- interlaced: odd/even line based polarisation screen support.\n"
+"- topbottom: split screen top/bottom.\n"
+"- sidebyside: split screen side by side.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer based 3d.\n"
+"Note that the interlaced mode requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Console alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box border color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Selection box width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selection box lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha (opaqueness, between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Recent Chat Messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of recent chat messages to show"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether node texture animations should be desynchronized per mapblock."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum hotbar width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum proportion of current window to be used for hotbar.\n"
+"Useful if there's something to be displayed right or left of hotbar."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scale factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the hudbar elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mesh cache"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables caching of facedir rotated meshes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generation delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Delay between mesh updates on the client in ms. Increasing this will slow\n"
+"down the rate of mesh updates, thus reducing jitter on slower clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of the MapBlock cache of the mesh generator. Increasing this will\n"
+"increase the cache hit %, reducing the data being copied from the main\n"
+"thread, thus reducing jitter."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables minimap."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shape of the minimap. Enabled = round, disabled = square."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimap scan height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Usable to make minimap smoother on slower machines."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Colored fog"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ambient occlusion gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The strength (darkness) of node ambient-occlusion shading.\n"
+"Lower is darker, Higher is lighter. The valid range of values for this\n"
+"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n"
+"set to the nearest valid value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inventory items animations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog start"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fraction of the visible distance at which fog starts to be rendered"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Opaque liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes all liquids opaque"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World-aligned textures mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Textures on a node may be aligned either to the node or to the world.\n"
+"The former mode suits better things like machines, furniture, etc., while\n"
+"the latter makes stairs and microblocks fit surroundings better.\n"
+"However, as this possibility is new, thus may not be used by older servers,\n"
+"this option allows enforcing it for certain node types. Note though that\n"
+"that is considered EXPERIMENTAL and may not work properly."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autoscaling mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World-aligned textures may be scaled to span several nodes. However,\n"
+"the server may not send the scale you want, especially if you use\n"
+"a specially-designed texture pack; with this option, the client tries\n"
+"to determine the scale automatically basing on the texture size.\n"
+"See also texture_min_size.\n"
+"Warning: This option is EXPERIMENTAL!"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Menus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Clouds in menu"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use a cloud animation for the main menu background."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Scale GUI by a user specified value.\n"
+"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n"
+"This will smooth over some of the rough edges, and blend\n"
+"pixels when scaling down, at the cost of blurring some\n"
+"edge pixels when images are scaled by non-integer sizes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter is true, all GUI images need to be\n"
+"filtered in software, but some images are generated directly\n"
+"to hardware (e.g. render-to-texture for nodes in inventory)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "GUI scaling filter txr2img"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"When gui_scaling_filter_txr2img is true, copy those images\n"
+"from hardware to software for scaling. When false, fall back\n"
+"to the old scaling method, for video drivers that don't\n"
+"properly support downloading textures back from hardware."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tooltip delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay showing tooltips, stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name to tooltip."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FreeType fonts"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether FreeType fonts are used, requires FreeType support to be compiled "
+"in.\n"
+"If disabled, bitmap and XML vectors fonts are used instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font bold by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font italic by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the default font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Regular font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the default font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"The fallback font will be used if the font cannot be loaded."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the monospace font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the monospace font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font is used for e.g. the console and profiler screen."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the fallback font in point (pt)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
+"be drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font shadow alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path of the fallback font.\n"
+"If “freetype†setting is enabled: Must be a TrueType font.\n"
+"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"This font will be used for certain languages or if the default font is "
+"unavailable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Screenshot quality. Only used for JPEG format.\n"
+"1 means worst quality; 100 means best quality.\n"
+"Use 0 for default quality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
+"screens."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Windows systems only: Start Minetest with the command line window in the "
+"background.\n"
+"Contains the same information as the file debug.txt (default name)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables the sound system.\n"
+"If disabled, this completely disables all sounds everywhere and the in-game\n"
+"sound controls will be non-functional.\n"
+"Changing this setting requires a restart."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute sound"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to mute sounds. You can unmute sounds at any time, unless the\n"
+"sound system is disabled (enable_sound=false).\n"
+"In-game, you can toggle the mute state with the mute key or by using the\n"
+"pause menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Network"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Address to connect to.\n"
+"Leave this blank to start a local server.\n"
+"Note that the address field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Port to connect to (UDP).\n"
+"Note that the port field in the main menu overrides this setting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Saving map received from server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Connect to external media server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable usage of remote media server (if provided by server).\n"
+"Remote servers offer a significantly faster way to download media (e.g. "
+"textures)\n"
+"when connecting to the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "URL to the server list displayed in the Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Serverlist file"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"File in client/serverlist/ that contains your favorite servers displayed in "
+"the\n"
+"Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum size of the out chat queue"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum size of the out chat queue.\n"
+"0 to disable queueing and -1 to make the queue size unlimited."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable register confirmation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable register confirmation when connecting to server.\n"
+"If disabled, new account will be registered automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Timeout for client to remove unused map data from memory."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of mapblocks for client to be kept in memory.\n"
+"Set to -1 for unlimited amount."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show debug info"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to show the client debug info (has the same effect as hitting F5)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server / Singleplayer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the server, to be displayed when players join and in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server description"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Description of server, to be displayed when players join and in the "
+"serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Domain name of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Announce to this serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strip color codes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Remove color codes from incoming chat messages\n"
+"Use this to stop players from being able to use color in their messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server port"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Network port to listen (UDP).\n"
+"This value will be overridden when starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bind address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The network interface that the server listens on."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable to disallow old clients from connecting.\n"
+"Older clients are compatible in the sense that they will not crash when "
+"connecting\n"
+"to new servers, but they may not support all new features that you are "
+"expecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Remote media"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies URL from which client fetches media instead of using UDP.\n"
+"$filename should be accessible from $remote_media$filename via cURL\n"
+"(obviously, remote_media should end with a slash).\n"
+"Files that are not present will be fetched the usual way."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable/disable running an IPv6 server.\n"
+"Ignored if bind_address is set.\n"
+"Needs enable_ipv6 to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum simultaneous block sends per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks that are simultaneously sent per client.\n"
+"The maximum total count is calculated dynamically:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay in sending blocks after building"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"To reduce lag, block transfers are slowed down when a player is building "
+"something.\n"
+"This determines how long they are slowed down after placing or removing a "
+"node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. packets per iteration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of packets sent per send step, if you have a slow connection\n"
+"try reducing it, but don't reduce it to a number below double of targeted\n"
+"client number."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default game"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default game when creating a new world.\n"
+"This will be overridden when creating a world from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Message of the day displayed to players connecting."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of players that can be connected simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World directory (everything in the world is stored here).\n"
+"Not needed if starting from the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Time in seconds for item entity (dropped items) to live.\n"
+"Setting it to -1 disables the feature."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Damage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable players getting damage and dying."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Creative"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for new created maps."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"A chosen map seed for a new map, leave empty for random.\n"
+"Will be overridden when creating a new world in the main menu."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default password"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "New users need to input this password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The privileges that new users automatically get.\n"
+"See /privs in game for a full list on your server and mod configuration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unlimited player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether players are shown to clients without any range limit.\n"
+"Deprecated, use the setting player_transfer_distance instead."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player transfer distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player versus player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Whether to allow players to damage and kill each other."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod channels"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod channels support."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If this is set, players will always (re)spawn at the given position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disallow empty passwords"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, new players cannot join with an empty password."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Disable anticheat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "If enabled, disable cheat prevention in multiplayer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, actions are recorded for rollback.\n"
+"This option is only read when server starts."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server shuts down."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "A message to be displayed to all clients when the server crashes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether to ask clients to reconnect after a (Lua) crash.\n"
+"Set this to true if your server is set up to restart automatically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active object send range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far clients know about objects, stated in mapblocks (16 nodes).\n"
+"\n"
+"Setting this larger than active_block_range will also cause the server\n"
+"to maintain active objects up to this distance in the direction the\n"
+"player is looking. (This can avoid mobs suddenly disappearing from view)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The radius of the volume of blocks around every player that is subject to "
+"the\n"
+"active block stuff, stated in mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run.\n"
+"This is also the minimum range in which active objects (mobs) are "
+"maintained.\n"
+"This should be configured together with active_object_send_range_blocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block send distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum forceloaded blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of forceloaded mapblocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time send interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of sending time of day to clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World start time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Time of day when a new world is started, in millihours (0-23999)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map save interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Interval of saving important changes in the world, stated in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message max length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Set the maximum character length of a chat message sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message count limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amount of messages a player may send per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message kick threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode acceleration"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking and flying speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fast mode speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical climbing speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Jumping speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Initial vertical speed when jumping, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Decrease this to increase liquid resistance to movement."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid fluidity smoothing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid sinking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls sinking speed in liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration of gravity, in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Deprecated Lua API handling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated Lua API calls:\n"
+"- legacy: (try to) mimic old behaviour (default for release).\n"
+"- log: mimic and log backtrace of deprecated call (default for debug).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max. clearobjects extra blocks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of extra blocks that can be loaded by /clearobjects at once.\n"
+"This is a trade-off between sqlite transaction overhead and\n"
+"memory consumption (4096=100MB, as a rule of thumb)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Unload unused server data"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How much the server will wait before unloading unused mapblocks.\n"
+"Higher value is smoother, but will use more RAM."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum objects per block"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dedicated server step"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of a server tick and the interval at which objects are generally "
+"updated over\n"
+"network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block management interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ABM interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ignore world errors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, invalid world data won't cause the server to shut down.\n"
+"Only enable this if you know what you are doing."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid loop max"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max liquids processed per step."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid queue purge time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time (in seconds) that the liquids queue may grow beyond processing\n"
+"capacity until an attempt is made to decrease its size by dumping old queue\n"
+"items. A value of 0 disables the functionality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update tick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Liquid update interval in seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Block send optimize distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"At this distance the server will aggressively optimize which blocks are sent "
+"to\n"
+"clients.\n"
+"Small values potentially improve performance a lot, at the expense of "
+"visible\n"
+"rendering glitches (some blocks will not be rendered under water and in "
+"caves,\n"
+"as well as sometimes on land).\n"
+"Setting this to a value greater than max_block_send_distance disables this\n"
+"optimization.\n"
+"Stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Server side occlusion culling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled the server will perform map block occlusion culling based on\n"
+"on the eye position of the player. This can reduce the number of blocks\n"
+"sent to the client 50-80%. The client will not longer receive most "
+"invisible\n"
+"so that the utility of noclip mode is reduced."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Restricts the access of certain client-side functions on servers.\n"
+"Combine the byteflags below to restrict client-side features, or set to 0\n"
+"for no restrictions:\n"
+"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n"
+"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n"
+"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n"
+"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n"
+"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side node lookup range restriction"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the CSM restriction for node range is enabled, get_node calls are "
+"limited\n"
+"to this distance from the player to the node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trusted mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of trusted mods that are allowed to access insecure\n"
+"functions even when mod security is on (via request_insecure_environment())."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Load the game profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Load the game profiler to collect game profiling data.\n"
+"Provides a /profiler command to access the compiled profile.\n"
+"Useful for mod developers and server operators."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default report format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Report path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The file path relative to your worldpath in which profiles will be saved to."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrumentation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Active Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Loading Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chatcommands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument chatcommands on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Global callbacks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Builtin"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Have the profiler instrument itself:\n"
+"* Instrument an empty function.\n"
+"This estimates the overhead, that instrumentation is adding (+1 function "
+"call).\n"
+"* Instrument the sampler being used to update the statistics."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Player name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of the player.\n"
+"When running a server, clients connecting with this name are admins.\n"
+"When starting from the main menu, this is overridden."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the language. Leave empty to use the system language.\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Level of logging to be written to debug.txt:\n"
+"- <nothing> (no logging)\n"
+"- none (messages with no level)\n"
+"- error\n"
+"- warning\n"
+"- action\n"
+"- info\n"
+"- verbose"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log file size threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the file size of debug.txt exceeds the number of megabytes specified in\n"
+"this setting when it is opened, the file is moved to debug.txt.1,\n"
+"deleting an older debug.txt.1 if it exists.\n"
+"debug.txt is only moved if this setting is positive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable IPv6 support (for both client and server).\n"
+"Required for IPv6 connections to work at all."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Default timeout for cURL, stated in milliseconds.\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limits number of parallel HTTP requests. Affects:\n"
+"- Media fetch if server uses remote_media setting.\n"
+"- Serverlist download and server announcement.\n"
+"- Downloads performed by main menu (e.g. mod manager).\n"
+"Only has an effect if compiled with cURL."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "High-precision FPU"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu style"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+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 ""
+
+#: src/settings_translation_file.cpp
+msgid "Main menu script"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Print the engine's profiling data in regular intervals (in seconds).\n"
+"0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Name of map generator to be used when creating a new world.\n"
+"Creating a world in the main menu will override this.\n"
+"Current mapgens in a highly unstable state:\n"
+"- The optional floatlands of v7 (disabled by default)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Water surface level of the world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Max block generate distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"From how far blocks are generated for clients, stated in mapblocks (16 "
+"nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
+"Only mapchunks completely within the mapgen limit are generated.\n"
+"Value is stored per-world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and junglegrass, in all other mapgens this flag controls all decorations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome API temperature and humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Temperature variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale temperature variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale humidity variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen v5."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls width of tunnels, a smaller value creates wider tunnels.\n"
+"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
+"intensive noise calculations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave proportion flooded"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of cavern upper limit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern taper"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-distance over which caverns expand to full size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines full size of caverns, smaller values create larger caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of biome filler depth."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Factor noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise that determines number of dungeons per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"The 'snowbiomes' flag enables the new 5 biome system.\n"
+"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
+"the 'jungles' flag is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desert noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Deserts occur when np_biome exceeds this value.\n"
+"When the 'snowbiomes' flag is enabled, this is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sandy beaches occur when np_beach exceeds this value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain base noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of lower terrain and seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain higher noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of higher terrain that creates cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Steepness noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height select noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mud noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies depth of biome surface nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas with sandy beaches."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of number of caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines tree areas and tree density."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Apple trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas where trees have apples."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain zero level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain alternative noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain persistence noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of maximum mountain height (in nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge underwater noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines large-scale river channel structure."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen Carpathian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the base ground level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the depth of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River valley width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river valley."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness3 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Third of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness4 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hills spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hill size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridged mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of ridged mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of step mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that locates the river valleys and channels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain variation noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Flat.\n"
+"Occasional lakes and hills can be added to the flat world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for lakes.\n"
+"Controls proportion of world area covered by lakes.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for hills.\n"
+"Controls proportion of world area covered by hills.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines location and terrain of optional hills and lakes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Fractal.\n"
+"'terrain' enables the generation of non-fractal terrain:\n"
+"ocean, islands and underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fractal type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Selects one of 18 fractal types.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Increasing this increases the amount of fine detail, but also\n"
+"increases processing load.\n"
+"At iterations = 20 this mapgen has a similar load to mapgen V7."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) scale of fractal in nodes.\n"
+"Actual fractal size will be 2 to 3 times larger.\n"
+"These numbers can be made very large, the fractal does\n"
+"not have to fit inside the world.\n"
+"Increase these to 'zoom' into the detail of the fractal.\n"
+"Default is for a vertically-squashed shape suitable for\n"
+"an island, set all 3 numbers equal for the raw shape."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Can be used to move a desired point to (0, 0) to create a\n"
+"suitable spawn point, or to allow 'zooming in' on a desired\n"
+"point by increasing 'scale'.\n"
+"The default is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W coordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"X component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Y component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia z"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Z component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"W component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Seabed noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill': Reduces heat with altitude.\n"
+"'humid_rivers': Increases humidity around rivers.\n"
+"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n"
+"to become shallower and occasionally dry.\n"
+"'altitude_dry': Reduces humidity with altitude."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
+"enabled. Also the vertical distance over which humidity drops by 10 if\n"
+"'altitude_dry' is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern upper limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How wide to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other biome filler node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Raises terrain to make valleys around the rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley profile"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley slope"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chunk size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n"
+"WARNING!: There is no benefit, and there are several dangers, in\n"
+"increasing this value above 5.\n"
+"Reducing this value increases cave and dungeon density.\n"
+"Altering this value is for special usage, leaving it unchanged is\n"
+"recommended."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dump the mapgen debug information."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of queued blocks to emerge"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of blocks that can be queued for loading."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be generated.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use.\n"
+"Value 0:\n"
+"- Automatic selection. The number of emerge threads will be\n"
+"- 'number of processors - 2', with a lower limit of 1.\n"
+"Any other value:\n"
+"- Specifies the number of emerge threads, with a lower limit of 1.\n"
+"WARNING: Increasing the number of emerge threads increases engine mapgen\n"
+"speed, but this may harm game performance by interfering with other\n"
+"processes, especially in singleplayer and/or when running Lua code in\n"
+"'on_generated'. For many users the optimum setting may be '1'."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Online Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The URL for the content repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Flag Blacklist"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of flags to hide in the content repository.\n"
+"\"nonfree\" can be used to hide packages which do not qualify as 'free "
+"software',\n"
+"as defined by the Free Software Foundation.\n"
+"You can also specify content ratings.\n"
+"These flags are independent from Minetest versions,\n"
+"so see a full list at https://content.minetest.net/help/content_flags/"
+msgstr ""
diff --git a/po/sl/minetest.po b/po/sl/minetest.po
index d7597da82..16d224c40 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: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: 2019-11-29 23:04+0000\n"
"Last-Translator: Matej Mlinar <mlinar.matej@gmail.com>\n"
"Language-Team: Slovenian <https://hosted.weblate.org/projects/minetest/"
@@ -23,6 +23,10 @@ msgstr "Ponovno oživi"
msgid "You died"
msgstr "Umrl si"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Prišlo je do napake v Lua skripti:"
@@ -36,10 +40,6 @@ msgid "Main menu"
msgstr "Glavni meni"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "V redu"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Ponovna povezava"
@@ -116,6 +116,10 @@ msgstr ""
"znakov. Dovoljeni so le [a-z0-9_] znaki."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Prilagoditev:"
@@ -164,16 +168,17 @@ msgid "All packages"
msgstr "Vsi paketi"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Nazaj"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Nazaj na glavni meni"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "PrenaÅ¡anje in nameÅ¡Äanje $1, prosimo poÄakajte..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "Poteka nalaganje ..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -218,15 +223,54 @@ msgstr "Odstrani"
msgid "Update"
msgstr "Posodobi"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Svet z imenom »$1« že obstaja"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Å um votline"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Oktave"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Ustvari"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Informacije:"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Prenesi igro, kot na primer Minetest Game, s spletiÅ¡Äa minetest.net"
@@ -234,25 +278,147 @@ msgstr "Prenesi igro, kot na primer Minetest Game, s spletiÅ¡Äa minetest.net"
msgid "Download one from minetest.net"
msgstr "Na voljo so na spletiÅ¡Äu minetest.net/customize"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Å um jeÄe"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Igra"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Oblika sveta (mapgen)"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Oblika sveta (mapgen) Fractal"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Niste izbrali igre"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Seme"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Globina polnila"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Opozorilo: okrnjena razvojna razliÄica je namenjena razvijalcem."
#: builtin/mainmenu/dlg_create_world.lua
@@ -406,14 +572,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z širjenje"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "Absolutna vrednost"
+#. ~ "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 "Privzeta/standardna vrednost (defaults)"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -557,6 +734,10 @@ msgid "Host Server"
msgstr "Gostiteljski strežnik"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Ime / Geslo"
@@ -624,6 +805,7 @@ msgstr "Ime / Geslo"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Igra PvP je omogoÄena"
@@ -870,6 +1052,14 @@ msgstr "Ni bilo mogoÄe odpreti datoteke z geslom: "
msgid "Provided world path doesn't exist: "
msgstr "Podana pot do sveta ne obstaja: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -906,6 +1096,7 @@ msgstr "– Vrata: "
msgid "- Public: "
msgstr "– Javno: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "– Igra PvP: "
@@ -1207,6 +1398,14 @@ msgid "Sound muted"
msgstr "Zvok je utišan"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Zvok ni utišan"
@@ -1238,7 +1437,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr "Približanje (zoom) je trenutno onemogoÄen zaradi igre ali prilagoditve"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "v redu"
@@ -1359,6 +1558,7 @@ msgstr "Leva tipka Shift"
msgid "Left Windows"
msgstr "Leva tipka Win"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Meni"
@@ -1451,6 +1651,7 @@ msgstr "Premor"
msgid "Play"
msgstr "Igraj"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Natisni"
@@ -1487,6 +1688,7 @@ msgstr "Desna tipka Win"
msgid "Scroll Lock"
msgstr "Tipka zaklepa drsnika"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Izberi"
@@ -1727,10 +1929,15 @@ msgstr "Utišano"
msgid "Sound Volume: "
msgstr "Glasnost zvoka: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Vpis "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "sl"
@@ -1814,6 +2021,10 @@ msgid "3D mode"
msgstr "3D naÄin"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1824,6 +2035,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1875,7 +2094,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1920,6 +2139,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Naprednejše"
@@ -1933,10 +2162,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
#, fuzzy
msgid "Always fly and fast"
msgstr "Vedno leti in bodi hiter (fly and fast mode)"
@@ -2112,8 +2337,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2195,10 +2420,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Velikost pisave"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Tipka za pogovor"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Tipka za preklop na klepet"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "Omejitev Å¡tevila sporoÄil pogovora"
@@ -2469,6 +2704,11 @@ msgid "Default report format"
msgstr "Privzeta oblika poroÄanja"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Privzeta igra"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2782,6 +3022,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2897,6 +3147,34 @@ msgid "Fixed virtual joystick"
msgstr "Fiksen virtualni joystick"
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Tipka za letenje"
@@ -2952,6 +3230,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4269,14 +4553,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4340,6 +4616,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4406,7 +4686,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4495,10 +4777,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4566,13 +4844,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4657,6 +4935,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4763,7 +5045,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4815,9 +5097,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4895,10 +5174,6 @@ msgid "Parallax occlusion scale"
msgstr "Lestvica okluzije paralakse"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4908,7 +5183,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4942,6 +5219,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -5012,6 +5297,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5457,6 +5754,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5479,6 +5783,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5490,15 +5798,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5615,7 +5933,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5768,6 +6086,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6091,6 +6413,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6137,3 +6467,12 @@ msgstr ""
#~ msgid "Darkness sharpness"
#~ msgstr "Ostrina teme"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "PrenaÅ¡anje in nameÅ¡Äanje $1, prosimo poÄakajte..."
+
+#~ msgid "Back"
+#~ msgstr "Nazaj"
+
+#~ msgid "Ok"
+#~ msgstr "V redu"
diff --git a/po/sr_Cyrl/minetest.po b/po/sr_Cyrl/minetest.po
index fa65323dc..67ee37bd0 100644
--- a/po/sr_Cyrl/minetest.po
+++ b/po/sr_Cyrl/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Serbian (cyrillic) (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\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/"
"minetest/minetest/sr_Cyrl/>\n"
"Language: sr_Cyrl\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 3.9-dev\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -24,6 +24,10 @@ msgstr "Врати Ñе у живот"
msgid "You died"
msgstr "Умро/ла Ñи."
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -39,10 +43,6 @@ msgid "Main menu"
msgstr "Главни мени"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Уреду"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Поновно повезивање"
@@ -123,6 +123,10 @@ msgstr ""
"Ñимболи [a-z0-9_] Ñу дозвољени."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Мод:"
@@ -173,18 +177,18 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Ðазад"
-
-#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
msgid "Back to Main Menu"
msgstr "Главни мени"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
-msgid "Downloading and installing $1, please wait..."
-msgstr "Преузима Ñе $1, молим Ð²Ð°Ñ Ñачекајте..."
+msgid "Downloading..."
+msgstr "Учитавање..."
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
@@ -232,16 +236,57 @@ msgstr "ИнÑталирај"
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Свет \"$1\" већ поÑтоји"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Семе биома"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Семе биома"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Семе пећина"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Семе пећина"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Ðаправи"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
+msgid "Decorations"
+msgstr "Информације о моду:"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Преузми подигру, као што је minetest_game, Ñа minetest.net"
@@ -249,26 +294,148 @@ msgstr "Преузми подигру, као што је minetest_game, Ñа mi
msgid "Download one from minetest.net"
msgstr "Преузми један Ñа minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Семе пећина"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Игра"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Генератор мапе"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Генератор мапе"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "No game selected"
msgstr "Одабир домета"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Семе пећина"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Семе"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Упозорење: Минимални развојни теÑÑ‚ је намењен развијачима."
#: builtin/mainmenu/dlg_create_world.lua
@@ -425,15 +592,26 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
msgid "defaults"
msgstr "Уобичајена игра"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -599,6 +777,10 @@ msgid "Host Server"
msgstr "Ðаправи Ñервер"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Име/Шифра"
@@ -669,6 +851,7 @@ msgstr "Име / Шифра"
msgid "Ping"
msgstr "Одзив"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Туча омогућена"
@@ -918,9 +1101,17 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "Дата локација Ñвета не поÑтоји: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr ""
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -954,6 +1145,7 @@ msgstr "- Порт: "
msgid "- Public: "
msgstr "- Јавни: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- Играч против играча: "
@@ -1265,6 +1457,14 @@ msgid "Sound muted"
msgstr "Јачина звука"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Sound unmuted"
msgstr "Јачина звука"
@@ -1297,7 +1497,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "уреду"
@@ -1420,6 +1620,7 @@ msgstr "Леви Shift"
msgid "Left Windows"
msgstr "Леви Windows"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Мени"
@@ -1513,6 +1714,7 @@ msgstr "ЗауÑтави"
msgid "Play"
msgstr "Играј"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Прикажи"
@@ -1549,6 +1751,7 @@ msgstr "ДеÑни Windows"
msgid "Scroll Lock"
msgstr "Закључавање Ñкроловања"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Одабери"
@@ -1795,10 +1998,15 @@ msgstr "Изкључи звук"
msgid "Sound Volume: "
msgstr "Јачина звука: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Уреду "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "sr_Cyrl"
@@ -1891,6 +2099,10 @@ msgid "3D mode"
msgstr "Тродимензионални мод"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1901,6 +2113,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1960,7 +2180,8 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "ÐбÑолутни лимит emerge токова."
#: src/settings_translation_file.cpp
@@ -2011,6 +2232,16 @@ msgstr ""
"нпр. за 4k екране."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Ðапредно"
@@ -2024,10 +2255,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr "Увек летење и брзина"
@@ -2212,8 +2439,8 @@ msgstr "Рељефна тектура"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2292,10 +2519,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Величина комада"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Кључ за чет"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Ðиво запиÑивања у debug"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2579,6 +2816,11 @@ msgid "Default report format"
msgstr "Уобичајен формат рапорта"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Уобичајена игра"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2889,6 +3131,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -3001,6 +3253,35 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Семе пећина"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -3054,6 +3335,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4353,14 +4640,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4424,6 +4703,11 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "ÐбÑолутни лимит emerge токова."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4491,7 +4775,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4585,10 +4871,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4656,13 +4938,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4747,6 +5029,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4853,7 +5139,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4905,9 +5191,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4985,10 +5268,6 @@ msgid "Parallax occlusion scale"
msgstr "Parallax Occlusion Мапирање"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4998,7 +5277,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5032,6 +5313,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -5103,6 +5392,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5566,6 +5867,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5588,6 +5896,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5599,15 +5911,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5724,7 +6046,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5878,6 +6200,11 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "ÐбÑолутни лимит emerge токова."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6203,6 +6530,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6259,3 +6594,13 @@ msgstr ""
#~ msgstr ""
#~ "ПодеÑи оÑветљење унутар игре. Веће вредноÑти Ñу Ñветлије.\n"
#~ "Ово подешавање је Ñамо за клијента, Ñервер га игнорише."
+
+#, fuzzy
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Преузима Ñе $1, молим Ð²Ð°Ñ Ñачекајте..."
+
+#~ msgid "Back"
+#~ msgstr "Ðазад"
+
+#~ msgid "Ok"
+#~ msgstr "Уреду"
diff --git a/po/sv/minetest.po b/po/sv/minetest.po
index daa065a7b..296e0b5bb 100644
--- a/po/sv/minetest.po
+++ b/po/sv/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Swedish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-10-29 11:53+0000\n"
-"Last-Translator: Mattias Münster <mattiasmun@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\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/"
"minetest/sv/>\n"
"Language: sv\n"
@@ -12,7 +12,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 4.0-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr "Återföds"
msgid "You died"
msgstr "Du dog"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -36,10 +40,6 @@ msgid "Main menu"
msgstr "Huvudmeny"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Ok"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Ã…teranslut"
@@ -115,6 +115,10 @@ msgstr ""
"Endast tecknen [a-z0-9_] är tillåtna."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
@@ -163,16 +167,17 @@ msgid "All packages"
msgstr "Alla paket"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Tillbaka"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Tillbaka till huvudmeny"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Laddar ner och installerar $1, vänligen vänta..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "Laddar..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -217,15 +222,58 @@ msgstr "Avnstallera"
msgid "Update"
msgstr "Uppdatera"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "En värld med namnet \"$1\" finns redan"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Altitude chill"
+msgstr "Altitudkyla"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Altitudkyla"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Biotopoljud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Biotopoljud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Grottoljud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Oktaver"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Skapa"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "Modinformation:"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Ladda ner ett spel, såsom Minetest Game, från minetest.net"
@@ -233,25 +281,147 @@ msgstr "Ladda ner ett spel, såsom Minetest Game, från minetest.net"
msgid "Download one from minetest.net"
msgstr "Ladda ner ett från minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Grottoljud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Spel"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Kartgenerator"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Kartgenerator"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Inget spel valt"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Grottoljud"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Frö"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Varning: Minimala utvecklingstestet är avsett för utvecklare."
#: builtin/mainmenu/dlg_create_world.lua
@@ -406,15 +576,26 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z-spridning"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
msgid "defaults"
msgstr "Standardspel"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -576,6 +757,10 @@ msgid "Host Server"
msgstr "Bilda Server"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Namn/Lösenord"
@@ -646,6 +831,7 @@ msgstr "Namn / Lösenord"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP aktiverat"
@@ -894,9 +1080,17 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "Den angivna sökvägen för världen existerar inte: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr ""
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -934,6 +1128,7 @@ msgstr "Port"
msgid "- Public: "
msgstr "Offentlig "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -1245,6 +1440,14 @@ msgid "Sound muted"
msgstr "Ljudvolym"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Sound unmuted"
msgstr "Ljudvolym"
@@ -1277,7 +1480,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "ok"
@@ -1400,6 +1603,7 @@ msgstr "Vänster Shift"
msgid "Left Windows"
msgstr "Vänster Windowstangent"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Meny"
@@ -1492,6 +1696,7 @@ msgstr "Paus"
msgid "Play"
msgstr "Spela"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Skriv ut"
@@ -1528,6 +1733,7 @@ msgstr "Höger Windowstangent"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Välj"
@@ -1773,10 +1979,15 @@ msgstr "Tysta"
msgid "Sound Volume: "
msgstr "Ljudvolym: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Enter "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "sv"
@@ -1868,6 +2079,10 @@ msgid "3D mode"
msgstr "3D-läge"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "3D oljudsdefinierade jättegrottor."
@@ -1880,6 +2095,14 @@ msgstr ""
"Definierar också strukturen av bergsterrängen på luftöar."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "3D oljudsdefiniering av strukturen av floddalsväggar."
@@ -1940,7 +2163,8 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "Absolut gräns av emerge kö"
#: src/settings_translation_file.cpp
@@ -1992,6 +2216,16 @@ msgstr ""
"för 4k-skärmar."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Avancerat"
@@ -2005,11 +2239,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Altitude chill"
-msgstr "Altitudkyla"
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr "Alltid flygläge och snabb"
@@ -2196,8 +2425,8 @@ msgstr "Bumpmappning"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2276,10 +2505,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Chunkstorlek"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Chattangent"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Nivå av debuglogg"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2562,6 +2801,11 @@ msgid "Default report format"
msgstr "Standardformat för rapporter"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Standardspel"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2894,6 +3138,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -3003,6 +3257,35 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Grottoljud"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -3056,6 +3339,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4352,14 +4641,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4424,6 +4705,11 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "Absolut gräns av emerge kö"
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4491,7 +4777,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4585,10 +4873,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4656,13 +4940,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4747,6 +5031,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4853,7 +5141,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4905,9 +5193,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4985,10 +5270,6 @@ msgid "Parallax occlusion scale"
msgstr "Parrallax Ocklusion"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4998,7 +5279,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5032,6 +5315,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -5101,6 +5392,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5563,6 +5866,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5585,6 +5895,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5596,15 +5910,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5722,7 +6046,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5876,6 +6200,11 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Absolut gräns av emerge kö"
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -6201,6 +6530,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6270,3 +6607,12 @@ msgstr "cURL-timeout"
#~ msgstr ""
#~ "Justera gammakodningen för ljustabeller. Högre tal är ljusare.\n"
#~ "Denna inställning påverkar endast klienten och ignoreras av servern."
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Laddar ner och installerar $1, vänligen vänta..."
+
+#~ msgid "Back"
+#~ msgstr "Tillbaka"
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
diff --git a/po/sw/minetest.po b/po/sw/minetest.po
index f803b9ad5..a34b6c98b 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: 2020-01-18 20:21+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Swahili <https://hosted.weblate.org/projects/minetest/"
@@ -22,6 +22,10 @@ msgstr "Respawn"
msgid "You died"
msgstr "Umekufa."
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
@@ -37,10 +41,6 @@ msgid "Main menu"
msgstr "Menyu kuu"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Sawa kabisa"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Unganisha upya"
@@ -117,6 +117,10 @@ msgstr ""
"kataliwa. Tu vibambo [a-z0-9_] wanaruhusiwa."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Moduli:"
@@ -165,18 +169,18 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Nyuma"
-
-#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
msgid "Back to Main Menu"
msgstr "Menyu kuu"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
-msgid "Downloading and installing $1, please wait..."
-msgstr "Inapakua $1, Tafadhali subiri..."
+msgid "Downloading..."
+msgstr "Inapakia..."
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
@@ -224,16 +228,59 @@ msgstr "Sakinisha"
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "Ulimwengu inayoitwa \"$1\" tayari ipo"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Altitude chill"
+msgstr "Chill ya mwinuko"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "Chill ya mwinuko"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "Kelele za mto"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "Kelele za mto"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "Pango kelele #1"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "Pango kelele #1"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Kuunda"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
+msgid "Decorations"
+msgstr "Instrumentation"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Pakua subgame, kama vile minetest_game, kutoka minetest.net"
@@ -241,26 +288,153 @@ msgstr "Pakua subgame, kama vile minetest_game, kutoka minetest.net"
msgid "Download one from minetest.net"
msgstr "Pakua moja kutoka minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "Kelele za mto"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "Kiwango cha maji"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Mchezo"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "Kiendeshaji video"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Mwandishi ramani"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Bendera ya Mwandishi ramani"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Mwandishi ramani v6 bendera"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mountains"
+msgstr "Mwandishi ramani v7 mlima urefu kelele vigezo"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "No game selected"
msgstr "Teua masafa"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "Ukubwa wa mto"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Mbegu"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "Urefu wa ardhi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Kina wa mto"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Tahadhari: Mtihani wa maendeleo ndogo ni maana kwa watengenezaji."
#: builtin/mainmenu/dlg_create_world.lua
@@ -421,15 +595,26 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
msgid "defaults"
msgstr "Chaguo-msingi mchezo"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -596,6 +781,10 @@ msgid "Host Server"
msgstr "Seva"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Jina/nenosiri"
@@ -666,6 +855,7 @@ msgstr "Jina / nenosiri"
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP kuwezeshwa"
@@ -916,6 +1106,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "Njia ya dunia iliyotolewa haipo:"
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -957,6 +1155,7 @@ msgstr "Bandari"
msgid "- Public: "
msgstr "Umma"
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1270,6 +1469,14 @@ msgid "Sound muted"
msgstr "Kiwango cha sauti"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Sound unmuted"
msgstr "Kiwango cha sauti"
@@ -1302,7 +1509,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "Sawa kabisa"
@@ -1432,6 +1639,7 @@ msgstr "Kisogezi kushoto"
msgid "Left Windows"
msgstr "Windows kushoto"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menyu"
@@ -1525,6 +1733,7 @@ msgstr "Sitisha"
msgid "Play"
msgstr "Kucheza"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Chapa"
@@ -1561,6 +1770,7 @@ msgstr "Windows kulia"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Teua"
@@ -1809,10 +2019,15 @@ msgstr "Ufunguo wa matumizi"
msgid "Sound Volume: "
msgstr "Kiwango sauti:"
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Ingiza"
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "sw"
@@ -1906,6 +2121,11 @@ msgid "3D mode"
msgstr "Hali ya 3D"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Nguvu ya Normalmaps"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1916,6 +2136,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1976,7 +2204,8 @@ msgid "ABM interval"
msgstr "Ramani hifadhi muda"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "Kikomo halisi ya foleni ya emerge"
#: src/settings_translation_file.cpp
@@ -2027,6 +2256,16 @@ msgstr ""
"mfano kwa 4 k skrini."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Pevu"
@@ -2040,11 +2279,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Altitude chill"
-msgstr "Chill ya mwinuko"
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr "Daima kuruka na kufunga"
@@ -2230,8 +2464,8 @@ msgstr "Bumpmapping"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2316,10 +2550,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Ukubwa wa fonti"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Ufunguo wa mazungumzo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Rekebisha kiwango cha logi"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2606,6 +2850,11 @@ msgid "Default report format"
msgstr "Umbizo wa ripoti wa chaguo-msingi"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Chaguo-msingi mchezo"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2952,6 +3201,16 @@ msgstr ""
"wakati kuweka namba ya juu zaidi kuliko 0."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "Ramprogrammen katika Menyu ya mapumziko"
@@ -3076,6 +3335,39 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "Kiwango cha maji"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "Kiwango cha maji"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "Kiwango cha maji"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "Umbali wa uhamisho wa mchezaji"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "Kiwango cha maji"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Kuruka ufunguo"
@@ -3129,6 +3421,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4789,14 +5087,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Kikomo ya foleni emerge kwenye diski"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Kikomo ya foleni emerge kuzalisha"
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4869,6 +5159,11 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "Y ya upper kikomo ya kubwa pseudorandom cellars."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Hati ya Menyu kuu"
@@ -4955,10 +5250,18 @@ msgstr ""
"Bendera kuanzia na 'hapana' hutumiwa kidhahiri Lemaza yao."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
+"Ramani kizazi sifa maalum kwa Mwandishi ramani gorofa.\n"
+"Maziwa mara kwa mara na vilima vinaweza kuongezwa kwa ulimwengu gorofa.\n"
+"Bendera ambayo haijabainishwa katika Tungo ya bendera ni hayakubadilishwa "
+"kutoka chaguo-msingi.\n"
+"Bendera kuanzia na 'hapana' hutumiwa kidhahiri Lemaza yao."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -5060,10 +5363,6 @@ msgid "Mapgen debug"
msgstr "Utatuaji wa Mwandishi ramani"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Bendera ya Mwandishi ramani"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Mwandishi ramani jina"
@@ -5130,17 +5429,19 @@ msgstr ""
"Namba ya juu ya vitalu kwamba unaweza kwenye foleni kwa ajili ya kupakia."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Namba ya juu ya vitalu kwa kuwa kwenye foleni kwamba ni kutengenezwa.\n"
"Seti kwa wazi kwa kiasi sahihi ili uweze kuchaguliwa moja kwa moja."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Namba ya juu ya vitalu kwa kuwa kwenye foleni kwamba ni kupakiwa kutoka "
"faili.\n"
@@ -5239,6 +5540,10 @@ msgid "Method used to highlight selected object."
msgstr "Mbinu inayotumiwa kuonyesha kipengee kilichoteuliwa."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Ramani"
@@ -5357,7 +5662,7 @@ msgstr ""
"Jina la seva, kuonyeshwa wakati wachezaji kujiunga na katika serverlist ya."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5411,9 +5716,6 @@ msgstr "Idadi ya nyuzi emerge"
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5494,10 +5796,6 @@ msgid "Parallax occlusion scale"
msgstr "Parallax occlusion wadogo"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Parallax occlusion nguvu"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5507,8 +5805,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Njia ya kuokoa viwambo katika."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5541,6 +5841,15 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Kikomo ya foleni emerge kuzalisha"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Fizikia"
@@ -5618,6 +5927,18 @@ msgid "Profiling"
msgstr "Ubainishaji wa"
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -6131,6 +6452,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6155,6 +6483,11 @@ msgid "Step mountain spread noise"
msgstr "Mwandishi ramani v7 mlima urefu kelele vigezo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "Nguvu ya parallax."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Nguvu ya normalmaps inayozalishwa."
@@ -6166,10 +6499,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Nguvu ya parallax."
-
-#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
msgstr "Itifaki ya kali kukagua"
@@ -6178,6 +6507,20 @@ msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "SQLite Uvingirizi"
@@ -6310,7 +6653,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6487,6 +6830,11 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "Y ya upper kikomo ya kubwa pseudorandom cellars."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Matumizi wingu 3D kuangalia badala ya gorofa."
@@ -6856,6 +7204,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6927,10 +7283,6 @@ msgstr "muda wa kuisha wa cURL"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Fonti kivuli Alfa (opaqueness kati ya 0 na 255)."
-#, fuzzy
-#~ msgid "Floatland level"
-#~ msgstr "Kiwango cha maji"
-
#~ msgid "Enables filmic tone mapping"
#~ msgstr "Huwezesha toni filmic ramani"
@@ -6953,3 +7305,22 @@ msgstr "muda wa kuisha wa cURL"
#~ msgstr ""
#~ "Rekebisha simbiko gamma kwa majedwali mwanga. Idadi ya chini ni mkali.\n"
#~ "Kipimo hiki ni kwa ajili ya mteja tu na ni kupuuzwa na seva."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Njia ya kuokoa viwambo katika."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Parallax occlusion nguvu"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Kikomo ya foleni emerge kwenye diski"
+
+#, fuzzy
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Inapakua $1, Tafadhali subiri..."
+
+#~ msgid "Back"
+#~ msgstr "Nyuma"
+
+#~ msgid "Ok"
+#~ msgstr "Sawa kabisa"
diff --git a/po/th/minetest.po b/po/th/minetest.po
index 086a54845..72490f111 100644
--- a/po/th/minetest.po
+++ b/po/th/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Thai (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2020-01-11 18:26+0000\n"
-"Last-Translator: rubenwardy <rubenwardy@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\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/"
"th/>\n"
"Language: th\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 3.10.1\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -20,7 +20,11 @@ msgstr "เà¸à¸´à¸”ใหม่"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
-msgstr "คุณชนม์"
+msgstr "คุณตายà¹à¸¥à¹‰à¸§"
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
#: builtin/fstk/ui.lua
#, fuzzy
@@ -29,51 +33,49 @@ msgstr "เà¸à¸´à¸”ข้อผิดพลาดในสคริปต์ Lu
#: builtin/fstk/ui.lua
msgid "An error occurred:"
-msgstr "เà¸à¸´à¸”ข้อผิดพลาด:"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดขึ้น:"
#: builtin/fstk/ui.lua
msgid "Main menu"
msgstr "เมนูหลัà¸"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "ตà¸à¸¥à¸‡"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
-msgstr "เชื่อมต่อ"
+msgstr "เชื่อมต่อใหม่"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "เซิร์ฟเวอร์ ร้องขอ เชื่อมต่อ:"
+msgstr "เซิร์ฟเวอร์ได้ร้องขอà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อใหม่:"
#: builtin/mainmenu/common.lua src/client/game.cpp
msgid "Loading..."
-msgstr "โหลด ..."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¹‚หลด..."
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
-msgstr "โพรโทคอลรุ่นไม่ตรงà¸à¸±à¸™. "
+msgstr "เวอร์ชันโปรโทคอลไม่ตรงà¸à¸±à¸™ "
#: builtin/mainmenu/common.lua
msgid "Server enforces protocol version $1. "
-msgstr "เซิร์ฟเวอร์บังคับใช้โพรโทคอลรุ่น $1 "
+msgstr "เซิร์ฟเวอร์บังคับใช้โปรโตคอลเวอร์ชัน $1 "
#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
-msgstr "เซิร์ฟเวอร์ที่สนับสนุนโพรโทคอลà¸à¸²à¸£à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡ $1 à¹à¸¥à¸° $2. "
+msgstr "เซิร์ฟเวอร์ที่สนับสนุนเวอร์ชันโพรโทคอลระหว่าง $1 à¹à¸¥à¸° $2 "
#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
-msgstr "ลอง reenabling serverlist สาธารณะ à¹à¸¥à¸°à¸•รวจสอบà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่ออินเทอร์เน็ต."
+msgstr ""
+"ลองเปิดใช้งานเซิร์ฟเวอร์ลิสต์สาธารณะอีà¸à¸„รั้งà¹à¸¥à¸°à¸•รวจสอบà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่ออินเทอร์เน็"
+"ต"
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
-msgstr "เราสนับสนุนโพรโทคอลรุ่น $1 เท่านั้น."
+msgstr "เราสนับสนุนโพรโทคอลเวอร์ชัน $1 เท่านั้น"
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
-msgstr "เราสนับสนุนโพรโทคอลà¸à¸²à¸£à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸£à¸¸à¹ˆà¸™ $1 à¹à¸¥à¸° $2."
+msgstr "เราสนับสนุนโพรโทคอลระหว่างเวอร์ชัน $1 à¹à¸¥à¸° $2"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_delete_content.lua
@@ -87,7 +89,7 @@ msgstr "ยà¸à¹€à¸¥à¸´à¸"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr "อ้างอิง:"
+msgstr "ไฟล์อ้างอิง:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
@@ -95,7 +97,7 @@ msgstr "ปิดใช้งานทั้งหมด"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ modpack"
+msgstr "ปิดใช้งานม็อดà¹à¸žà¹‡à¸„"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -103,19 +105,23 @@ msgstr "เปิดใช้งานทั้งหมด"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "เปิดใช้งาน modpack"
+msgstr "เปิดใช้งานม็อดà¹à¸žà¹‡à¸„"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
-"ไม่สามารถเปิดใช้งาน mod (วัยรุ่น) '$1' ประà¸à¸­à¸šà¸”้วยอัà¸à¸‚ระที่ไม่ได้รับอนุà¸à¸²à¸• "
-"อนุà¸à¸²à¸•ให้มีอัà¸à¸‚ระเท่านั้น [a-z0-9_]."
+"ไม่สามารถเปิดใช้งานม็อด '$1' ซึ่งประà¸à¸­à¸šà¸”้วยตัวอัà¸à¸©à¸£à¸—ี่ไม่ได้รับอนุà¸à¸²à¸• ตัวอั"
+"à¸à¸©à¸£ [a-z0-9_] เท่านั้นที่ได้รับอนุà¸à¸²à¸•"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
-msgstr "ปรับเปลี่ยน:"
+msgstr "ม็อด:"
#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
@@ -124,7 +130,7 @@ msgstr "เสริม อ้างอิง:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr "ไม่มีคำอธิบายเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¹€à¸à¸¡à¹ƒà¸«à¹‰."
+msgstr "ไม่มีคำอธิบายของเà¸à¸¡à¸—ี่ให้มา"
#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
@@ -133,7 +139,7 @@ msgstr "ไม่มีà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "ไม่ modpack มีคำอธิบาย"
+msgstr "ไม่มีคำอธิบายของม็อดà¹à¸žà¹‡à¸„ที่ให้มา"
#: builtin/mainmenu/dlg_config_world.lua
#, fuzzy
@@ -142,7 +148,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,23 +161,24 @@ msgstr "โลà¸:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "เปิดใช้งาน"
+msgstr "เปิดใช้งานà¹à¸¥à¹‰à¸§"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "à¹à¸žà¸„เà¸à¸ˆà¸—ั้งหมด"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "หลัง"
+msgid "Back to Main Menu"
+msgstr "à¸à¸¥à¸±à¸šà¹„ปยังเมนูหลัà¸"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back to Main Menu"
-msgstr "à¸à¸¥à¸±à¸šà¹„ปเมนูหลัà¸"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "ดาวน์โหลด à¹à¸¥à¸°à¸•ิดตั้ง $1 à¸à¸£à¸¸à¸“ารอสัà¸à¸„รู่..."
+#, fuzzy
+msgid "Downloading..."
+msgstr "โหลด ..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -180,7 +187,7 @@ msgstr "ไม่สามารถดาวน์โหลด $1"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
-msgstr "เà¸à¸¡à¸ªà¹Œ"
+msgstr "เà¸à¸¡"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install"
@@ -189,11 +196,11 @@ msgstr "ติดตั้ง"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr "วัยรุ่น"
+msgstr "ม็อด"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr "ไม่อาจจะเรียà¸"
+msgstr "ไม่สามารถเรียà¸à¹à¸žà¸„เà¸à¸ˆà¹„ด้"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
@@ -206,7 +213,7 @@ msgstr "ค้นหา"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
-msgstr "à¹à¸žà¹‡à¸„เนื้อ"
+msgstr "เทà¸à¸‹à¹Œà¹€à¸ˆà¸­à¸£à¹Œà¹à¸žà¹‡à¸„"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
@@ -214,36 +221,151 @@ msgstr "ถอนà¸à¸²à¸£à¸•ิดตั้ง"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr "ปรับปรุง"
+msgstr "อัปเดต"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr "โลà¸à¸Šà¸·à¹ˆà¸­à¸§à¹ˆà¸² '$1' อยู่à¹à¸¥à¹‰à¸§à¸¡à¸µà¸­à¸¢à¸¹à¹ˆ"
+msgstr "โลà¸à¸—ี่ชื่อว่า '$1' มีอยู่à¹à¸¥à¹‰à¸§"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "ความละเอียดของà¸à¸²à¸£à¸ªà¸¸à¹ˆà¸¡"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "สร้าง"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "ข้อมูล:"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "ดาวน์โหลดเà¸à¸¡ เà¸à¸¡ Minetest เช่นจาภminetest.net"
+msgstr "ดาวน์โหลดเà¸à¸¡ อย่างเช่น ไมน์เทสต์เà¸à¸¡ ได้จาภminetest.net"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr "ดาวน์โหลดจาภminetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "เà¸à¸¡"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "ไดรเวอร์วิดีโอ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
#, fuzzy
msgid "Mapgen"
msgstr "Mapgen"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
-msgstr "ไม่มีเà¸à¸¡à¸—ี่เลือà¸"
+msgstr "ไม่มีเà¸à¸¡à¸—ี่ถูà¸à¹€à¸¥à¸·à¸­à¸"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -251,7 +373,50 @@ msgid "Seed"
msgstr "เมล็ดพันธุ์"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "คำเตือน: à¸à¸²à¸£à¸—ดสอบพัฒนาน้อยที่สุดมีความหมายสำหรับนัà¸à¸žà¸±à¸’นา"
#: builtin/mainmenu/dlg_create_world.lua
@@ -260,11 +425,11 @@ msgstr "ชื่อโลà¸"
#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no games installed."
-msgstr "ไม่มีเà¸à¸¡à¸ªà¹Œà¸—ี่ติดตั้งคุณได้"
+msgstr "คุณไม่มีเà¸à¸¡à¸—ี่ติดตั้ง"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "คุณต้องà¸à¸²à¸£à¸¥à¸š '$1' à¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸­à¹„ม่ ?"
+msgstr "คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸­à¹„ม่ที่จะต้องà¸à¸²à¸£à¸¥à¸š '$1'"
#: builtin/mainmenu/dlg_delete_content.lua
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
@@ -274,37 +439,39 @@ msgstr "ลบ"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "pkgmgr: ไม่สามารถลบ \"$1\""
+msgstr "pkgmgr: ไม่สามารถลบ \"$1\" ได้"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr "pkgmgr: พาธไม่ถูà¸à¸•้อง \"$1\""
+msgstr "pkgmgr: พาธของ \"$1\" ไม่ถูà¸à¸•้อง"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "ลบโลภ\"$1\"?"
+msgstr "ลบโลภ\"$1\" หรือไม่"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
-msgstr "รับ"
+msgstr "ยอมรับ"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "เปลี่ยนชื่อ Modpack:"
+msgstr "เปลี่ยนชื่อม็อดà¹à¸žà¹‡à¸„:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
-msgstr "สามารถเปลี่ยนชื่อ modpack ได้ใน modpack.conf"
+msgstr ""
+"ม็อดà¹à¸žà¹‡à¸„มีชื่อชื่อที่ถูà¸à¸•ั้งในไฟล์ modpack.conf "
+"ซึ่งจะà¹à¸—นที่ชื่อที่เปลี่ยนตรงนี้"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr "(ไม่มีคำอธิบายของà¸à¸²à¸£à¸•ั้งค่าให้)"
+msgstr "(ไม่มีคำอธิบายของà¸à¸²à¸£à¸•ั้งค่าที่ให้มา)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr "2D เสียง"
+msgstr "2D นอยส์"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -316,7 +483,7 @@ msgstr "เรียà¸à¸”ู"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Disabled"
-msgstr "ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™"
+msgstr "ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸¥à¹‰à¸§"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
@@ -324,7 +491,7 @@ msgstr "à¹à¸à¹‰à¹„ข"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
-msgstr "เปิดใช้งาน"
+msgstr "เปิดใช้งานà¹à¸¥à¹‰à¸§"
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
@@ -338,15 +505,15 @@ 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."
@@ -374,11 +541,11 @@ msgstr "à¹à¸ªà¸”งชื่อทางเทคนิค"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr "ต้องมีค่าไม่น้อยà¸à¸§à¹ˆà¸² $1."
+msgstr "ต้องมีค่าอย่างน้อย $1"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr "ค่าต้องไม่มาà¸à¸à¸§à¹ˆà¸² $1."
+msgstr "ค่าต้องไม่มาà¸à¸à¸§à¹ˆà¸² $1"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
@@ -404,14 +571,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z à¸à¸£à¸°à¸ˆà¸²à¸¢"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "ค่าผันà¹à¸›à¸£à¸à¸²à¸£à¸ªà¸¸à¹ˆà¸¡à¸ªà¸£à¹‰à¸²à¸‡à¹à¸œà¸™à¸—ี่"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr "เริ่มต้น"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "ความนุ่มนวลของพื้นผิวบนทางลาด"
@@ -553,6 +731,10 @@ msgid "Host Server"
msgstr "เซิร์ฟเวอร์"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "ชื่อ/รหัสผ่าน"
@@ -620,6 +802,7 @@ msgstr "ชื่อ / รหัสผ่าน"
msgid "Ping"
msgstr "เวลาตอบสนอง"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP เปิดใช้งาน"
@@ -869,6 +1052,14 @@ msgstr "รหัสผ่านให้ไฟล์ไม่สามารถ
msgid "Provided world path doesn't exist: "
msgstr "โลà¸à¸¡à¸µà¹€à¸ªà¹‰à¸™à¹„ม่มี: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -906,6 +1097,7 @@ msgstr "-พอร์ต: "
msgid "- Public: "
msgstr "-ประชาชน: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
#, fuzzy
msgid "- PvP: "
@@ -1209,6 +1401,14 @@ msgid "Sound muted"
msgstr "เสียงเสียง"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "เสียงไม่ปิดเสียง"
@@ -1240,7 +1440,7 @@ msgstr "à¹à¸ªà¸”งโครงลวด"
msgid "Zoom currently disabled by game or mod"
msgstr "ซูมถูà¸à¸›à¸´à¸”ใช้งานในปัจจุบันโดยเà¸à¸¡à¸«à¸£à¸·à¸­à¸•ัวดัดà¹à¸›à¸¥à¸‡"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "ตà¸à¸¥à¸‡"
@@ -1366,6 +1566,7 @@ msgstr "ด้านซ้าย Shift"
msgid "Left Windows"
msgstr "หน้าต่างซ้าย"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "เมนู"
@@ -1474,6 +1675,7 @@ msgstr "หยุด"
msgid "Play"
msgstr "เล่น"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "พิมพ์"
@@ -1511,6 +1713,7 @@ msgstr "หน้าต่างขวา"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "เลือà¸"
@@ -1753,10 +1956,15 @@ msgstr "เสียง"
msgid "Sound Volume: "
msgstr "ระดับเสียง "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "ป้อน "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "th"
@@ -1846,6 +2054,11 @@ msgid "3D mode"
msgstr "โหมด 3D"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "Normalmaps à¹à¸‚็งà¹à¸£à¸‡"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1856,6 +2069,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1916,7 +2137,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1966,6 +2187,16 @@ msgstr ""
"4k."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "สูง"
@@ -1979,10 +2210,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr "บินเสมอ à¹à¸¥à¸°à¸£à¸§à¸”เร็ว"
@@ -2161,8 +2388,8 @@ msgstr "Bumpmapping"
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2244,10 +2471,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "ขนาดตัวอัà¸à¸©à¸£"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "รหัสà¹à¸Šà¸—"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "ปุ่มสลับà¸à¸²à¸£à¹à¸Šà¸—"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2518,6 +2755,11 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "เà¸à¸¡à¹€à¸£à¸´à¹ˆà¸¡à¸•้น"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2856,6 +3098,16 @@ msgstr ""
"เมื่อตั้งค่าเป็นจำนวนที่สูงà¸à¸§à¹ˆà¸² 0"
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "FPS ในเมนูหยุดชั่วคราว"
@@ -2975,6 +3227,35 @@ msgid "Fixed virtual joystick"
msgstr "à¹à¸à¹‰à¹„ขจอยสติ๊à¸à¹€à¸ªà¸¡à¸·à¸­à¸™à¸ˆà¸£à¸´à¸‡"
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "ระยะถ่ายโอนผู้เล่น"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Fly key"
msgstr "ปุ่ม Fly"
@@ -3029,6 +3310,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4560,14 +4847,6 @@ msgid "Light curve low gradient"
msgstr "ส่วนโค้งของà¹à¸ªà¸‡à¸•รงà¸à¸¥à¸²à¸‡à¹€à¸žà¸´à¹ˆà¸¡"
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4631,6 +4910,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4698,7 +4981,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4786,10 +5071,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4860,13 +5141,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4960,6 +5241,10 @@ msgid "Method used to highlight selected object."
msgstr "วิธีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¹€à¸žà¸·à¹ˆà¸­à¹€à¸™à¹‰à¸™à¸§à¸±à¸•ถุที่เลือà¸"
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "à¹à¸œà¸™à¸—ี่ขนาดเล็à¸"
@@ -5070,7 +5355,7 @@ msgstr "ชื่อของเซิร์ฟเวอร์ที่จะà¹
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr "ใà¸à¸¥à¹‰à¹€à¸„รื่องบิน"
#: src/settings_translation_file.cpp
@@ -5125,9 +5410,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5204,10 +5486,6 @@ msgid "Parallax occlusion scale"
msgstr "ขนาดà¸à¸²à¸£à¸šà¸”เคี้ยวของ Parallax"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "à¸à¸³à¸¥à¸±à¸‡à¸šà¸”เคี้ยวของ Parallax"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5217,8 +5495,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "พา ธ เพื่อบันทึà¸à¸ à¸²à¸žà¸«à¸™à¹‰à¸²à¸ˆà¸­à¸—ี่ ..."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5251,6 +5531,14 @@ msgid "Pause on lost window focus"
msgstr "หยุดà¸à¸²à¸£à¹‚ฟà¸à¸±à¸ªà¸‚องหน้าต่างที่หายไปชั่วคราว"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -5325,6 +5613,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5798,6 +6098,13 @@ msgstr ""
"ไฟล์ที่ไม่ปราà¸à¸à¸ˆà¸°à¸–ูà¸à¸”ึงข้อมูลตามปà¸à¸•ิ."
#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
@@ -5824,6 +6131,11 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "ความà¹à¸‚็งà¹à¸à¸£à¹ˆà¸‡à¸‚องพารัลà¹à¸¥à¸à¸‹à¹Œ"
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "ความà¹à¸‚็งà¹à¸à¸£à¹ˆà¸‡à¸‚องà¹à¸œà¸™à¸—ี่ปà¸à¸•ิที่สร้างขึ้น"
@@ -5835,10 +6147,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "ความà¹à¸‚็งà¹à¸à¸£à¹ˆà¸‡à¸‚องพารัลà¹à¸¥à¸à¸‹à¹Œ"
-
-#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
msgstr "à¸à¸²à¸£à¸•รวจสอบโปรโตคอลที่เข้มงวด"
@@ -5847,6 +6155,20 @@ msgid "Strip color codes"
msgstr "à¹à¸–บรหัสสี"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr ""
@@ -5968,7 +6290,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6110,7 +6432,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Trusted mods"
-msgstr ""
+msgstr "ม็อดที่เชื่อถือได้"
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
@@ -6147,6 +6469,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "ใช้รูปลัà¸à¸©à¸“์คลาวด์ 3D à¹à¸—นที่จะเป็นà¹à¸™à¸§à¸£à¸²à¸š"
@@ -6310,11 +6636,11 @@ 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"
@@ -6393,16 +6719,18 @@ msgstr ""
"à¸à¸²à¸£à¸«à¸¡à¸¸à¸™à¸­à¸±à¸•โนมัติของพื้นผิว"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Whether FreeType fonts are used, requires FreeType support to be compiled "
"in.\n"
"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr "ไม่ว่าจะใช้ฟอนต์ FreeType ต้องมีà¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™ FreeType เพื่อรวบรวม."
+msgstr ""
+"ไม่ว่าจะใช้ฟอนต์ FreeType ต้องมีà¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™ FreeType เพื่อรวบรวม\n"
+"หาà¸à¸›à¸´à¸”ใช้งาน ฟอนต์บิตà¹à¸¡à¸›à¹à¸¥à¸°à¹€à¸­à¹‡à¸à¸‹à¹Œà¹€à¸­à¹‡à¸¡à¹à¸­à¸¥à¹€à¸§à¸à¹€à¸•อร์จะใช้à¹à¸—น"
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
-msgstr "ระบุว่าควรสร้างà¸à¸²à¸£à¸‹à¸´à¸‡à¹‚ครไนซ์ภาพเคลื่อนไหวพื้นผิวของโหนดต่อ Mapblock หรือไม่."
+msgstr ""
+"ระบุว่าควรสร้างà¸à¸²à¸£à¸‹à¸´à¸‡à¹‚ครไนซ์ภาพเคลื่อนไหวพื้นผิวของโหนดต่อà¹à¸¡à¹‡à¸›à¸šà¸¥à¹‡à¸­à¸à¸«à¸£à¸·à¸­à¹„ม่"
#: src/settings_translation_file.cpp
msgid ""
@@ -6479,12 +6807,12 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
-"พื้นผิวที่จัดà¹à¸™à¸§à¹‚ลà¸à¸­à¸²à¸ˆà¸–ูà¸à¸›à¸£à¸±à¸šà¸ªà¸±à¸”ส่วนเพื่อขยายหลายโหนด อย่างไรà¸à¹‡à¸•าม\n"
+"เทà¸à¸‹à¹Œà¹€à¸ˆà¸­à¸£à¹Œà¸—ี่จัดà¹à¸™à¸§à¹‚ลà¸à¸­à¸²à¸ˆà¸–ูà¸à¸›à¸£à¸±à¸šà¸ªà¸±à¸”ส่วนเพื่อขยายหลายโหนด อย่างไรà¸à¹‡à¸•าม\n"
"เซิร์ฟเวอร์อาจไม่ส่งสเà¸à¸¥à¸—ี่คุณต้องà¸à¸²à¸£à¹‚ดยเฉพาะถ้าคุณใช้\n"
-"à¹à¸žà¹‡à¸„พื้นผิวที่ออà¸à¹à¸šà¸šà¹€à¸›à¹‡à¸™à¸žà¸´à¹€à¸¨à¸© ด้วยตัวเลือà¸à¸™à¸µà¹‰à¸¥à¸¹à¸à¸„้าพยายาม\n"
-"เพื่อà¸à¸³à¸«à¸™à¸”ขนาดโดยอัตโนมัติตามขนาดพื้นผิว\n"
-"ดูเพิ่มเติม texture_min_size\n"
-"คำเตือน: ตัวเลือà¸à¸™à¸µà¹‰à¸„ือค่าประสบà¸à¸²à¸£à¸“์!"
+"เทà¸à¸‹à¹Œà¹€à¸ˆà¸­à¸£à¹Œà¹à¸žà¹‡à¸„ที่ออà¸à¹à¸šà¸šà¹€à¸›à¹‡à¸™à¸žà¸´à¹€à¸¨à¸© ด้วยตัวเลือà¸à¸™à¸µà¹‰à¹„คลเอนต์พยายาม\n"
+"เพื่อà¸à¸³à¸«à¸™à¸”ขนาดโดยอัตโนมัติตามขนาดเทà¸à¸‹à¹Œà¹€à¸ˆà¸­à¸£à¹Œ\n"
+"ดูเพิ่มเติมที่ texture_min_size\n"
+"คำเตือน: ตัวเลือà¸à¸™à¸µà¹‰à¹€à¸›à¹‡à¸™à¸à¸²à¸£à¸—ดลอง"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
@@ -6509,6 +6837,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6589,3 +6925,18 @@ msgstr ""
#~ msgstr ""
#~ "ปรับà¸à¸²à¸£à¹€à¸‚้ารหัสà¹à¸à¸¡à¸¡à¹ˆà¸²à¸ªà¸³à¸«à¸£à¸±à¸šà¸•ารางà¹à¸ªà¸‡ ตัวเลขที่สูงà¸à¸§à¹ˆà¸²à¸™à¸±à¹‰à¸™à¸ˆà¸°à¸ªà¸§à¹ˆà¸²à¸‡à¸à¸§à¹ˆà¸²\n"
#~ "à¸à¸²à¸£à¸•ั้งค่านี้มีไว้สำหรับไคลเอ็นต์เท่านั้นà¹à¸¥à¸°à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œà¸ˆà¸°à¹€à¸žà¸´à¸à¹€à¸‰à¸¢"
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "พา ธ เพื่อบันทึà¸à¸ à¸²à¸žà¸«à¸™à¹‰à¸²à¸ˆà¸­à¸—ี่ ..."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "à¸à¸³à¸¥à¸±à¸‡à¸šà¸”เคี้ยวของ Parallax"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "ดาวน์โหลด à¹à¸¥à¸°à¸•ิดตั้ง $1 à¸à¸£à¸¸à¸“ารอสัà¸à¸„รู่..."
+
+#~ msgid "Back"
+#~ msgstr "หลัง"
+
+#~ msgid "Ok"
+#~ msgstr "ตà¸à¸¥à¸‡"
diff --git a/po/tr/minetest.po b/po/tr/minetest.po
index 617b58db4..5101b66fa 100644
--- a/po/tr/minetest.po
+++ b/po/tr/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Turkish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-10-29 11:53+0000\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-15 22:41+0000\n"
"Last-Translator: monolifed <monolifed@protonmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/minetest/"
"minetest/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 3.9.1\n"
+"X-Generator: Weblate 4.1\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr "Yeniden Canlan"
msgid "You died"
msgstr "Öldün"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "Tamam"
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua betiÄŸinde bir hata oluÅŸtu:"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "Ana menü"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Tamam"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "BaÄŸlan"
@@ -70,7 +70,7 @@ msgstr ""
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
-msgstr "Yalnızca $1 protokol sürümü desteklenmektedir."
+msgstr "Yalnızca $1 protokol sürümü desteklenmektedir."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
@@ -115,6 +115,10 @@ msgstr ""
"Yalnızca [a-z0-9_] karakterlerine izin verilir."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Daha Çok Mod Bul"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
@@ -160,16 +164,16 @@ msgid "All packages"
msgstr "Tüm paketler"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Geri"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Ana Menüye Dön"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "$1 indiriliyor ve kuruluyor, lütfen bekleyin..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "Minetest cURL'siz derlediğinde ContentDB kullanılamaz"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "İndiriliyor..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -214,15 +218,51 @@ msgstr "Kaldır"
msgid "Update"
msgstr "Güncelle"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Görüntüle"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "\"$1\" adlı dünya zaten var"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "Ek arazi"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "Yükseklik soğukluğu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "Yükseklik kuruluğu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Biyom karıştırma"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Biyomlar"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Oyuklar"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "MaÄŸaralar"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Yarat"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "Dekorasyonlar"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "minetest.net'den , Minetest Game gibi, bir oyun indirin"
@@ -230,26 +270,146 @@ msgstr "minetest.net'den , Minetest Game gibi, bir oyun indirin"
msgid "Download one from minetest.net"
msgstr "minetest.net adresinden indirin"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "Zindanlar"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "Düz arazi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Gökyüzünde yüzenkara kütleleri"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "Yüzenkaralar (deneysel)"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Oyun"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "Fraktal olmayan arazi üret: Okyanuslar ve yeraltı"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Tepeler"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Nemli nehirler"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Nehirler etrafındaki nemi artırır"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Göller"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "Düşük nem ve yüksek ısı, sığ ve kuru nehirler oluşturur"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Mapgen"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Mapgen bayrakları"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "Mapgen'e özgü bayraklar"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "DaÄŸlar"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "Çamur akışı"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Tüneller ve mağaralar ağı"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Seçilen oyun yok"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Yükseklikle ısıyı azaltır"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Yükseklik ile nemi azaltır"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Nehirler"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Deniz seviyesi nehirleri"
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Tohum"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
-msgstr "Uyarı : Minimal geliştirici testi geliştiriciler içindir."
+msgid "Smooth transition between biomes"
+msgstr "Biyomlar arası yumuşak geçiş"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+"Arazide görülen yapılar (v6 ile oluşturulan ağaçlar ve jangıl çimi üzerinde "
+"etkisizdir)"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "Arazide görülen yapılar, genellikle ağaçlar ve bitkiler"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Ilıman, Çöl"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Ilıman, Çöl, Jangıl"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "Ilıman, Çöl, Jangıl, Tundra, Tayga"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "Arazi yüzey erozyonu"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "Ağaçlar ve jangıl çimi"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "Nehir derinliÄŸini deÄŸiÅŸtir"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "Yerin derinliklerinde çok büyük oyuklar"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr "Uyarı : Geliştirici testi geliştiriciler içindir."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -401,14 +561,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "Z yayılması"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "mutlak deÄŸer"
+#. ~ "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 "öntanımlılar"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "rahat"
@@ -550,6 +721,10 @@ msgid "Host Server"
msgstr "Sunucu Barındır"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr "ContentDB'den oyunlar yükle"
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Ad/Åžifre"
@@ -617,6 +792,7 @@ msgstr "Ad / Åžifre"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "SavaÅŸ etkin"
@@ -861,6 +1037,14 @@ msgstr "Sağlanan şifre dosyası açılamadı: "
msgid "Provided world path doesn't exist: "
msgstr "Belirtilen dünya konumu yok: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "no"
@@ -897,6 +1081,7 @@ msgstr "- Port: "
msgid "- Public: "
msgstr "- Herkes: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- SavaÅŸ: "
@@ -1195,6 +1380,14 @@ msgid "Sound muted"
msgstr "Ses kısık"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr "Ses sistemi devre dışı"
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr "Bu inÅŸada ses sistemi desteklenmiyor"
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Ses açık"
@@ -1226,7 +1419,7 @@ msgstr "Telkafes gösteriliyor"
msgid "Zoom currently disabled by game or mod"
msgstr "Yakınlaştırma şu anda oyun veya mod tarafından devre dışı"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "tamam"
@@ -1347,6 +1540,7 @@ msgstr "Sol Shift"
msgid "Left Windows"
msgstr "Sol Windows"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Menü"
@@ -1439,6 +1633,7 @@ msgstr "Duraklat"
msgid "Play"
msgstr "Oyna"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Yazdır"
@@ -1475,6 +1670,7 @@ msgstr "SaÄŸ Windows"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Seç"
@@ -1714,10 +1910,15 @@ msgstr "Ses Kısık"
msgid "Sound Volume: "
msgstr "Ses Seviyesi: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Gir "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "tr"
@@ -1741,7 +1942,6 @@ msgstr ""
"düğmesini de dinler."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1752,11 +1952,11 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
-"Fraktalın dünya merkezinden 'scale' birimi cinsinden (X,Y,Z)\n"
-"kaydırması. Uygun canlanma noktası yaratmak için istenen \n"
-"noktayı (0,0)'a taşımada veya 'scale'ı artırarak istenen bir\n"
+"Fraktalın dünya merkezinden 'scale' biriminde (X,Y,Z) kaydırması.\n"
+"Uygun canlanma noktası yaratmak için istenen noktayı (0,0)'a\n"
+"taşımada veya 'scale'ı artırarak istenen bir\n"
"noktaya yakınlaşmaya izin vermede kullanılabilir.\n"
-"Öntanımlı olan öntanımlı parametreli mandelbrot setleri için\n"
+"Öntanımlı olan öntanımlı parametreli Mandelbrot setleri için\n"
"uygun bir canlanma noktası için ayarlanmıştır, diğer durumlar\n"
"için değiştirme gerektirebilir.\n"
"Kabaca -2 ile 2 arası . Nodlardaki kaydırmalar için 'scale' ile çarpın."
@@ -1824,6 +2024,10 @@ msgid "3D mode"
msgstr "3D kipi"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr "3D kipi paralaks gücü"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr "Dev oyukları belirleyen 3D gürültü."
@@ -1836,6 +2040,18 @@ msgstr ""
"Ayrıca yüzenkara dağ arazi yapısını da belirler."
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+"Yüzenkaraların yapısını tanımlayan 3D gürültü.\n"
+"Öntanımlıdan değiştirildiğinde, 'scale' (öntanımlı 0.7) gürültüsünün\n"
+"ayarlanması gerekebilir. Gürültü yaklaşık -2.0 ve 2.0 aralığındayken\n"
+"yüzenkara koniklik fonksiyonları en iyidir."
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "Nehir kanyon duvarlarının yapısını belirleyen 3D gürültü."
@@ -1898,8 +2114,8 @@ msgid "ABM interval"
msgstr "ABM aralığı"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
-msgstr "Emerge sıralarının mutlak sınırı"
+msgid "Absolute limit of queued blocks to emerge"
+msgstr "Emerge için sıralanmış blokların mutlak sınırı"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -1944,10 +2160,25 @@ msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
-"Ekranınızın (yalnızca Android/X11 olmayan) dpi yapılandırmasını ayarlayın "
+"Ekranınızın (yalnızca Android/X11 olmayan) dpi yapılandırmasını ayarlayın "
"ör: 4k ekranlar için."
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+"Yüzenkara katmanının yoğunluğunu ayarlar\n"
+"Yoğunluğu artırmak için değeri artırın. Pozitif ve negatif olabilir.\n"
+"Değer = 0.0: hacmin %50'si yüzenkaradır\n"
+"Değer = 2.0 ('mgv7_np_floatland' de daha yüksek olabilir, emin olmak\n"
+"için her zaman test edin) katı yüzenkara katmanı yaratır."
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "GeliÅŸmiÅŸ"
@@ -1959,10 +2190,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr "Yükseklik soğukluğu"
+"Işık eğrisini 'gama düzeltmesi' uygulayarak değiştirir.\n"
+"Yüksek değerler orta ve düşük ışık seviyelerini daha parlak hale getirir.\n"
+"'1.0' değeri ışık eğrisini değiştirmeden bırakır.\n"
+"Bunun sadece gün ışığı ve suni ışık üstünde önemli bir etkisi vardır.\n"
+"doğal gece ışığı üzerinde çok az etkisi vardır."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2118,24 +2350,20 @@ msgid "Block send optimize distance"
msgstr "Blok gönderme iyileştirme uzaklığı"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Eş aralıklı yazı tipi konumu"
+msgstr "Kalın ve italik yazı tipi konumu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Eş aralıklı yazı tipi konumu"
+msgstr "Kalın ve italik eş aralıklı yazı tipi konumu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Yazı tipi konumu"
+msgstr "Kalın yazı tipi konumu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Eş aralıklı yazı tipi konumu"
+msgstr "Kalın eş aralıklı yazı tipi konumu"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2151,14 +2379,15 @@ msgstr "Tümsek eşleme"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
-"Nodlar arasındaki, kamera 'yakın kırpma düzlem' uzaklığı, 0 ile 0,5 "
+"Nodlar arasındaki, kamera 'yakın kırpma düzlem' uzaklığı, 0 ile 0,25 "
"arasında.\n"
-"Çoğu kullanıcının bunu değiştirmesi gerekmez.\n"
+"Yalnızca GLES platformlarında çalışır. Çoğu kullanıcının bunu değiştirmesi "
+"gerekmez.\n"
"Artırma, zayıf GPU'larda görüntü bozulmalarını azaltabilir.\n"
"0,1 = Öntanımlı, 0,25 = Zayıf tabletler için iyi değer."
@@ -2223,6 +2452,8 @@ msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Işık eğrisi artırma aralığının merkezi.\n"
+"0.0 minimum, 1.0 maksimum ışık seviyesidir."
#: src/settings_translation_file.cpp
msgid ""
@@ -2240,10 +2471,18 @@ msgstr ""
"Küçük ekranlar için gerekli olabilir."
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr "Sohbet yazı tipi boyutu"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Sohbet tuÅŸu"
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr "Sohbet günlük düzeyi"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "Sohbet ileti sayısı sınırı"
@@ -2442,6 +2681,11 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Tünellerin genişliğini kontrol eder, daha küçük bir değer daha geniş "
+"tüneller oluşturur.\n"
+"Değer >= 10.0, tünellerin oluşumunu tamamen devre dışı kılar ve yoğun "
+"gürültü\n"
+"hesaplamaları önler."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2492,7 +2736,6 @@ msgid "Dec. volume key"
msgstr "Ses alçaltma tuşu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Decrease this to increase liquid resistance to movement."
msgstr "Harekete karşı sıvı direncini artırmak için bunu azaltın."
@@ -2529,6 +2772,10 @@ msgid "Default report format"
msgstr "Öntanımlı rapor biçimi"
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr "Öntanımlı yığın boyutu"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2703,6 +2950,8 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"IPv6 desteğini etkinleştirin (hem istemci hem de sunucu için).\n"
+"IPv6 bağlantılarının çalışması için gereklidir."
#: src/settings_translation_file.cpp
msgid ""
@@ -2788,6 +3037,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Köşe arabellek nesnelerini etkinleştirin.\n"
+"Bu grafik performansını büyük ölçüde artırır."
#: src/settings_translation_file.cpp
msgid ""
@@ -2798,14 +3049,14 @@ msgstr ""
"Örneğin: 0 ise görüntü sallanması yok; 1.0 ise normal; 2.0 ise çift."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
"IPv6 sunucu çalıştırmayı etkin/devre dışı kılar.\n"
-"Eğer bind_address ayarlı ise yok sayılır."
+"Eğer bind_address ayarlı ise yok sayılır.\n"
+"enable_ipv6 etkin kılınmalıdır."
#: src/settings_translation_file.cpp
msgid ""
@@ -2814,6 +3065,11 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Hable'ın 'Uncharted 2' film ton eşlemesini etkinleştirir.\n"
+"Fotoğrafsal film ton eğrisini simüle eder ve bu\n"
+"yüksek dinamik aralıklı görüntülerin görünümü yakınlaştırır. Orta-aralık\n"
+"kontrast biraz geliştirilir, vurgular ve gölgeler kademeli olarak "
+"sıkıştırılır."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -2862,6 +3118,10 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Ses sistemini etkinleÅŸtirir.\n"
+"Devre dışı bırakılırsa, bu tüm sesleri devre dışı kılar ve oyun içindeki\n"
+"ses denetimlerinin iÅŸlevi olmaz.\n"
+"Bu ayarı değiştirmek, yeniden başlatma gerektirir."
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -2880,6 +3140,23 @@ msgstr ""
"bloklar arasında görünür boşluklara neden olabilir."
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+"Yüzenkara konikliğinin eksponenti. Koniklik davranışını değiştirir.\n"
+"Değer = 1.0 düzgün, doğrusal bir koniklik oluşturur.\n"
+"Değerler > 1.0, öntanımlı ayrılmış yüzenkaralar için uygun pürüzsüz bir\n"
+"koniklik oluÅŸturur.\n"
+"Değerler <1.0 (örneğin 0.25) Daha düz aşağı karalarla daha tanımlı bir "
+"yüzey\n"
+"seviyesi oluşturur: katı bir yüzenkara katmanı için uygundur."
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "Duraklat menüsünde FPS"
@@ -2896,9 +3173,8 @@ msgid "Fall bobbing factor"
msgstr "Düşme sallanması çarpanı"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Geri dönüş yazı tipi"
+msgstr "Yedek yazı tipi konumu"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -3000,6 +3276,34 @@ msgid "Fixed virtual joystick"
msgstr "Sabit sanal joystick"
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr "Yüzenkara yoğunluğu"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr "Yüzenkara maksimum Y"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr "Yüzenkara minimum Y"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr "Yüzenkara gürültüsü"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr "Yüzenkara koniklik eksponenti"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr "Yüzenkara koniklik uzaklığı"
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr "Yüzenkara su seviyesi"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Uçma tuşu"
@@ -3021,11 +3325,11 @@ msgstr "Sis açma/kapama tuşu"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Öntanımlı kalın yazı tipi"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Öntanımlı italik yazı tipi"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3041,15 +3345,24 @@ msgstr "Yazı tipi boyutu"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "Öntanımlı yazı tipinin nokta (pt) olarak boyutu."
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "Yedek yazı tipinin nokta (pt) olarak boyutu."
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "Eş aralıklı yazı tipinin nokta (pt) olarak boyutu."
+
+#: 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 ""
+"Son sohbet metninin ve sohbet isteminin nokta(pt) cinsinden yazı tipi boyutu."
+"\n"
+"0 değer öntanımlı yazı tipi boyutunu kullanır."
#: src/settings_translation_file.cpp
msgid ""
@@ -3057,7 +3370,7 @@ msgid ""
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
-"Oyuncu sohbet ileti biçimi. Aşağıdaki dizeler geçerli yer tutuculardır:\n"
+"Oyuncu sohbet ileti biçimi. Aşağıdaki dizgiler geçerli yer tutuculardır:\n"
"@name, @message, @timestamp (isteğe bağlı)"
#: src/settings_translation_file.cpp
@@ -3191,18 +3504,20 @@ msgstr ""
"denetler, diğer mapgenlerde bu bayrak tüm dekorasyonları denetler."
#: 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 "Maksimum ışık seviyesinde ışık eğrisinin gradyantı."
+msgstr ""
+"Maksimum ışık seviyesinde ışık eğrisinin gradyantı.\n"
+"En yüksek ışık düzeylerinin kontrastını denetler."
#: 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 "Minimum ışık seviyesinde ışık eğrisinin gradyantı."
+msgstr ""
+"Minimum ışık seviyesinde ışık eğrisinin gradyantı.\n"
+"En düşük ışık düzeylerinin kontrastını kontrol eder."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3233,7 +3548,6 @@ 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"
"- legacy: (try to) mimic old behaviour (default for release).\n"
@@ -3482,6 +3796,10 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Sıvı dalgalarının ne kadar hızlı hareket edeceğini belirler . Daha yüksek = "
+"daha hızlı.\n"
+"Negatif ise, sıvı dalgalar geriye hareket edecektir.\n"
+"Dalgalanan sıvılar etkin kılınmalıdır."
#: src/settings_translation_file.cpp
msgid ""
@@ -3521,8 +3839,8 @@ msgid ""
"If FPS would go higher than this, limit it by sleeping\n"
"to not waste CPU power for no benefit."
msgstr ""
-"FPS bundan daha fazla yükselecekse, CPU gücünü boşa tüketmemek için, uykuya "
-"dalarak sınırla ."
+"FPS bundan daha fazla yükselecekse, CPU gücünü boşa\n"
+"tüketmemek için, uykuya dalarak sınırla."
#: src/settings_translation_file.cpp
msgid ""
@@ -3728,14 +4046,12 @@ msgid "Invert vertical mouse movement."
msgstr "Ters dikey fare hareketi."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Eş aralıklı yazı tipi konumu"
+msgstr "İtalik yazı tipi konumu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Eş aralıklı yazı tipi konumu"
+msgstr "İtalik eş aralıklı yazı tipi konumu"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4565,15 +4881,15 @@ msgstr "Büyük mağara derinliği"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Büyük mağara maksimum sayısı"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Büyük mağara minimum sayısı"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Büyük mağara su alma oranı"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4609,13 +4925,12 @@ msgstr ""
"aralık."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"True (doğru) olarak ayarlamak dalgalanan yaprakları etkinleştirir.\n"
-"Gölgelemenin etkin olmasını gerektirir."
+"Sıvı dalgalarının uzunluğu.\n"
+"Dalgalanan sıvılar etkin kılınmalı."
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
@@ -4650,42 +4965,28 @@ msgstr ""
"- verbose (ayrıntılı)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost"
-msgstr "Işık eğrisi orta-artırma"
+msgstr "Işık eğrisi artırma"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost center"
-msgstr "Işık eğrisi orta-artırma merkezi"
+msgstr "Işık eğrisi artırma merkezi"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost spread"
-msgstr "Işık eğrisi orta-artırmanın yayılması"
+msgstr "Işık eğrisi artırma yayılması"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve gamma"
-msgstr "Işık eğrisi orta-artırma"
+msgstr "Işık eğrisi gama"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve high gradient"
-msgstr "Işık eğrisi orta-artırma"
+msgstr "Işık eğrisi yüksek gradyan"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve low gradient"
-msgstr "Işık eğrisi orta-artırma merkezi"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "Diskte emerge sıralarının sınırı"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "Üretilecek emerge sıralarının sınırı"
+msgstr "Işık eğrisi düşük gradyan"
#: src/settings_translation_file.cpp
msgid ""
@@ -4762,6 +5063,10 @@ msgid "Lower Y limit of dungeons."
msgstr "Zindanların alt Y sınırı."
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr "Yüzenkaraların alt Y sınırı."
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "Ana menü betiği"
@@ -4795,22 +5100,20 @@ msgid "Map generation attributes specific to Mapgen Carpathian."
msgstr "Mapgen Karpat'a özgü harita üretim değerleri."
#: 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 düz'e özgü harita üretim değerleri.\n"
+"Mapgen Düz'e özgü harita üretim değerleri.\n"
"Ara sıra göller ve tepeler düz dünyaya eklenebilir."
#: 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 ""
-"Mapgen düz'e özgü harita üretim değerleri.\n"
+"Mapgen Fraktal'a özgü harita üretim değerleri.\n"
"'terrain' fraktal olmayan arazi üretimini etkinleştirir:\n"
"okyanus, adalar ve yeraltı."
@@ -4850,10 +5153,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
-"Mapgen v7'ye özgü harita üretim özellikleri.\n"
-"'ridges' nehirleri etkinleÅŸtirir."
+"Mapgen v7'ye özgü harita oluşturma özellikleri.\n"
+"'ridges': Nehirler.\n"
+"'floatlands': Atmosferde yüzen kara kütleleri.\n"
+"'caverns:' Dev derin yeraltı mağaraları."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -4940,10 +5247,6 @@ msgid "Mapgen debug"
msgstr "Mapgen hata ayıklama"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Mapgen bayrakları"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Mapgen adı"
@@ -4985,19 +5288,18 @@ msgstr "Maksimum hotbar geniÅŸliÄŸi"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Her harita yığını için rastgele büyük mağara sayısının üst sınırı."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Her harita yığını için rastgele küçük mağara sayısının üst sınırı."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
-"Maksimum sıvı direnci. Yüksek hızda sıvıya girerken yavaşlamayı\n"
+"Maksimum sıvı direnci. Sıvıya, yüksek hızda girerken yavaşlamayı\n"
"denetler."
#: src/settings_translation_file.cpp
@@ -5017,18 +5319,18 @@ msgstr "Yükleme için sıraya alınabilecek maksimum blok sayısı."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Üretilmesi için sıralanacak maksimum blok sayısı.\n"
-"Uygun miktarın kendiliğinden seçilmesi için boş olarak ayarlayın."
+"Bu sınır her oyuncu için zorunlu kılınır."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"Bir dosyadan yüklenmesi için sıraya koyulacak maksimum blok sayısı.\n"
-"Uygun miktarın kendiliğinden seçilmesi için boş olarak ayarlayın."
+"Bu sınır her oyuncu için zorunlu kılınır."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5124,6 +5426,10 @@ msgid "Method used to highlight selected object."
msgstr "Seçili nesneyi vurgulamak için kullanılan yöntem."
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr "Sohbete yazılacak en az günlük düzeyi."
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Mini harita"
@@ -5136,13 +5442,12 @@ msgid "Minimap scan height"
msgstr "Mini harita tarama yüksekliği"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "Harita yığını başına zindan sayısını belirleyen 3B gürültü."
+msgstr "Her harita yığını için rastgele büyük mağara sayısının alt sınırı."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Her harita yığını için rastgele küçük mağara sayısının alt sınırı."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
@@ -5241,7 +5546,7 @@ msgstr ""
"Oyuncular katılındığında ve sunucu listesinde görüntülenecek sunucu adı."
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr "Yakın kırpma düzlemi"
#: src/settings_translation_file.cpp
@@ -5295,9 +5600,6 @@ msgstr "Emerge iş sayısı"
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5309,10 +5611,6 @@ msgid ""
"'on_generated'. For many users the optimum setting may be '1'."
msgstr ""
"Kullanılacak emerge iş parçacıklarının sayısı.\n"
-"UYARI: Şu anda 'num_emerge_threads' 1'den büyük olduğunda çökmelere\n"
-"neden olabilecek birden fazla hata var. Bu uyarı kaldırılıncaya kadar, bu "
-"deÄŸerin\n"
-"öntanımlı '1' olarak ayarlanması şiddetle önerilir.\n"
"DeÄŸer 0:\n"
"- Kendiliğinden seçim. Ortaya çıkan emerge iş parçacıklarının sayısı\n"
"- alt limit 1 olmak üzere 'işlemci sayısı - 2' olacaktır.\n"
@@ -5350,11 +5648,14 @@ msgstr "Opak sıvılar"
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
msgstr ""
+"0 ile 255 arasında öntanımlı yazı tipinin arkasındaki gölgenin opaklığı "
+"(alfa)."
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
msgstr ""
+"0 ile 255 arasında yedek yazı tipinin arkasındaki gölgenin opaklığı (alfa)."
#: src/settings_translation_file.cpp
msgid ""
@@ -5362,7 +5663,7 @@ msgid ""
"formspec is\n"
"open."
msgstr ""
-"Pencere odağı kaybolduğunda duraklat menüsünü aç. Bir formspec açıksa "
+"Pencere odağı kaybolduğunda duraklat menüsünü aç. Bir formspec açıksa\n"
"duraklamaz."
#: src/settings_translation_file.cpp
@@ -5394,10 +5695,6 @@ msgid "Parallax occlusion scale"
msgstr "Paralaks oklüzyon boyutu"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "Paralaks oklüzyon gücü"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5405,10 +5702,19 @@ msgid ""
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Yedek yazı tipi konumu.\n"
+"“freetype†ayarı etkinse: TrueType yazı tipi olmalı.\n"
+"“freetype†ayarı devre dışıysa: bitmap veya XML vektör yazı tipi olmalı.\n"
+"Bu yazı tipi belirli diller için veya öntanımlı yazı tipi kullanılamıyorsa "
+"kullanılır."
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "Ekran yakalamaların kaydedileceği konum."
+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 ""
+"Ekran görüntülerini kaydetme konumu. Mutlak veya göreli bir konum olabilir.\n"
+"Klasör henüz yoksa oluşturulur."
#: src/settings_translation_file.cpp
msgid ""
@@ -5429,6 +5735,10 @@ 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 ""
+"Öntanımlı yazı tipi konumu.\n"
+"“freetype†ayarı etkinse: TrueType yazı tipi olmalı.\n"
+"“freetype†ayarı devre dışıysa: bitmap veya XML vektör yazı tipi olmalı.\n"
+"Yazı tipi yüklenemiyorsa yedek yazı tipi kullanılır."
#: src/settings_translation_file.cpp
msgid ""
@@ -5437,12 +5747,24 @@ 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 ""
+"Eş aralıklı yazı tipi konumu.\n"
+"“freetype†ayarı etkinse: TrueType yazı tipi olmalı.\n"
+"“freetype†ayarı devre dışıysa: bitmap veya XML vektör yazı tipi olmalı.\n"
+"Bu yazı tipi konsol, profil ekranı v.b. için kullanılır."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
msgstr "Pencere odağı kaybolunca duraklat"
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr "Diskten yüklenen sıralanmış blokların oyuncu başına sınırı"
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr "Üretilecek sıralanmış blokların, oyuncu başına sınırı"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Fizik"
@@ -5521,8 +5843,24 @@ msgid "Profiling"
msgstr "Profilleme"
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "Prometheus listener address"
+msgstr "Prometheus dinleyici adresi"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
msgstr ""
+"Prometheus dinleyici adresi.\n"
+"Minetest ENABLE_PROMETHEUS seçeneği etkin olarak derlenmişse,\n"
+"bu adreste Prometheus için metrik dinleyicisini etkinleştirin.\n"
+"Metrikler http://127.0.0.1:30000/metrics adresinden alınabilir"
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr "Sıvı içeren büyük mağaraların oranı."
#: src/settings_translation_file.cpp
msgid ""
@@ -5551,9 +5889,8 @@ msgid "Recent Chat Messages"
msgstr "Son Sohbet İletileri"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Rapor konumu"
+msgstr "Normal yazı tipi konumu"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5697,9 +6034,8 @@ msgid ""
msgstr ""
"Kullanıcı tanımlı bir değerle arayüzü boyutlandır.\n"
"Arayüzü boyutlandırırken en-yakın-komşu-kenar-yumuşatma\n"
-"filtresi kullan.\n"
-"Bu bazı pürüzlü kenarları yumuşatır ve küçültürken pikselleri\n"
-"kaynaştırır, görüntüler tam sayı olmayan boyutlarla\n"
+"filtresi kullan. Bu bazı pürüzlü kenarları yumuşatır ve küçültürken\n"
+"pikselleri kaynaştırır, görüntüler tam sayı olmayan boyutlarla\n"
"ölçeklendiğinde bazı kenar piksellerde bulanıklığa neden olur."
#: src/settings_translation_file.cpp
@@ -5766,7 +6102,6 @@ msgid "Selection box width"
msgstr "Seçim kutusu genişliği"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -5789,24 +6124,24 @@ msgid ""
"18 = 4D \"Mandelbulb\" Julia set."
msgstr ""
"18 fraktal türünden birini seçer.\n"
-"1 = 4D \"Roundy\" mandelbrot seti.\n"
-"2 = 4D \"Roundy\" julia seti.\n"
-"3 = 4D \"Squarry\" mandelbrot seti.\n"
-"4 = 4D \"Squarry\" julia seti.\n"
-"5 = 4D \"Mandy Cousin\" mandelbrot seti.\n"
-"6 = 4D \"Mandy Cousin\" julia seti.\n"
-"7 = 4D \"Variation\" mandelbrot seti.\n"
-"8 = 4D \"Variation\" julia seti.\n"
-"9 = 3D \"Mandelbrot/Mandelbar\" mandelbrot seti.\n"
-"10 = 3D \"Mandelbrot/Mandelbar\" julia seti.\n"
-"11 = 3D \"Christmas Tree\" mandelbrot seti.\n"
-"12 = 3D \"Christmas Tree\" julia seti.\n"
-"13 = 3D \"Mandelbulb\" mandelbrot seti.\n"
-"14 = 3D \"Mandelbulb\" julia seti.\n"
+"1 = 4D \"Roundy\" Mandelbrot seti.\n"
+"2 = 4D \"Roundy\" Julia seti.\n"
+"3 = 4D \"Squarry\" Mandelbrot seti.\n"
+"4 = 4D \"Squarry\" Julia seti.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot seti.\n"
+"6 = 4D \"Mandy Cousin\" Julia seti.\n"
+"7 = 4D \"Variation\" Mandelbrot seti.\n"
+"8 = 4D \"Variation\" Julia seti.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot seti.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia seti.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot seti.\n"
+"12 = 3D \"Christmas Tree\" Julia seti.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot seti.\n"
+"14 = 3D \"Mandelbulb\" Julia seti.\n"
"15 = 3D \"Cosine Mandelbulb\" mandelbrot seti.\n"
"16 = 3D \"Cosine Mandelbulb\" julia seti.\n"
-"17 = 4D \"Mandelbulb\" mandelbrot seti.\n"
-"18 = 4D \"Mandelbulb\" julia seti."
+"17 = 4D \"Mandelbulb\" Mandelbrot seti.\n"
+"18 = 4D \"Mandelbulb\" Julia seti."
#: src/settings_translation_file.cpp
msgid "Server / Singleplayer"
@@ -5859,31 +6194,28 @@ msgstr ""
"ayarla."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
-"True (doğru) olarak ayarlamak dalgalanan yaprakları etkinleştirir.\n"
-"Gölgelemenin etkin olmasını gerektirir."
+"Dalgalanan yaprakları için doğru'ya ayarlayın.\n"
+"Gölgelemeler etkin kılınmalıdır."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"True (doÄŸru) olarak ayarlamak dalgalanan suyu etkinleÅŸtirir.\n"
-"Gölgelemenin etkin olmasını gerektirir."
+"Dalgalanan sıvılar (su gibi) için doğru'ya ayarlayın.\n"
+"Gölgelemeler etkin kılınmalıdır."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
-"True (doÄŸru) olarak ayarlamak dalgalanan bitkileri etkinleÅŸtirir.\n"
-"Gölgelemenin etkin olmasını gerektirir."
+"Dalgalanan bitkiler için doğru'ya ayarlayın.\n"
+"Gölgelemeler etkin kılınmalıdır."
#: src/settings_translation_file.cpp
msgid "Shader path"
@@ -5902,18 +6234,18 @@ msgstr ""
"Bu yalnızca OpenGL video arka ucu ile çalışır."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
-msgstr "Yazı tipi gölge kayması, 0 ise gölge çizilmez."
+msgstr ""
+"Öntanımlı yazı tipinin gölge uzaklığı (piksel olarak). 0 ise, gölge çizilmez."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
"be drawn."
-msgstr "Yazı tipi gölge kayması, 0 ise gölge çizilmez."
+msgstr ""
+"Yedek yazı tipinin gölge uzaklığı (piksel olarak). 0 ise, gölge çizilmez."
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -5967,11 +6299,11 @@ msgstr "Yükseklikleri değiştirmek için eğim ve dolgu birlikte işler."
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Küçük mağara maksimum sayısı"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Küçük mağara minimum sayısı"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6039,14 +6371,24 @@ msgstr ""
"Var olmayan dosyalar her zamanki yoldan alınır."
#: 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 ""
+"Nodların, ögelerin ve araçların öntanımlı yığın boyutunu belirtir.\n"
+"Modların veya oyunların belirli (veya tüm) ögeler için açıkça bir yığın "
+"ayarlayabileceğini unutmayın."
+
+#: src/settings_translation_file.cpp
msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
msgstr ""
-"Işık eğrisi orta-artırmanın yayılması.\n"
-"Gaussian orta-artırmanın standart deviyasyonu."
+"Işık eğrisi artırma aralığının yayılması.\n"
+"Artırılacak aralığın genişliğini denetler.\n"
+"Işık eğrisi artırma Gaussian'ın standart sapması."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6065,6 +6407,10 @@ msgid "Step mountain spread noise"
msgstr "Step dağ yayılma gürültüsü"
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr "3D kipi paralaksın gücü."
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "Üretilen normal eşlemelerin gücü."
@@ -6074,10 +6420,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "Paralaks gücü."
+"Işık eğrisi artırmanın gücü.\n"
+"3 'boost' parametresi parlaklık artırılan\n"
+"bir ışık eğrisi aralığı tanımlar."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6088,6 +6433,32 @@ msgid "Strip color codes"
msgstr "Renk kodlarını kaldır"
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+"Katı yüzenkara katmanına yerleştirilmiş isteğe bağlı suyun yüzey seviyesi.\n"
+"Su öntanımlı olarak devre dışıdır ve yalnızca bu değer,\n"
+"'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (üst koniklik başlangıcı)\n"
+"üstünde ayarlandığında yerleştirilir.\n"
+"***UYARI, DÜNYA VE SUNUCU PERFORMANSI İÇİN POTANSİYEL TEHLİKE***:\n"
+"Su yerleşimi etkinleştirilirken, sunucuyu yoracak aşırı su akışını ve "
+"aşağıdaki\n"
+"dünya yüzeyine büyük taşkınları önlemek için, yüzenkaralar katı bir katman\n"
+"olması için, 'mgv7_floatland_density' 2.0'a (veya 'mgv7_np_floatland' e "
+"bağlı\n"
+"olarak baÅŸka zorunlu deÄŸere) ayarlanarak\n"
+"yapılandırılmalı ve test edilmelidir."
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "Eşzamanlı SQLite"
@@ -6198,6 +6569,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Dalgalanan sıvıların yüzeyinin maksimum yüksekliği.\n"
+"4.0 = Dalga yüksekliği iki nod.\n"
+"0.0 = Dalga hiç hareket etmez.\n"
+"Öntanımlı 1.0'dır (1/2 nod).\n"
+"Dalgalanan sıvılar etkin kılınmalıdır."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6220,14 +6596,14 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
"Her oyuncu çevresinde, etkin blok işlemleri uygulanacak, bloklarının "
"hacminin\n"
"yarıçapı, harita blokları (16 nod) cinsinden.\n"
"Etkin bloklarda neseneler yüklenir ve ABMler çalışır.\n"
"Bu ayrıca etkin nesnelerin (moblar) korunacağı minimum uzaklıktır.\n"
-"Bu active_object_range ile birlikte ayarlanmalıdır."
+"Bu active_object_send_range_blocks ile birlikte ayarlanmalıdır."
#: src/settings_translation_file.cpp
msgid ""
@@ -6305,7 +6681,8 @@ msgid ""
"'altitude_dry' is enabled."
msgstr ""
"'altitude_chill' etkinse, ısının 20 azalacağı dikey uzaklık.\n"
-"Ayrıca, 'altitude_dry' etkinse, nemin 10 azalacağı dikey uzaklık."
+"Ayrıca, 'altitude_dry' etkinse, nemin 10 azalacağı dikey\n"
+"uzaklık."
#: src/settings_translation_file.cpp
msgid "Third of 4 2D noises that together define hill/mountain range height."
@@ -6372,7 +6749,6 @@ msgid "Trilinear filtering"
msgstr "Trilineer filtreleme"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"True = 256\n"
"False = 128\n"
@@ -6421,6 +6797,10 @@ msgid "Upper Y limit of dungeons."
msgstr "Zindanların üst Y sınırı."
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr "Yüzenkaraların üst Y sınırı."
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "Düz yerine 3D bulut görünümünü kullanın."
@@ -6442,7 +6822,7 @@ msgid ""
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
-"Dokuları boyutlandırmak için mip haritalama kullan. Özellikle yüksek\n"
+"Dokuları boyutlandırmak için mip haritalama kullan. Özellikle yüksek\n"
"çözünürlüklü bir doku paketi kullanırken, performans biraz artabilir.\n"
"Gamma doğruluklu küçültme desteklenmez."
@@ -6555,13 +6935,12 @@ msgid "Volume"
msgstr "Ses"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
-"Paralaks oklüzyon eşlemeyi etkinleştirir.\n"
-"Gölgelemelerin etkin olmasını gerektirir."
+"Tüm seslerin yüksekliği.\n"
+"Ses sistemi etkin kılınmalıdır."
#: src/settings_translation_file.cpp
msgid ""
@@ -6607,24 +6986,20 @@ msgid "Waving leaves"
msgstr "Dalgalanan yapraklar"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
-msgstr "Dalgalanan Sıvılar"
+msgstr "Dalgalanan sıvılar"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Dalgalanan su dalga yüksekliği"
+msgstr "Dalgalanan sıvılar dalga yüksekliği"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
-msgstr "Dalgalanan su dalga hızı"
+msgstr "Dalgalanan sıvılar dalga hızı"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "Dalgalanan su dalga boyu"
+msgstr "Dalgalanan sıvılar dalga-boyu"
#: src/settings_translation_file.cpp
msgid "Waving plants"
@@ -6679,14 +7054,14 @@ msgstr ""
"olarak da kullanılır."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Whether FreeType fonts are used, requires FreeType support to be compiled "
"in.\n"
"If disabled, bitmap and XML vectors fonts are used instead."
msgstr ""
"Freetype yazı tiplerinin kullanılıp kullanılmayacağını, freetype desteği ile "
-"derlenmiş olması gerekir."
+"derlenmiş olmalıdır.\n"
+"Devre dışı kılınırsa, yerine bitmap ve XML vektör yazı tipleri kullanılır."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -6730,6 +7105,10 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Seslerin kısılıp kısılmayacağı. Ses sistemi devre dışı değilse \n"
+"(enable_sound = false) sesleri istediğiniz zaman açabilirsiniz.\n"
+"Oyunda, ses kısma durumunu, ses kısma tuşuyla veya duraklatma menüsünü\n"
+"kullanarak belirleyebilirsiniz."
#: src/settings_translation_file.cpp
msgid ""
@@ -6781,6 +7160,7 @@ msgstr ""
"Ancak sunucu istediğiniz boyutu göndermeyebilir, özellikle de özel\n"
"tasarlanmış bir doku paketi kullanıyorsanız; bu seçenekle, istemci\n"
"doku boyutunu temel alarak boyutu kendiliğinden belirlemeye çalışır.\n"
+"Ayrıca bakın: texture_min_size\n"
"Uyarı: Bu seçenek DENEYSELdir!"
#: src/settings_translation_file.cpp
@@ -6808,6 +7188,18 @@ msgid "Y-distance over which caverns expand to full size."
msgstr "Oyukların üstünden tam boyuta uzanacağı Y-uzaklığı."
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+"Yüzenkaraların tam yoğunluktan hiçliğe konikleştiği Y-uzaklığı.\n"
+"Konikleşme Y sınırından bu uzaklıkta başlar.\n"
+"Katı bir yüzenkara katmanı için tepelerin/dağların yüksekliğini denetler.\n"
+"Y sınırları arasındaki uzaklığın yarısına eşit veya az olmalıdır."
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "Ortalama arazi yüzeyinin Y-seviyesi."
@@ -6906,18 +7298,6 @@ msgstr "cURL zaman aşımı"
#~ msgid "Floatland mountain height"
#~ msgstr "Yüzenkara dağ yüksekliği"
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "Yüzenkara dağ eksponenti"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "Yüzenkara dağ yoğunluğu"
-
-#~ msgid "Floatland level"
-#~ msgstr "Yüzenkara seviyesi"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "Yüzenkara taban gürültüsü"
-
#~ msgid "Floatland base height noise"
#~ msgstr "Yüzenkara taban yükseklik gürültüsü"
@@ -6974,3 +7354,21 @@ msgstr "cURL zaman aşımı"
#~ "Işık tabloları için gama kodlamayı ayarlayın. Daha yüksek sayılar daha "
#~ "aydınlıktır.\n"
#~ "Bu ayar yalnızca istemci içindir ve sunucu tarafından yok sayılır."
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "Ekran yakalamaların kaydedileceği konum."
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "Paralaks oklüzyon gücü"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "Diskte emerge sıralarının sınırı"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "$1 indiriliyor ve kuruluyor, lütfen bekleyin..."
+
+#~ msgid "Back"
+#~ msgstr "Geri"
+
+#~ msgid "Ok"
+#~ msgstr "Tamam"
diff --git a/po/uk/minetest.po b/po/uk/minetest.po
index ccf12fa8b..a87362951 100644
--- a/po/uk/minetest.po
+++ b/po/uk/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Ukrainian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2019-11-27 20:04+0000\n"
-"Last-Translator: Fixer <artem.brz@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-26 10:41+0000\n"
+"Last-Translator: Maksim Gamarnik <MoNTE48@mail.ua>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/minetest/"
"minetest/uk/>\n"
"Language: uk\n"
@@ -13,7 +13,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 3.10-dev\n"
+"X-Generator: Weblate 4.2-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -23,6 +23,10 @@ msgstr "ПереродитиÑÑ"
msgid "You died"
msgstr "Ви загинули"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "ОК"
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "ТрапилаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° у Lua Ñкрипті:"
@@ -36,10 +40,6 @@ msgid "Main menu"
msgstr "Головне меню"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "Добре"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "Повторне підключеннÑ"
@@ -116,6 +116,10 @@ msgstr ""
"Ñимволи. ДозволÑєтьÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ñ‚Ð°ÐºÐ¸Ñ… Ñимволів: [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "Знайти Більше Модів"
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Мод:"
@@ -161,16 +165,16 @@ msgid "All packages"
msgstr "Ð’ÑÑ– пакунки"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Ðазад"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Ðазад в Головне Меню"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $1, зачекайте..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "ContentDB не Ñ” доÑтупним коли Minetest не міÑтить підтримку cURL"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "ЗавантаженнÑ..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -215,15 +219,52 @@ msgstr "Видалити"
msgid "Update"
msgstr "Оновити"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr "Вид"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr "Світ з такою назвою \"$1\" вже Ñ–Ñнує"
+msgstr "Світ з такою назвою \"$1\" вже Ñ–Ñнує"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "Додаткова міÑцевіÑть"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "ВиÑота Ñнігового поÑÑу"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "ПоÑÑ Ð¿Ð¾Ñухи"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "Ð—Ð¼Ñ–ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ñ–Ð¾Ð¼Ñ–Ð²"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "Біоми"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "Печери"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "Печери"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Створити"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "ІнформаціÑ"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "Завантажте гру, наприклад, Minetest Game з minetest.net"
@@ -231,25 +272,145 @@ msgstr "Завантажте гру, наприклад, Minetest Game з minete
msgid "Download one from minetest.net"
msgstr "Завантажте з minetest.net"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr "ПідземеллÑ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "Рівнина"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "Плаваючі земельні маÑиви в небі"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "ВиÑÑчі оÑтрови"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "Гра"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "Генерувати нефрактальну міÑцевіÑть: Океани та підземеллÑ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "Пагорби"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "Вологі ріки"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "Підвищує вологіÑть навколо річок"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "Озера"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "Ðизька вологіÑть Ñ– велика Ñпека ÑпричинÑють мілководні або Ñухі річки"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "Генератор Ñвіту"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Прапори Генератору Ñвіту"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "ВлаÑтивоÑті генератору Ñвіту"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "Гори"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "ГрÑзьовий потік"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "Мережа тунелів і печер"
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "Гру не вибрано"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "Зменшує тепло з виÑотою"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "Зменшує вологіÑть з виÑотою"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "Річки"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "Річки Ð Ñ–Ð²Ð½Ñ Ð¼Ð¾Ñ€Ñ"
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "Зерно"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr "Плавний перехід між біомами"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "Споруди, що з’ÑвлÑютьÑÑ Ð½Ð° міÑцевоÑті, зазвичай дерева та роÑлини"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "Помірний, пуÑтелÑ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "Помірного ПоÑÑу, ПуÑтелі, Джунглі"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "Глибина великих печер"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "Увага: мінімальна теÑтова верÑÑ–Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð° Ð´Ð»Ñ Ñ€Ð¾Ð·Ñ€Ð¾Ð±Ð½Ð¸ÐºÑ–Ð²."
#: builtin/mainmenu/dlg_create_world.lua
@@ -384,35 +545,46 @@ msgstr "Ð¥"
#: 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".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "ÐбÑ. величина"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr "Стандартно"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+msgstr "полегшений"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
@@ -553,6 +725,10 @@ msgid "Host Server"
msgstr "Сервер"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "Ім'Ñ/Пароль"
@@ -620,6 +796,7 @@ msgstr "Ім'Ñ / Пароль"
msgid "Ping"
msgstr "Пінг"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "Бої увімкнено"
@@ -864,9 +1041,17 @@ msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл паролю: "
msgid "Provided world path doesn't exist: "
msgstr "Вказаний шлÑÑ… до Ñвіту не Ñ–Ñнує: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
-msgstr ""
+msgstr "no"
#: src/client/game.cpp
msgid ""
@@ -900,6 +1085,7 @@ msgstr "- Порт: "
msgid "- Public: "
msgstr "- Публічний: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP (бої): "
@@ -1198,6 +1384,14 @@ msgid "Sound muted"
msgstr "Звук вимкнено"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Звук увімкнено"
@@ -1229,7 +1423,7 @@ msgstr "Показ трикутників"
msgid "Zoom currently disabled by game or mod"
msgstr "ÐÐ°Ð±Ð»Ð¸Ð¶ÐµÐ½Ð½Ñ (бінокль) вимкнено грою або модифікацією"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "гаразд"
@@ -1350,6 +1544,7 @@ msgstr "Лівий Shift"
msgid "Left Windows"
msgstr "Лівий Win"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "Меню"
@@ -1423,16 +1618,17 @@ msgid "Numpad 9"
msgstr "Num 9"
#: src/client/keycode.cpp
+#, fuzzy
msgid "OEM Clear"
-msgstr "OEM Clear"
+msgstr "ПочиÑтити OEM"
#: src/client/keycode.cpp
msgid "Page down"
-msgstr ""
+msgstr "Сторінка вниз"
#: src/client/keycode.cpp
msgid "Page up"
-msgstr ""
+msgstr "Сторінка вгору"
#: src/client/keycode.cpp
msgid "Pause"
@@ -1442,6 +1638,7 @@ msgstr "Пауза"
msgid "Play"
msgstr "Грати"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "Print Screen"
@@ -1478,6 +1675,7 @@ msgstr "Правий Win"
msgid "Scroll Lock"
msgstr "Scroll Lock"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "Обрати"
@@ -1719,10 +1917,15 @@ msgstr "Звук вимкнено"
msgid "Sound Volume: "
msgstr "ГучніÑть звуку: "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "Ввід "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "uk"
@@ -1815,6 +2018,10 @@ msgid "3D mode"
msgstr "3D режим"
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1825,6 +2032,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1873,7 +2088,7 @@ msgid "ABM interval"
msgstr "Інтервал ABM"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1918,6 +2133,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "Додатково"
@@ -1931,10 +2156,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2107,8 +2328,8 @@ msgstr "Бамп-маппінг"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2186,10 +2407,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "Розмір шрифту"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Чат"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "Чат"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2458,6 +2689,11 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "Стандартна гра"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2766,6 +3002,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2876,6 +3122,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "Кнопка Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ¾Ñ‚Ñƒ"
@@ -2929,6 +3203,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4225,14 +4505,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4296,6 +4568,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4362,7 +4638,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4447,44 +4725,46 @@ msgid "Mapgen Valleys specific flags"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Mapgen debug"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
+msgstr "ÐÐ°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ— Ñвіту"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Mapgen name"
-msgstr ""
+msgstr "Ðазва генерації Ñвіту"
#: src/settings_translation_file.cpp
msgid "Max block generate distance"
-msgstr ""
+msgstr "МакÑимальна відÑтань генерації блоків"
#: src/settings_translation_file.cpp
msgid "Max block send distance"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Max liquids processed per step."
-msgstr ""
+msgstr "МакÑимальна кількіÑть рідин, оброблених на крок."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Max. packets per iteration"
-msgstr ""
+msgstr "МакÑимальна кількіÑть пакетів за одну ітерацію"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum FPS"
-msgstr ""
+msgstr "МакÑимальна кількіÑть кадрів в Ñекунду (FPS)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum FPS when game is paused."
-msgstr ""
+msgstr "МакÑимум FPS при паузі."
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -4522,13 +4802,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4613,6 +4893,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "Мінімапа"
@@ -4719,7 +5003,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4771,9 +5055,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4850,10 +5131,6 @@ msgid "Parallax occlusion scale"
msgstr "Ступінь паралакÑової оклюзії"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4863,7 +5140,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4897,6 +5176,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "Фізика"
@@ -4966,6 +5253,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5408,6 +5707,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5430,6 +5736,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5441,15 +5751,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5566,7 +5886,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5708,7 +6028,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Unlimited player transfer distance"
-msgstr ""
+msgstr "Ðеобмежена відÑтань передачі гравцÑ"
#: src/settings_translation_file.cpp
msgid "Unload unused server data"
@@ -5716,6 +6036,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Upper Y limit of dungeons."
+msgstr "Ð’ÐµÑ€Ñ…Ð½Ñ Ð¼ÐµÐ¶Ð° Ñ€ підземель."
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6042,6 +6366,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6055,11 +6387,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Y-level of lower terrain and seabed."
-msgstr ""
+msgstr "Y-Рівень нижнього рельєфу та морÑького дна."
#: src/settings_translation_file.cpp
msgid "Y-level of seabed."
-msgstr ""
+msgstr "Y-Рівень морÑького дна."
#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
@@ -6090,3 +6422,12 @@ msgstr ""
#~ msgid "Enable VBO"
#~ msgstr "Увімкнути VBO"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $1, зачекайте..."
+
+#~ msgid "Back"
+#~ msgstr "Ðазад"
+
+#~ msgid "Ok"
+#~ msgstr "Добре"
diff --git a/po/vi/minetest.po b/po/vi/minetest.po
index 29e68265a..f2574e132 100644
--- a/po/vi/minetest.po
+++ b/po/vi/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Vietnamese (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2020-01-11 18:26+0000\n"
-"Last-Translator: rubenwardy <rubenwardy@gmail.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\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/"
"minetest/vi/>\n"
"Language: vi\n"
@@ -12,7 +12,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 3.10.1\n"
+"X-Generator: Weblate 4.1-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,10 +22,13 @@ msgstr "Hồi sinh"
msgid "You died"
msgstr "Bạn đã chết"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "Äã xảy ra lá»—i trong tập lệnh Lua, chẳng hạn như mod:"
+msgstr "Äã xảy ra lá»—i trong tập lệnh Lua:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -33,11 +36,7 @@ msgstr "Xảy ra lỗi:"
#: builtin/fstk/ui.lua
msgid "Main menu"
-msgstr "Thực đơn chính"
-
-#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "ÄÆ°á»£c"
+msgstr "Trình đơn chính"
#: builtin/fstk/ui.lua
msgid "Reconnect"
@@ -49,7 +48,7 @@ msgstr "Máy chủ đã yêu cầu kết nối lại:"
#: builtin/mainmenu/common.lua src/client/game.cpp
msgid "Loading..."
-msgstr "Tải..."
+msgstr "Äang tải..."
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -116,6 +115,10 @@ msgstr ""
"các ký tự [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
@@ -164,16 +167,17 @@ msgid "All packages"
msgstr "Tất cả các gói"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
+msgid "Back to Main Menu"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back to Main Menu"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr ""
+#, fuzzy
+msgid "Downloading..."
+msgstr "Äang tải..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -218,15 +222,51 @@ msgstr ""
msgid "Update"
msgstr ""
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
@@ -234,25 +274,143 @@ msgstr ""
msgid "Download one from minetest.net"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr ""
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -403,14 +561,25 @@ msgstr ""
msgid "Z spread"
msgstr ""
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr ""
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr ""
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr ""
@@ -552,6 +721,10 @@ msgid "Host Server"
msgstr ""
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr ""
@@ -619,6 +792,7 @@ msgstr ""
msgid "Ping"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr ""
@@ -863,6 +1037,14 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr ""
@@ -897,6 +1079,7 @@ msgstr ""
msgid "- Public: "
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr ""
@@ -1169,6 +1352,14 @@ msgid "Sound muted"
msgstr ""
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr ""
@@ -1200,7 +1391,7 @@ msgstr ""
msgid "Zoom currently disabled by game or mod"
msgstr ""
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr ""
@@ -1321,6 +1512,7 @@ msgstr ""
msgid "Left Windows"
msgstr ""
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr ""
@@ -1413,6 +1605,7 @@ msgstr ""
msgid "Play"
msgstr ""
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr ""
@@ -1449,6 +1642,7 @@ msgstr ""
msgid "Scroll Lock"
msgstr ""
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr ""
@@ -1683,10 +1877,15 @@ msgstr ""
msgid "Sound Volume: "
msgstr ""
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr ""
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "vi"
@@ -1770,6 +1969,10 @@ msgid "3D mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
msgstr ""
@@ -1780,6 +1983,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr ""
@@ -1828,7 +2039,7 @@ msgid "ABM interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+msgid "Absolute limit of queued blocks to emerge"
msgstr ""
#: src/settings_translation_file.cpp
@@ -1873,6 +2084,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -1886,10 +2107,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Altitude chill"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""
@@ -2060,8 +2277,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2139,10 +2356,18 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr ""
@@ -2408,6 +2633,10 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2716,6 +2945,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""
@@ -2825,6 +3064,34 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""
@@ -2878,6 +3145,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -4173,14 +4446,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4244,6 +4509,10 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""
@@ -4310,7 +4579,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4398,10 +4669,6 @@ msgid "Mapgen debug"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""
@@ -4469,13 +4736,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4560,6 +4827,10 @@ msgid "Method used to highlight selected object."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""
@@ -4666,7 +4937,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4718,9 +4989,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4797,10 +5065,6 @@ msgid "Parallax occlusion scale"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -4810,7 +5074,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4844,6 +5110,14 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""
@@ -4912,6 +5186,18 @@ msgid "Profiling"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5350,6 +5636,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5372,6 +5665,10 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr ""
@@ -5383,15 +5680,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
+msgid "Strict protocol checking"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strict protocol checking"
+msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strip color codes"
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5508,7 +5815,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5661,6 +5968,10 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr ""
@@ -5980,6 +6291,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6010,3 +6329,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL timeout"
msgstr ""
+
+#~ msgid "Ok"
+#~ msgstr "ÄÆ°á»£c"
diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po
index 5d3c2a95b..80f2d86fa 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: 2020-01-16 05:21+0000\n"
-"Last-Translator: IFRFSX <1079092922@qq.com>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-06-13 21:08+0000\n"
+"Last-Translator: ferrumcccp <wushuzhen1975@icloud.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"minetest/minetest/zh_Hans/>\n"
"Language: zh_CN\n"
@@ -12,7 +12,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 3.11-dev\n"
+"X-Generator: Weblate 4.1-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,6 +22,10 @@ msgstr "é‡ç”Ÿ"
msgid "You died"
msgstr "您已死亡"
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua 脚本å‘生错误:"
@@ -35,10 +39,6 @@ msgid "Main menu"
msgstr "主èœå•"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "确定"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "釿–°è¿žæŽ¥"
@@ -86,7 +86,7 @@ msgstr "å–æ¶ˆ"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr "ä¾èµ–:"
+msgstr "ä¾èµ–项:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
@@ -111,12 +111,16 @@ msgid ""
msgstr "无法å¯ç”¨ mod \"$1\"ï¼šå› ä¸ºåŒ…å«æœ‰ä¸æ”¯æŒçš„字符。åªå…许 [a-z0-9_] 字符。"
#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr "æ— (å¯é€‰)ä¾èµ–项:"
+msgstr "æ— (å¯é€‰)ä¾èµ–项"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
@@ -124,19 +128,19 @@ msgstr "未æä¾›æ¸¸æˆæè¿°ã€‚"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "æ— ä¾èµ–项."
+msgstr "æ— ä¾èµ–项"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "未æä¾›mod 包æè¿°ã€‚"
+msgstr "未æä¾› mod 包æè¿°ã€‚"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr "æ— å¯é€‰ä¾èµ–项:"
+msgstr "æ— å¯é€‰ä¾èµ–项"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr "å¯é€‰ä¾èµ–:"
+msgstr "å¯é€‰ä¾èµ–项:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
@@ -153,19 +157,20 @@ msgstr "å¯ç”¨"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
-msgstr "全部包"
-
-#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "åŽé€€"
+msgstr "所有包"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "返回主èœå•"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "正在下载和安装 $1,请ç¨ç­‰..."
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Downloading..."
+msgstr "载入中..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -174,7 +179,7 @@ msgstr "下载 $1 失败"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
-msgstr "游æˆ"
+msgstr "å­æ¸¸æˆ"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install"
@@ -210,15 +215,57 @@ msgstr "å¸è½½"
msgid "Update"
msgstr "æ›´æ–°"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "å为 \"$1\" 的世界已ç»å­˜åœ¨"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "高地寒冷"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "高地寒冷"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "生物群系噪声"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "生物群系噪声"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "大型洞穴噪声"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "八音"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "创建"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Decorations"
+msgstr "迭代"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr "从 minetest.net ä¸‹è½½ä¸€ä¸ªå­æ¸¸æˆï¼Œä¾‹å¦‚ minetest_game"
@@ -226,26 +273,153 @@ msgstr "从 minetest.net ä¸‹è½½ä¸€ä¸ªå­æ¸¸æˆï¼Œä¾‹å¦‚ minetest_game"
msgid "Download one from minetest.net"
msgstr "从 minetest.net 下载一个"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "地窖噪声"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "水级别"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "游æˆ"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "视频驱动程åº"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "地图生æˆå™¨"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "地图生æˆå™¨æ ‡å¿—"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "地图生æˆå™¨ v5 标签"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mountains"
+msgstr "山噪声"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
msgstr "未选择游æˆ"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "æ²³æµå¤§å°"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
msgstr "ç§å­"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
-msgstr "警告: 最å°åŒ–开呿µ‹è¯•是为开å‘者æä¾›ã€‚"
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "地形高度"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "æ²³æµæ·±åº¦"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
+msgstr "警告: 最å°åŒ–开呿µ‹è¯•是为开å‘者æä¾›çš„。"
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -257,7 +431,7 @@ msgstr "ä½ æ²¡æœ‰å®‰è£…ä»»ä½•å­æ¸¸æˆã€‚"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "你确认è¦åˆ é™¤â€œ$1â€ï¼Ÿ"
+msgstr "你确认è¦åˆ é™¤â€œ$1â€å—?"
#: builtin/mainmenu/dlg_delete_content.lua
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
@@ -271,7 +445,7 @@ msgstr "pkgmgr:无法删除“$1â€"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr "MOD 管ç†å™¨ï¼šMOD 路径 “$1†无效"
+msgstr "pkgmgr:MOD 路径 “$1†无效"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
@@ -298,7 +472,7 @@ msgstr "(没有关于此设置的信æ¯)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr "2D é™å™ª"
+msgstr "2D 噪声"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -310,15 +484,15 @@ msgstr "æµè§ˆ"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Disabled"
-msgstr "å·²ç¦ç”¨"
+msgstr "ç¦ç”¨"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
-msgstr "设置"
+msgstr "编辑"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
-msgstr "å·²å¯ç”¨"
+msgstr "å¯ç”¨"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
@@ -333,21 +507,20 @@ msgid "Offset"
msgstr "è¡¥å¿"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
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"
-msgstr "回å¤åˆå§‹è®¾ç½®"
+msgstr "æ¢å¤åˆå§‹è®¾ç½®"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
@@ -363,7 +536,7 @@ msgstr "选择文件"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Show technical names"
-msgstr "显示高级设置"
+msgstr "显示高级åç§°"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
@@ -397,14 +570,25 @@ msgstr "Z"
msgid "Z spread"
msgstr "z 点差"
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
msgstr "ç»å¯¹å€¼"
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
msgstr "默认值"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
msgstr "缓解"
@@ -415,31 +599,31 @@ msgstr "$1 å·²å¯ç”¨"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr "$1 模组"
+msgstr "$1 mod"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "安装 $1 到 $2 失败"
+msgstr "无法把$1安装到$2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "安装MOD:无法找到$1的真实MODåç§°"
+msgstr "安装mod:无法找到$1的真实modåç§°"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
-msgstr "安装MOD:无法找到MOD包$1çš„åˆé€‚文件夹å"
+msgstr "安装mod:无法找到mod包$1çš„åˆé€‚文件夹å"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "安装MOD:“$1â€œä¸ºä¸æ”¯æŒçš„æ–‡ä»¶ç±»åž‹æˆ–å·²æŸå"
+msgstr "安装:“$1â€œä¸ºä¸æ”¯æŒçš„æ–‡ä»¶ç±»åž‹æˆ–å·²æŸå"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install: file: \"$1\""
-msgstr "安装MOD:文件:â€$1“"
+msgstr "安装:文件:â€$1“"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr "安装MOD:无法为MOD包$1找到åˆé€‚的文件夹å"
+msgstr "无法找到mod或mod包"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
@@ -447,7 +631,7 @@ msgstr "无法将$1安装为æè´¨åŒ…"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
-msgstr "无法将$1安装为游æˆåŒ…"
+msgstr "无法将$1å®‰è£…ä¸ºå­æ¸¸æˆ"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
@@ -466,13 +650,12 @@ msgid "Content"
msgstr "内容"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Disable Texture Pack"
-msgstr "ç¦ç”¨çº¹ç†åŒ…"
+msgstr "ç¦ç”¨æè´¨åŒ…"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr "MODä¿¡æ¯ï¼š"
+msgstr "ä¿¡æ¯ï¼š"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
@@ -480,19 +663,19 @@ msgstr "已安装包:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr "æ— ä¾èµ–关系."
+msgstr "æ— ä¾èµ–项。"
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr "该MOD没有æè¿°ä¿¡æ¯"
+msgstr "该包无æè¿°ä¿¡æ¯"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
-msgstr "改å"
+msgstr "é‡å‘½å"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr "删除选中的MOD"
+msgstr "删除包"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
@@ -520,7 +703,7 @@ msgstr "剿 ¸å¿ƒå¼€å‘者"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr "å‘布æœåС噍"
+msgstr "公开æœåС噍"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
@@ -536,7 +719,7 @@ msgstr "创造模å¼"
#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_simple_main.lua
msgid "Enable Damage"
-msgstr "å¼€å¯ä¼¤å®³é£Žé™©"
+msgstr "å¼€å¯ä¼¤å®³"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
@@ -547,8 +730,12 @@ msgid "Host Server"
msgstr "建立æœåС噍"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
-msgstr "åå­—/密ç "
+msgstr "用户å/密ç "
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -592,7 +779,7 @@ msgstr "创造模å¼"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Damage enabled"
-msgstr "å¯ç”¨ä¼¤å®³"
+msgstr "伤害已å¯ç”¨"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Del. Favorite"
@@ -612,8 +799,9 @@ msgstr "用户å/密ç "
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Ping"
-msgstr "检测"
+msgstr "应答速度"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "å¯ç”¨çŽ©å®¶å¯¹æˆ˜"
@@ -644,7 +832,7 @@ msgstr "抗锯齿:"
#: builtin/mainmenu/tab_settings.lua
msgid "Are you sure to reset your singleplayer world?"
-msgstr "你确定è¦é‡ç½®æ‚¨çš„å•人世界å—?"
+msgstr "你确定è¦é‡ç½®ä½ çš„å•人世界å—?"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
@@ -664,15 +852,15 @@ msgstr "更改键ä½è®¾ç½®"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr "连接的玻璃"
+msgstr "连通玻璃"
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr "åŽä¸½çš„æ ‘å¶"
+msgstr "åŽä¸½æ ‘å¶"
#: builtin/mainmenu/tab_settings.lua
msgid "Generate Normal Maps"
-msgstr "ç”Ÿæˆæ™®é€šåœ°å›¾"
+msgstr "ç”Ÿæˆæ³•线贴图"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
@@ -680,7 +868,7 @@ msgstr "Mip 贴图"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
-msgstr "Mip 贴图 + Aniso 过滤"
+msgstr "Mip 贴图 + å„å‘异性过滤"
#: builtin/mainmenu/tab_settings.lua
msgid "No"
@@ -696,7 +884,7 @@ msgstr "无 Mip 贴图"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr "节点高亮"
+msgstr "æ–¹å—高亮"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
@@ -708,15 +896,15 @@ msgstr "æ— "
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
-msgstr "ä¸é€æ˜Žçš„æ ‘å¶"
+msgstr "ä¸é€æ˜Žæ ‘å¶"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
-msgstr "ä¸é€æ˜Žçš„æ°´"
+msgstr "ä¸é€æ˜Žæ°´"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Parallax Occlusion"
-msgstr "视差贴图"
+msgstr "视差é®è”½"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
@@ -728,7 +916,7 @@ msgstr "é‡ç½®å•人世界"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr "截图:"
+msgstr "å±å¹•:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
@@ -744,7 +932,7 @@ msgstr "ç€è‰²å™¨ (ä¸å¯ç”¨)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
-msgstr "简å•的树å¶"
+msgstr "ç®€å•æ ‘å¶"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
@@ -764,7 +952,7 @@ msgstr "色调映射"
#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold: (px)"
-msgstr "触控阈值(px)"
+msgstr "触控阈值:(px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
@@ -772,7 +960,7 @@ msgstr "三线性过滤"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr "飘动的树å¶"
+msgstr "飘动树å¶"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
@@ -780,7 +968,7 @@ msgstr "摇动æµä½“"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr "摇摆的æ¤ç‰©"
+msgstr "摇摆æ¤ç‰©"
#: builtin/mainmenu/tab_settings.lua
msgid "Yes"
@@ -788,11 +976,11 @@ msgstr "是"
#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
-msgstr "é…ç½® MOD"
+msgstr "é…ç½® mod"
#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
-msgstr "主è¦"
+msgstr "主èœå•"
#: builtin/mainmenu/tab_simple_main.lua
msgid "Start Singleplayer"
@@ -808,11 +996,11 @@ 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..."
@@ -820,7 +1008,7 @@ msgstr "载入æè´¨..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr "é‡å»ºæ¸²æŸ“器..."
+msgstr "é‡å»ºç€è‰²å™¨..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
@@ -832,7 +1020,7 @@ msgstr "æ— æ³•æ‰¾åˆ°æˆ–è€…è½½å…¥æ¸¸æˆ \""
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr "éžæ³•æ¸¸æˆæ¨¡å¼è§„格。"
+msgstr "éžæ³•游æˆä¿¡æ¯ã€‚"
#: src/client/clientlauncher.cpp
msgid "Main Menu"
@@ -840,15 +1028,15 @@ msgstr "主èœå•"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr "没有选择世界或æä¾›åœ°å€ã€‚未执行æ“作。"
+msgstr "没有选择世界或æä¾›åœ°å€ã€‚æ— å¯ç”¨æ“作。"
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr "玩家å称太长了。"
+msgstr "玩家å称过长。"
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr "请选择游æˆï¼"
+msgstr "请选择åç§°ï¼"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
@@ -858,6 +1046,14 @@ msgstr "æä¾›çš„å¯†ç æ–‡ä»¶æ— æ³•打开: "
msgid "Provided world path doesn't exist: "
msgstr "æä¾›çš„世界路径ä¸å­˜åœ¨: "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -872,7 +1068,7 @@ msgstr ""
#: src/client/game.cpp
msgid "- Address: "
-msgstr "-绑定地å€: "
+msgstr "- 地å€ï¼š "
#: src/client/game.cpp
msgid "- Creative Mode: "
@@ -894,9 +1090,10 @@ msgstr "- 端å£: "
msgid "- Public: "
msgstr "- 公共æœåС噍: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr "- 多人: "
+msgstr "- 玩家对战: "
#: src/client/game.cpp
msgid "- Server Name: "
@@ -904,19 +1101,19 @@ 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"
@@ -967,8 +1164,8 @@ msgstr ""
"- %s:å‘å³ç§»åЍ\n"
"- %s:跳/爬\n"
"- %s:潜行/å‘下\n"
-"- %s:丢物å“\n"
-"- %sï¼šç‰©å“æ \n"
+"- %s:丢弃物å“\n"
+"- %sï¼šç‰©å“æ¸…å•\n"
"- 鼠标:转身/环顾\n"
"- 鼠标左键: 挖/打\n"
"- é¼ æ ‡å³é”®: 放/使用\n"
@@ -985,15 +1182,15 @@ msgstr "建立æœåС噍...."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr "éšè—的调试信æ¯å’Œ Profiler 图"
+msgstr "éšè—的调试信æ¯å’Œæ€§èƒ½åˆ†æžå›¾"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr "调试信æ¯åˆ‡æ¢é”®"
+msgstr "调试信æ¯å·²æ˜¾ç¤º"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr "éšè—调试信æ¯ï¼ŒProfiler 图,和线框"
+msgstr "éšè—调试信æ¯ï¼Œæ€§èƒ½åˆ†æžå›¾ï¼Œå’Œçº¿æ¡†"
#: src/client/game.cpp
msgid ""
@@ -1041,7 +1238,7 @@ msgstr "退出至æ“作系统"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr "å·²ç¦ç”¨å¿«é€Ÿæ¨¡å¼"
+msgstr "快速模å¼å·²ç¦ç”¨"
#: src/client/game.cpp
msgid "Fast mode enabled"
@@ -1049,27 +1246,27 @@ msgstr "快速移动模å¼å·²å¯ç”¨"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr "快速模å¼å·²å¯ç”¨ï¼ˆæ³¨ï¼šæ—  'fast' 特æƒï¼‰"
+msgstr "快速模å¼å·²å¯ç”¨ï¼ˆæ³¨ï¼šæ—  'fast' æƒé™ï¼‰"
#: src/client/game.cpp
msgid "Fly mode disabled"
-msgstr "关闭飞行模å¼"
+msgstr "飞行模å¼å·²ç¦ç”¨"
#: src/client/game.cpp
msgid "Fly mode enabled"
-msgstr "å¯ç”¨é£žè¡Œæ¨¡å¼"
+msgstr "飞行模å¼å·²å¯ç”¨"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr "å¯ç”¨é£žè¡Œæ¨¡å¼ï¼ˆæ— é£žè¡Œæƒé™ï¼‰"
+msgstr "飞行模å¼å·²å¯ç”¨ï¼ˆæ³¨ï¼šæ—  'fly' æƒé™ï¼‰"
#: src/client/game.cpp
msgid "Fog disabled"
-msgstr "ç¦ç”¨é›¾æ°”"
+msgstr "雾气已ç¦ç”¨"
#: src/client/game.cpp
msgid "Fog enabled"
-msgstr "å¯ç”¨é›¾æ°”"
+msgstr "雾气已å¯ç”¨"
#: src/client/game.cpp
msgid "Game info:"
@@ -1101,7 +1298,7 @@ msgstr "MiB/s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr "å°åœ°å›¾è¢«å½“剿¸¸æˆæˆ–者 mod ç¦ç”¨"
+msgstr "å°åœ°å›¾è¢«å½“å‰å­æ¸¸æˆæˆ–者 mod ç¦ç”¨"
#: src/client/game.cpp
msgid "Minimap hidden"
@@ -1109,39 +1306,39 @@ msgstr "å°åœ°å›¾å·²éšè—"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x1"
-msgstr "é›·è¾¾å°åœ°å›¾ï¼Œæ”¾å¤§ä¸€å€"
+msgstr "é›·è¾¾å°åœ°å›¾ï¼Œæ”¾å¤§è‡³ä¸€å€"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x2"
-msgstr "é›·è¾¾å°åœ°å›¾ï¼Œæ”¾å¤§ä¸€å€"
+msgstr "é›·è¾¾å°åœ°å›¾ï¼Œæ”¾å¤§è‡³ä¸¤å€"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x4"
-msgstr "雷达模å¼çš„å°åœ°å›¾, 放大4å€"
+msgstr "é›·è¾¾å°åœ°å›¾, 放大至四å€"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x1"
-msgstr "地表模å¼çš„å°åœ°å›¾, 放大1å€"
+msgstr "地表模å¼å°åœ°å›¾, 放大至一å€"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x2"
-msgstr "地表模å¼çš„å°åœ°å›¾, 放大2å€"
+msgstr "地表模å¼å°åœ°å›¾, 放大至两å€"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x4"
-msgstr "地表模å¼çš„å°åœ°å›¾, 放大4å€"
+msgstr "地表模å¼å°åœ°å›¾, 放大至四å€"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr "Noclip 模å¼å·²ç¦ç”¨"
+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..."
@@ -1157,15 +1354,15 @@ msgstr "å¼€"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr "Pitch移动模å¼å·²ç¦ç”¨"
+msgstr "俯仰移动模å¼å·²ç¦ç”¨"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr "Pitch移动模å¼å·²ç¦ç”¨"
+msgstr "俯仰移动模å¼å·²ç¦ç”¨"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr "显示Profiler图"
+msgstr "显示性能分æžå›¾"
#: src/client/game.cpp
msgid "Remote server"
@@ -1177,7 +1374,7 @@ msgstr "正在解æžåœ°å€..."
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr "关闭..."
+msgstr "关闭中..."
#: src/client/game.cpp
msgid "Singleplayer"
@@ -1192,6 +1389,14 @@ msgid "Sound muted"
msgstr "å·²é™éŸ³"
#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "已喿¶ˆé™éŸ³"
@@ -1208,7 +1413,7 @@ msgstr "视野范围已达到最大:%d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr "视野已达到最å°ï¼š%d"
+msgstr "视野范围已达到最å°ï¼š%d"
#: src/client/game.cpp
#, c-format
@@ -1217,13 +1422,13 @@ msgstr "éŸ³é‡æ”¹åˆ°%d1%%2"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr "显示线框"
+msgstr "线框已显示"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr "ç¼©æ”¾è¢«å½“å‰æ¸¸æˆæˆ– mod ç¦ç”¨"
+msgstr "缩放被当å‰å­æ¸¸æˆæˆ– mod ç¦ç”¨"
-#: src/client/game.cpp src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "确定"
@@ -1233,24 +1438,24 @@ msgstr "èŠå¤©å·²éšè—"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr "显示èŠå¤©"
+msgstr "èŠå¤©å·²æ˜¾ç¤º"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr "éšè— HUD"
+msgstr "HUD å·²éšè—"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr "显示 HUD"
+msgstr "HUD 已显示"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr "éšè—分æžå™¨"
+msgstr "性能分æžå›¾å·²éšè—"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr "显示Profiler (第 %d 页 共 %d 页)"
+msgstr "性能分æžå›¾å·²æ˜¾ç¤º (第 %d 页 å…± %d 页)"
#: src/client/keycode.cpp
msgid "Apps"
@@ -1344,6 +1549,7 @@ msgstr "å·¦Shifté”®"
msgid "Left Windows"
msgstr "å·¦Windowsé”®"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "èœå•"
@@ -1370,7 +1576,7 @@ msgstr "å°é”®ç›˜-"
#: src/client/keycode.cpp
msgid "Numpad ."
-msgstr "å°é”®ç›˜*。"
+msgstr "å°é”®ç›˜."
#: src/client/keycode.cpp
msgid "Numpad /"
@@ -1436,6 +1642,7 @@ msgstr "Pauseé”®"
msgid "Play"
msgstr "开始游æˆ"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "打å°"
@@ -1472,6 +1679,7 @@ msgstr "å³Windowsé”®"
msgid "Scroll Lock"
msgstr "Scroll Locké”®"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "选择键"
@@ -1537,14 +1745,12 @@ msgid "Proceed"
msgstr "ç»§ç»­"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "\"Special\" = climb down"
-msgstr "“使用†= å‘下爬"
+msgstr "“特殊†= å‘下爬"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Autoforward"
-msgstr "å‘å‰"
+msgstr "自动å‘å‰"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
@@ -1580,11 +1786,11 @@ msgstr "å‡å°éŸ³é‡"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
-msgstr "连按两次“跳â€åˆ‡æ¢é£žè¡Œæ¨¡å¼"
+msgstr "连按两次“跳â€å¯ç”¨/ç¦ç”¨é£žè¡Œæ¨¡å¼"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Drop"
-msgstr "丢出"
+msgstr "丢弃"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Forward"
@@ -1628,7 +1834,7 @@ msgstr "下一个"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
-msgstr "上一个"
+msgstr "上一个物å“"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Range select"
@@ -1644,39 +1850,39 @@ msgstr "潜行"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Special"
-msgstr "特别"
+msgstr "特殊"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
-msgstr "切æ¢HUD"
+msgstr "å¯ç”¨/ç¦ç”¨HUD"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr "èŠå¤©è®°å½•开关"
+msgstr "å¯ç”¨/ç¦ç”¨èŠå¤©è®°å½•"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
-msgstr "切æ¢å¿«é€Ÿç§»åŠ¨æ¨¡å¼"
+msgstr "å¯ç”¨/ç¦ç”¨å¿«é€Ÿç§»åŠ¨æ¨¡å¼"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fly"
-msgstr "切æ¢é£žè¡Œæ¨¡å¼"
+msgstr "å¯ç”¨/ç¦ç”¨é£žè¡Œæ¨¡å¼"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fog"
-msgstr "切æ¢å¿«é€Ÿç§»åЍ"
+msgstr "å¯ç”¨/ç¦ç”¨é›¾"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle minimap"
-msgstr "切æ¢å°åœ°å›¾"
+msgstr "å¯ç”¨/ç¦ç”¨å°åœ°å›¾"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr "切æ¢ç©¿å¢™æ¨¡å¼"
+msgstr "å¯ç”¨/ç¦ç”¨ç©¿å¢™æ¨¡å¼"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle pitchmove"
-msgstr "切æ¢å¿«é€Ÿç§»åŠ¨æ¨¡å¼"
+msgstr "å¯ç”¨/ç¦ç”¨ä»°è§’移动模å¼"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -1710,10 +1916,15 @@ msgstr "é™éŸ³"
msgid "Sound Volume: "
msgstr "音é‡ï¼š "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "输入 "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "zh_CN"
@@ -1727,17 +1938,15 @@ 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 ""
-"(安å“)使用虚拟æ“纵æ†è§¦å‘\"aux\"按钮。 如果å¯ç”¨ï¼Œè™šæ‹Ÿæ“纵æ†åœ¨ä¸»åœ†åœˆå¤–会点击"
-"\"aux\"按钮。"
+"(安å“)使用虚拟æ“纵æ†è§¦å‘\"aux\"按钮。\n"
+"如果å¯ç”¨ï¼Œè™šæ‹Ÿæ“纵æ†åœ¨ä¸»åœ†åœˆå¤–会点击\"aux\"按钮。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -1748,10 +1957,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"
-"范围大约在 -2 至 2 间。乘以节点的å移值。"
+"分形图形è·ä¸–界中心的(X, Y, Z)åç§»\n"
+"以『比例ã€ä¸ºå•ä½ã€‚\n"
+"å¯ç”¨äºŽç§»åŠ¨ç»™å®šç‚¹è‡³ï¼ˆ0, 0)以创建生æˆ\n"
+"ç‚¹ï¼Œæˆ–é€šè¿‡å¢žåŠ ã€Žæ¯”ä¾‹ã€æ¥æ”¾å¤§ç»™å®šç‚¹ã€‚\n"
+"é»˜è®¤å€¼é€‚åˆæ›¼å¾·å°”布罗特集åˆï¼Œè‹¥è¦ç”¨äºŽå…¶\n"
+"他情形则å¯èƒ½éœ€è¦ä¿®æ”¹ã€‚\n"
+"范围大约在 -2 至 2 间。\n"
+"乘以『比例ã€ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -1763,6 +1976,13 @@ 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 ""
@@ -1774,31 +1994,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr ""
+msgstr "控制山脊形状/大å°çš„2D噪声。"
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "控制波状丘陵形状/大å°çš„2D噪声。"
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "控制平缓山形状/大å°çš„2D噪声。"
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
-msgstr ""
+msgstr "控制山脊区域的大å°/频率的2D噪声。"
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "控制波状丘陵的大å°/频率的2D噪声。"
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr ""
+msgstr "控制平缓山的大å°/频率的2D噪声。"
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "ç¡®å®šæ²³è°·åŠæ²³é“ä½ç½®çš„2D噪声。"
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -1809,34 +2029,47 @@ msgid "3D mode"
msgstr "3D 模å¼"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+msgstr "法线贴图强度"
+
+#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
-msgstr "三维噪音定义巨洞."
+msgstr "定义巨型洞穴的3D噪声。"
#: src/settings_translation_file.cpp
msgid ""
"3D noise defining mountain structure and height.\n"
"Also defines structure of floatland mountain terrain."
-msgstr "三维噪音定义山脉结构和高度.也定义冲积平原山丘地形."
+msgstr ""
+"定义山丘结构和高度的3D噪声。\n"
+"也定义悬空岛山丘地形。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
-msgstr "三维噪音定义河谷å£çš„结构."
+msgstr "定义河谷å£çš„结构的3D噪声。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D noise defining terrain."
-msgstr "三维噪音定义巨洞."
+msgstr "定义地形的3D噪声。"
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
-msgstr ""
+msgstr "用于çªå‡ºå´–ã€æ‚¬å´–等的3D噪声。通常å˜åŒ–å°ã€‚"
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "确定æ¯ä¸ªåœ°å›¾å—的地窖数é‡çš„3D噪声。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"3D support.\n"
"Currently supported:\n"
@@ -1851,12 +2084,14 @@ msgid ""
msgstr ""
"3D 支æŒã€‚\n"
"ç›®å‰å·²æ”¯æŒï¼š\n"
-"- 无: 无 3D输出。\n"
-"- 浮雕:é’红/å“红色彩色 3D。\n"
-"- äº¤é”™ï¼šåŸºäºŽåæŒ¯å±çš„奇å¶è¡Œæ”¯æŒã€‚\n"
-"- 顶底:上下分å±ã€‚\n"
-"- 并列:左å³åˆ†å±ã€‚\n"
-"- 翻页:基于 3D 的四é‡ç¼“冲。"
+"- 无(none): 无 3D 输出。\n"
+"- 立体影片(anaglyph):é’红/å“红色彩色 3D。\n"
+"- 交错(interlaced):基于奇å¶è¡Œçš„åæŒ¯å±æ”¯æŒã€‚\n"
+"- 顶底(topbottom):上下分å±ã€‚\n"
+"- 并列(sidebyside):左å³åˆ†å±ã€‚\n"
+"- 内斜视(crossview):内斜视左å³åˆ†å±3D。\n"
+"- 翻页(pageflip):基于四é‡ç¼“冲的 3D。\n"
+"注æ„交错模å¼éœ€è¦å¯ç”¨ç€è‰²å™¨ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -1868,19 +2103,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr "当æœåŠ¡å™¨æŒ‚æŽ‰çš„æ—¶å€™ï¼Œå‘é€ç»™æ‰€æœ‰å®¢æˆ·ç«¯çš„ä¿¡æ¯ã€‚"
+msgstr "当æœåŠ¡å™¨å´©æºƒçš„æ—¶å€™ï¼Œå‘é€ç»™æ‰€æœ‰å®¢æˆ·ç«¯çš„ä¿¡æ¯ã€‚"
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
msgstr "当关闭æœåŠ¡å™¨æ—¶ï¼Œå‘é€ç»™æ‰€æœ‰å®¢æˆ·ç«¯çš„ä¿¡æ¯ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ABM interval"
-msgstr "地图ä¿å­˜é—´éš”"
+msgstr "ABMé—´éš”"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
msgstr "生产队列ç»å¯¹é™åˆ¶"
#: src/settings_translation_file.cpp
@@ -1889,20 +2124,19 @@ 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
-#, fuzzy
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"
@@ -1920,7 +2154,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
-msgstr "æŒ–å—æ—¶æ·»åŠ ç²’å­."
+msgstr "æŒ–æ–¹å—æ—¶æ·»åŠ ç²’å­ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -1929,8 +2163,18 @@ msgid ""
msgstr "为支æŒ4Kç­‰å±å¹•,调节åƒç´ ç‚¹å¯†åº¦ï¼ˆéž X11/Android çŽ¯å¢ƒæ‰æœ‰æ•ˆï¼‰ã€‚"
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
-msgstr "é«˜çº§è”æœºè®¾ç½®"
+msgstr "高级"
#: src/settings_translation_file.cpp
msgid ""
@@ -1940,11 +2184,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-
-#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Altitude chill"
-msgstr "海拔寒冷"
+"通过“gamma修正â€è°ƒæ•´äº®åº¦æ›²çº¿ã€‚\n"
+"更大的gamma值使得低亮度区域更亮。\n"
+"值为'1.0'时亮度曲线。\n"
+"è¿™åªåœ¨ç™½å¤©å’Œäººå·¥å…‰æºä¸‹æœ‰è¾ƒå¤§ä½œç”¨ï¼Œ\n"
+"在夜晚的自然光照下作用很å°ã€‚"
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -1952,16 +2196,15 @@ msgstr "ä¿æŒé«˜é€Ÿé£žè¡Œ"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
-msgstr "环境闭塞伽马"
+msgstr "环境é®è”½gamma"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "æ¯10ç§’å‘é€ç»™çŽ©å®¶çš„æ¶ˆæ¯é‡ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Amplifies the valleys."
-msgstr "放大山谷"
+msgstr "放大山谷。"
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
@@ -1969,41 +2212,41 @@ msgstr "å„å‘异性过滤"
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr "å‘布æœåС噍"
+msgstr "公开æœåС噍"
#: src/settings_translation_file.cpp
-#, fuzzy
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 "æ‰‹è‡‚æƒ¯æ€§ï¼Œä½¿æ‘„åƒæœºç§»åŠ¨æ—¶æ‰‹è‡‚æ›´çœŸå®žåœ°è¿åŠ¨ã€‚"
+msgstr ""
+"æ‰‹è‡‚æƒ¯æ€§ï¼Œä½¿æ‘„åƒæœºç§»åŠ¨æ—¶æ‰‹è‡‚æ—¶\n"
+"更真实地è¿åŠ¨ã€‚"
#: 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"
@@ -2017,23 +2260,24 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
-"在此è·ç¦»ä¸‹, æœåŠ¡å™¨å°†ç§¯æžä¼˜åŒ–将哪些å—å‘é€åˆ°å®¢æˆ·ç«¯ã€‚\n"
-"å°å€¼å¯èƒ½ä¼šæžå¤§åœ°æé«˜æ€§èƒ½, 这会牺牲å¯è§çš„æ¸²æŸ“故障。\n"
-"(有些街区将ä¸ä¼šåœ¨æ°´å’Œæ´žç©´ä¸­, 有时也会在陆地上呈现)\n"
-"将其设置为大于 max_block_send_distance 的值将ç¦ç”¨æ­¤ä¼˜åŒ–。\n"
-"声明在 mapblocks (16 个节点)"
+"在此è·ç¦»ä¸‹ï¼ŒæœåŠ¡å™¨å°†ç§¯æžä¼˜åŒ–将哪些å—å‘é€åˆ°å®¢æˆ·ç«¯ã€‚\n"
+"å°æ•°å€¼å¯èƒ½ä¼šæžå¤§åœ°æé«˜æ€§èƒ½ï¼Œ\n"
+"å´ä¼šé€ æˆå¯è§çš„æ¸²æŸ“故障。\n"
+"(有些方å—å°†ä¸ä¼šåœ¨æ°´å’Œæ´žç©´ä¸­å‘ˆçŽ°ï¼Œ\n"
+"有时在陆地上也ä¸ä¼šå‘ˆçŽ°ï¼‰\n"
+"将其设置为大于 max_block_send_distance 的值\n"
+"å°†ç¦ç”¨æ­¤ä¼˜åŒ–。\n"
+"在 mapblocks中声明(16 个节点)。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatic forward key"
-msgstr "å‰è¿›é”®"
+msgstr "自动å‰è¿›é”®"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
msgstr "自动跳跃一方å—高度。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatically report to the serverlist."
msgstr "自动报告到æœåŠ¡å™¨åˆ—è¡¨ã€‚"
@@ -2050,31 +2294,28 @@ msgid "Backward key"
msgstr "åŽé€€é”®"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Base ground level"
-msgstr "地图生æˆå™¨å¹³åœ°çº§åˆ«"
+msgstr "平地级别"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Base terrain height."
-msgstr "基础地形高度"
+msgstr "基础地形高度。"
#: src/settings_translation_file.cpp
msgid "Basic"
msgstr "基础"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Basic privileges"
msgstr "基本æƒé™"
#: 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"
@@ -2086,39 +2327,35 @@ msgstr "绑定地å€"
#: src/settings_translation_file.cpp
msgid "Biome API temperature and humidity noise parameters"
-msgstr "ç”Ÿç‰©ç¾¤è½ API æ¸©åº¦å’Œæ¹¿åº¦å™ªå£°å‚æ•°"
+msgstr "生物群系 API æ¸©åº¦å’Œæ¹¿åº¦å™ªå£°å‚æ•°"
#: src/settings_translation_file.cpp
msgid "Biome noise"
-msgstr "生æ€å™ªéŸ³"
+msgstr "生物群系噪声"
#: src/settings_translation_file.cpp
msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "免屿¨¡å¼ä¸­çš„ä½ï¼åƒç´ ï¼ˆåˆç§°è‰²å½©æ·±åº¦ï¼‰ã€‚"
+msgstr "免屿¨¡å¼ä¸­çš„使¯åƒç´ ï¼ˆåˆç§°è‰²å½©æ·±åº¦ï¼‰ã€‚"
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
-msgstr ""
+msgstr "最优方å—å‘é€è·ç¦»"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "等宽字体路径"
+msgstr "粗斜体字体路径"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "等宽字体路径"
+msgstr "粗斜体等宽字体路径"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "字体路径"
+msgstr "粗体字体路径"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "等宽字体路径"
+msgstr "粗体等宽字体路径"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2134,11 +2371,15 @@ msgstr "凹凸贴图"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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"
+"大多数用户ä¸éœ€è¦æ›´æ”¹æ­¤è®¾ç½®ã€‚\n"
+"增加å¯ä»¥å‡å°‘较弱GPU上的伪影。\n"
+"0.1 =默认值,0.25 =对于较弱的平æ¿ç”µè„‘æ¥è¯´æ˜¯ä¸é”™çš„值。"
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
@@ -2150,19 +2391,19 @@ 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 "洞穴噪音 #1"
+msgstr "洞穴噪声 #1"
#: src/settings_translation_file.cpp
msgid "Cave noise #2"
-msgstr "洞穴噪音 #2"
+msgstr "洞穴噪声 #2"
#: src/settings_translation_file.cpp
msgid "Cave width"
@@ -2170,38 +2411,39 @@ msgstr "洞穴宽度"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
-msgstr "洞穴1噪音"
+msgstr "洞穴1噪声"
#: src/settings_translation_file.cpp
msgid "Cave2 noise"
-msgstr "洞穴2噪音"
+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
-#, fuzzy
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 ""
@@ -2212,24 +2454,36 @@ msgid ""
"be\n"
"necessary for smaller screens."
msgstr ""
+"主èœå•UIçš„å˜åŒ–:\n"
+"- 完整 多个å•äººä¸–ç•Œï¼Œå­æ¸¸æˆé€‰æ‹©ï¼Œæè´¨åŒ…选择器等。\n"
+"- 简å•:å•个å•äººä¸–ç•Œï¼Œæ— å­æ¸¸æˆæè´¨åŒ…选择器。å¯èƒ½\n"
+"需è¦ç”¨äºŽå°å±å¹•。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "字体大å°"
#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "èŠå¤©é”®"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat log level"
+msgstr "调试日志级别"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "èŠå¤©æ¶ˆæ¯è®¡æ•°é™åˆ¶"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
-msgstr "èŠå¤©æ¶ˆæ¯æœ€å¤§é•¿åº¦"
+msgstr "èŠå¤©æ¶ˆæ¯æ ¼å¼"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message kick threshold"
-msgstr "èŠå¤©æ¶ˆæ¯è§¦å‘阈值"
+msgstr "èŠå¤©æ¶ˆæ¯è¸¢å‡ºé˜ˆå€¼"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
@@ -2237,7 +2491,7 @@ msgstr "èŠå¤©æ¶ˆæ¯æœ€å¤§é•¿åº¦"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
-msgstr "èŠå¤©åˆ‡æ¢é”®"
+msgstr "èŠå¤©å¯ç”¨/ç¦ç”¨é”®"
#: src/settings_translation_file.cpp
msgid "Chatcommands"
@@ -2257,7 +2511,7 @@ msgstr "电影模å¼é”®"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
-msgstr "干净逿˜Žçº¹ç†"
+msgstr "干净逿˜Žæè´¨"
#: src/settings_translation_file.cpp
msgid "Client"
@@ -2265,20 +2519,19 @@ msgstr "客户端"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr "客户端和æœåС噍"
+msgstr "客户端和æœåŠ¡ç«¯"
#: src/settings_translation_file.cpp
msgid "Client modding"
-msgstr "客户端模组"
+msgstr "客户端mod"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Client side modding restrictions"
-msgstr "客户端模组"
+msgstr "客户端modé™åˆ¶"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
-msgstr ""
+msgstr "å®¢æˆ·ç«¯æ–¹å—æŸ¥è¯¢èŒƒå›´é™åˆ¶"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
@@ -2294,7 +2547,7 @@ msgstr "云彩"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
-msgstr "云是客户端侧效果。"
+msgstr "云是客户端效果。"
#: src/settings_translation_file.cpp
msgid "Clouds in menu"
@@ -2314,22 +2567,28 @@ msgid ""
"These flags are independent from Minetest versions,\n"
"so see a full list at https://content.minetest.net/help/content_flags/"
msgstr ""
+"逗å·åˆ†éš”用于在仓库中éšè—内容的标签列表。\n"
+"\"nonfree\"å¯ç”¨äºŽéšè—æ ¹æ®è‡ªç”±è½¯ä»¶åŸºé‡‘会\n"
+"ä¸ç¬¦åˆâ€œè‡ªç”±è½¯ä»¶â€æ ‡å‡†çš„包。\n"
+"你也å¯ä»¥ä¸ºä»“库内容指定评分。\n"
+"这些评分独立于Minetest版本,\n"
+"完整列表è§https://content.minetest.net/help/content_flags/"
#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
"allow them to upload and download data to/from the internet."
msgstr ""
-"以逗å·åˆ†éš”的模组清å•,让您å¯ä»¥å­˜å– HTTP API,\n"
-"å…¶å¯ä»Žäº’è”网上传åŠä¸‹è½½èµ„料。"
+"以逗å·åˆ†éš”å¯ä»¥å­˜å– HTTP APIçš„mod列表,\n"
+"这些modå¯ä¸Žäº’è”网交互,上传åŠä¸‹è½½æ•°æ®ã€‚"
#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of trusted mods that are allowed to access insecure\n"
"functions even when mod security is on (via request_insecure_environment())."
msgstr ""
-"å—信任的 Mod 列表,以逗å·åˆ†éš”,其å¯å­˜å–ä¸å®‰å…¨çš„\n"
-"功能,å³ä¾¿ mod 安全性已å¯ç”¨ï¼ˆç»ç”± request_insecure_environment())。"
+"å—信任的 Mod 列表,以逗å·åˆ†éš”,其å¯è®¿é—®ä¸å®‰å…¨çš„\n"
+"函数,å³ä¾¿ mod 安全性已å¯ç”¨ï¼ˆç»ç”± request_insecure_environment())。"
#: src/settings_translation_file.cpp
msgid "Command key"
@@ -2345,11 +2604,11 @@ msgstr "连接到外部媒体æœåС噍"
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
-msgstr "连接玻璃,如果节点支æŒã€‚"
+msgstr "å¦‚æžœæ–¹å—æ”¯æŒåˆ™è¿žé€šçŽ»ç’ƒã€‚"
#: src/settings_translation_file.cpp
msgid "Console alpha"
-msgstr "控制å°é€æ˜Ž"
+msgstr "控制å°é€æ˜Žåº¦"
#: src/settings_translation_file.cpp
msgid "Console color"
@@ -2361,23 +2620,22 @@ msgstr "控制å°é«˜åº¦"
#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
-msgstr ""
+msgstr "ContentDB标签黑åå•"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB URL"
-msgstr "ç»§ç»­"
+msgstr "ContentDB网å€"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
-msgstr "连续å‰è¿›"
+msgstr "自动å‰è¿›"
#: src/settings_translation_file.cpp
msgid ""
"Continuous forward movement, toggled by autoforward key.\n"
"Press the autoforward key again or the backwards movement to disable."
msgstr ""
-"自动å‰è¿›ï¼Œé€šè¿‡è‡ªåЍå‰è¿›é”®åˆ‡æ¢ã€‚\n"
+"自动å‰è¿›ï¼Œé€šè¿‡è‡ªåЍå‰è¿›é”®å¯ç”¨/ç¦ç”¨ã€‚\n"
"冿¬¡æŒ‰ä¸‹è‡ªåЍå‰è¿›é”®æˆ–åŽé€€ä»¥å…³é—­ã€‚"
#: src/settings_translation_file.cpp
@@ -2396,7 +2654,7 @@ msgstr ""
#: 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."
@@ -2412,6 +2670,9 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"控制洞穴通é“宽度,设置较å°å€¼ä»¥åˆ›å»ºè¾ƒå®½é€šé“。\n"
+"值>=10.0则完全关闭通é“生æˆï¼Œé¿å…大é‡å™ªå£°\n"
+"计算。"
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2419,23 +2680,23 @@ msgstr "崩溃信æ¯"
#: src/settings_translation_file.cpp
msgid "Creative"
-msgstr "创建"
+msgstr "创造"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
-msgstr "å字逿˜Ž"
+msgstr "å‡†æ˜Ÿé€æ˜Ž"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha (opaqueness, between 0 and 255)."
-msgstr "å字线ä¸é€æ˜Žåº¦ï¼ˆ0-255)。"
+msgstr "准星ä¸é€æ˜Žåº¦ï¼ˆ0-255)。"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
-msgstr "å字颜色"
+msgstr "准星颜色"
#: src/settings_translation_file.cpp
msgid "Crosshair color (R,G,B)."
-msgstr "å字颜色 (红,绿,è“)。"
+msgstr "准星颜色(红,绿,è“)。"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2447,12 +2708,11 @@ msgstr "伤害"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
-msgstr "调试信æ¯åˆ‡æ¢é”®"
+msgstr "调试信æ¯å¯ç”¨/ç¦ç”¨é”®"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Debug log file size threshold"
-msgstr "沙漠噪音阈值"
+msgstr "沙漠噪声阈值"
#: src/settings_translation_file.cpp
msgid "Debug log level"
@@ -2464,7 +2724,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"
@@ -2483,7 +2743,7 @@ msgid ""
"Default game when creating a new world.\n"
"This will be overridden when creating a world from the main menu."
msgstr ""
-"创建新世界时默认游æˆã€‚\n"
+"创建新世界时的默认游æˆã€‚\n"
"从主èœå•创建一个新世界时这将被覆盖。"
#: src/settings_translation_file.cpp
@@ -2499,11 +2759,16 @@ msgid "Default report format"
msgstr "默认报告格å¼"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "默认游æˆ"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
msgstr ""
-"cURL 的默认超时,å•使¯«ç§’。\n"
+"cURL 的默认时é™ï¼Œå•使¯«ç§’。\n"
"仅使用 cURL 编译时有效果。"
#: src/settings_translation_file.cpp
@@ -2515,18 +2780,16 @@ msgid "Defines areas with sandy beaches."
msgstr "定义沙质海滩区域."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines distribution of higher terrain and steepness of cliffs."
-msgstr "定义了更高 (悬崖顶部) 地形的区域, å½±å“å³­å£çš„陡峭度。"
+msgstr "定义高地形的分布情况和悬崖陡峭程度。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines distribution of higher terrain."
-msgstr "定义了 \"terrain_higher\" (悬崖顶部地形) 的区域。"
+msgstr "定义悬崖顶部地形的分布。"
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
-msgstr "å®šä¹‰æ´žç©´çš„å°ºå¯¸ï¼Œæ•°å€¼è¶Šå°æ´žç©´è¶Šå¤§ã€‚"
+msgstr "å®šä¹‰å¤§åž‹æ´žç©´çš„å°ºå¯¸ï¼Œæ•°å€¼è¶Šå°æ´žç©´è¶Šå¤§ã€‚"
#: src/settings_translation_file.cpp
msgid "Defines large-scale river channel structure."
@@ -2541,36 +2804,32 @@ msgid ""
"Defines sampling step of texture.\n"
"A higher value results in smoother normal maps."
msgstr ""
-"定义纹ç†é‡‡æ ·æ­¥éª¤ã€‚\n"
+"定义æè´¨é‡‡æ ·æ­¥éª¤ã€‚\n"
"数值越高常æ€è´´å›¾è¶Šå¹³æ»‘。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the base ground level."
-msgstr "定义森林区域和森林密度."
+msgstr "定义基准地é¢é«˜åº¦."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the depth of the river channel."
-msgstr "定义森林区域和森林密度."
+msgstr "å®šä¹‰æ°´é“æ·±åº¦."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
msgstr "定义玩家å¯ä¼ é€çš„æœ€å¤§è·ç¦»ï¼Œä»¥æ–¹å—为å•ä½ (0 = ä¸é™åˆ¶)。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river channel."
-msgstr "定义大尺寸的河é“结构。"
+msgstr "定义河é“宽度。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river valley."
-msgstr "定义树上长苹果的区域."
+msgstr "定义河谷宽度."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
-msgstr "定义森林区域和森林密度."
+msgstr "定义森林é¢ç§¯å’Œæ£®æž—密度。"
#: src/settings_translation_file.cpp
msgid ""
@@ -2586,16 +2845,15 @@ msgstr "建造åŽå‘逿–¹å—的延迟时间"
#: src/settings_translation_file.cpp
msgid "Delay showing tooltips, stated in milliseconds."
-msgstr "工具æç¤ºæ˜¾ç¤ºå»¶è¿Ÿï¼ŒæŒ‰æ¯«ç§’计算。"
+msgstr "å·¥å…·æ æ˜¾ç¤ºå»¶è¿Ÿï¼ŒæŒ‰æ¯«ç§’计算。"
#: src/settings_translation_file.cpp
msgid "Deprecated Lua API handling"
msgstr "已弃用 Lua API 处ç†"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Depth below which you'll find giant caverns."
-msgstr "大型洞穴的最浅深度。"
+msgstr "巨型洞穴的最浅深度。"
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find large caves."
@@ -2605,20 +2863,19 @@ msgstr "大型洞穴的最浅深度。"
msgid ""
"Description of server, to be displayed when players join and in the "
"serverlist."
-msgstr "æœåС噍æè¿°ï¼Œå°†æ˜¾ç¤ºåœ¨æä¾›ç»™çŽ©å®¶çš„æœåŠ¡å™¨åˆ—è¡¨ã€‚"
+msgstr "æœåС噍æè¿°ï¼Œå°†åœ¨çŽ©å®¶åŠ å…¥æ—¶å‘é€ç»™çŽ©å®¶ï¼Œå¹¶æ˜¾ç¤ºåœ¨æœåŠ¡å™¨åˆ—è¡¨ã€‚"
#: src/settings_translation_file.cpp
msgid "Desert noise threshold"
-msgstr "沙漠噪音阈值"
+msgstr "沙漠噪声阈值"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Deserts occur when np_biome exceeds this value.\n"
"When the 'snowbiomes' flag is enabled, this is ignored."
msgstr ""
"当np_biome超过该值时将产生沙漠。\n"
-"当新的生物群系系统å¯ç”¨æ—¶ï¼Œè¯¥é¡¹å°†è¢«å¿½ç•¥ã€‚"
+"当‘snowbiomes’å¯ç”¨æ—¶ï¼Œè¯¥é¡¹å°†è¢«å¿½ç•¥ã€‚"
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
@@ -2638,7 +2895,7 @@ msgstr "ç¦æ­¢ä½¿ç”¨ç©ºå¯†ç "
#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
-msgstr "æœåŠ¡å™¨åŸŸå,将显示在æä¾›ç»™çŽ©å®¶çš„æœåŠ¡å™¨åˆ—è¡¨ã€‚"
+msgstr "æœåŠ¡å™¨åŸŸå,将显示在æœåŠ¡å™¨åˆ—è¡¨ã€‚"
#: src/settings_translation_file.cpp
msgid "Double tap jump for fly"
@@ -2646,42 +2903,42 @@ msgstr "åŒå‡»â€œè·³è·ƒâ€é”®é£žè¡Œ"
#: src/settings_translation_file.cpp
msgid "Double-tapping the jump key toggles fly mode."
-msgstr "连按两次“跳跃â€é”®åˆ‡æ¢é£žè¡Œæ¨¡å¼ã€‚"
+msgstr "连按两次“跳跃â€é”®å¯ç”¨/ç¦ç”¨é£žè¡Œæ¨¡å¼ã€‚"
#: src/settings_translation_file.cpp
msgid "Drop item key"
msgstr "丢弃物å“é”®"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dump the mapgen debug information."
msgstr "转储地图生æˆå™¨è°ƒè¯•ä¿¡æ¯ã€‚"
#: src/settings_translation_file.cpp
msgid "Dungeon maximum Y"
-msgstr ""
+msgstr "地窖最大Yåæ ‡"
#: src/settings_translation_file.cpp
msgid "Dungeon minimum Y"
-msgstr ""
+msgstr "地窖最å°Yåæ ‡"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dungeon noise"
-msgstr "æ²³æµå™ªéŸ³"
+msgstr "地窖噪声"
#: src/settings_translation_file.cpp
msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"为客户端和æœåŠ¡ç«¯å¯ç”¨IPv6支æŒã€‚\n"
+"需è¦IPv6网络连接å¯ç”¨ã€‚"
#: src/settings_translation_file.cpp
msgid ""
"Enable Lua modding support on client.\n"
"This support is experimental and API can change."
msgstr ""
-"å¯ç”¨Lua MOD支æŒã€‚\n"
+"å¯ç”¨å®¢æˆ·ç«¯Lua mod支æŒã€‚\n"
"该功能是实验性的,且API会å˜åŠ¨ã€‚"
#: src/settings_translation_file.cpp
@@ -2690,17 +2947,15 @@ msgstr "å¯ç”¨æŽ§åˆ¶å°çª—å£"
#: src/settings_translation_file.cpp
msgid "Enable creative mode for new created maps."
-msgstr "å¯ç”¨æ–°å»ºåœ°å›¾çš„创造模å¼ã€‚"
+msgstr "为新建地图å¯ç”¨åˆ›é€ æ¨¡å¼ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable joysticks"
msgstr "å¯ç”¨æ‘‡æ†"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable mod channels support."
-msgstr "å¯ç”¨ mod 安全"
+msgstr "å¯ç”¨ mod 频铿”¯æŒã€‚"
#: src/settings_translation_file.cpp
msgid "Enable mod security"
@@ -2716,13 +2971,15 @@ msgstr "å¯ç”¨éšæœºç”¨æˆ·è¾“å…¥ï¼ˆä»…ç”¨äºŽæµ‹è¯•ï¼‰ã€‚"
#: src/settings_translation_file.cpp
msgid "Enable register confirmation"
-msgstr ""
+msgstr "å¯ç”¨æ³¨å†Œç¡®è®¤"
#: src/settings_translation_file.cpp
msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
+"在连接到æœåŠ¡å™¨æ—¶å¯ç”¨æ³¨å†Œç¡®è®¤ã€‚\n"
+"如果ç¦ç”¨ï¼Œæ–°è´¦å·ä¼šè‡ªåŠ¨æ³¨å†Œã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -2730,7 +2987,7 @@ msgid ""
"Disable for speed or for different looks."
msgstr ""
"å¯ç”¨ç®€å•环境光闭塞的平滑光照。\n"
-"ç¦ç”¨å¯å½±å“速度和获得ä¸åŒå¤–观。"
+"ç¦ç”¨å¯å½±å“速度或得到ä¸åŒå¤–观。"
#: src/settings_translation_file.cpp
msgid ""
@@ -2741,7 +2998,7 @@ msgid ""
"expecting."
msgstr ""
"å¯ç”¨ç¦æ­¢æ—§ç‰ˆå®¢æˆ·ç«¯è¿žæŽ¥æ¨¡å¼ã€‚\n"
-"旧版客户端是å¯å…¼å®¹çš„,它们ä¸ä¼šåœ¨è¿žæŽ¥æ–°ç‰ˆæœåŠ¡å™¨æ—¶\n"
+"兼容旧版客户端是指它们ä¸ä¼šåœ¨è¿žæŽ¥æ–°ç‰ˆæœåŠ¡å™¨æ—¶\n"
"崩溃,但å¯èƒ½ä¸æ”¯æŒæŸäº›æ‚¨æ‰€æœŸæœ›çš„æ–°ç‰¹æ€§ã€‚"
#: src/settings_translation_file.cpp
@@ -2752,13 +3009,16 @@ msgid ""
"when connecting to the server."
msgstr ""
"å…许使用远程媒体æœåС噍 (如果由æœåС噍æä¾›)。\n"
-"连接到æœåŠ¡å™¨æ—¶ï¼Œè¿œç¨‹æœåŠ¡å™¨ä¼šæä¾›ä¸€ç§æ›´å¿«çš„æ–¹å¼ä¸‹è½½åª’体 (如纹ç†)。"
+"连接到æœåŠ¡å™¨æ—¶ï¼Œè¿œç¨‹æœåŠ¡å™¨ä¼šæä¾›ä¸€ç§æ›´å¿«çš„æ–¹å¼\n"
+"ä¸‹è½½åª’ä½“ä¿¡æ¯ (如æè´¨)。"
#: src/settings_translation_file.cpp
msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"å¯ç”¨é¡¶ç‚¹ç¼“冲对象。\n"
+"这会æžå¤§æ”¹å–„å›¾åƒæ€§èƒ½ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -2769,15 +3029,14 @@ msgstr ""
"例如:0æ˜¯ä¸æ‘‡åŠ¨ï¼›1.0正常摇动;2.0åŒå€ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
-"å…许/ç¦æ­¢è¿è¡Œ IPv6 æœåŠ¡å™¨ã€‚ä¸€ä¸ª IPv6 æœåС噍å¯èƒ½ä»…é™\n"
-" IPv6 客户端,这å–决于系统é…置。\n"
-"如果设置了 bind_address 则本项被忽略。"
+"å…许/ç¦æ­¢è¿è¡Œ IPv6 æœåŠ¡å™¨ã€‚\n"
+"如果设置了 bind_address 则本项被忽略。\n"
+"需è¦å¼€å¯ enable_ipv6。"
#: src/settings_translation_file.cpp
msgid ""
@@ -2786,10 +3045,14 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"å¼€å¯Hable的“神秘海域2â€ç”µå½±å¼çš„色调映射。\n"
+"模拟电影色调曲线åŠå…¶å®žçŽ°é«˜åŠ¨æ€èŒƒå›´å›¾åƒçš„æ–¹å¼ã€‚\n"
+"略微改善中等范围对比度。\n"
+"逿­¥åŽ‹ç¼©é«˜äº®å’Œé˜´å½±ã€‚"
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
-msgstr "å¯ç”¨åº“存物å“动画。"
+msgstr "å¯ç”¨ç‰©å“清å•动画。"
#: src/settings_translation_file.cpp
msgid ""
@@ -2803,9 +3066,8 @@ msgstr ""
"需è¦å¯ç”¨ç€è‰²å™¨ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enables caching of facedir rotated meshes."
-msgstr "å¯ç”¨facedir rotated meshes的缓存"
+msgstr "å¯ç”¨ç¿»è½¬ç½‘状物facedir的缓存。"
#: src/settings_translation_file.cpp
msgid "Enables minimap."
@@ -2816,7 +3078,7 @@ msgid ""
"Enables on the fly normalmap generation (Emboss effect).\n"
"Requires bumpmapping to be enabled."
msgstr ""
-"å¯ç”¨å³æ—¶æ³•线生æˆï¼ˆæµ®é›•效果)。\n"
+"å¯ç”¨å³æ—¶æ³•线贴图生æˆï¼ˆæµ®é›•效果)。\n"
"需è¦å¯ç”¨å‡¹å‡¸è´´å›¾ã€‚"
#: src/settings_translation_file.cpp
@@ -2824,8 +3086,8 @@ msgid ""
"Enables parallax occlusion mapping.\n"
"Requires shaders to be enabled."
msgstr ""
-"å¯ç”¨è§†å·®é—­å¡žæ˜ å°„。\n"
-"需è¦ç€è‰²å™¨å·²å¯ç”¨ã€‚"
+"å¯ç”¨è§†å·®é®è”½è´´å›¾ã€‚\n"
+"需è¦å¯ç”¨ç€è‰²å™¨ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -2834,11 +3096,14 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"å¯ç”¨å£°éŸ³ç³»ç»Ÿã€‚\n"
+"如果ç¦ç”¨ï¼Œåˆ™å®Œå…¨ç¦ç”¨æ¸¸æˆä¸­æ‰€æœ‰å£°éŸ³ã€‚\n"
+"游æˆå†…声音控制将失效。\n"
+"æ”¹å˜æ­¤è®¾ç½®éœ€è¦é‡å¯ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Engine profiling data print interval"
-msgstr "打å°å¼•æ“Žåˆ†æžæ•°æ®é—´éš”"
+msgstr "打å°å¼•æ“Žæ€§èƒ½åˆ†æžæ•°æ®é—´éš”"
#: src/settings_translation_file.cpp
msgid "Entity methods"
@@ -2848,7 +3113,19 @@ msgstr "实体方法"
msgid ""
"Experimental option, might cause visible spaces between blocks\n"
"when set to higher number than 0."
-msgstr "实验性选项,设为大于 0 的数字时å¯èƒ½å¯¼è‡´å—之间出现å¯è§ç©ºé—´ã€‚"
+msgstr ""
+"实验性选项,设为大于 0 的数字时å¯èƒ½å¯¼è‡´\n"
+"å—之间出现å¯è§ç©ºé—´ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
@@ -2860,16 +3137,15 @@ msgstr "FSAA"
#: src/settings_translation_file.cpp
msgid "Factor noise"
-msgstr "噪音系数"
+msgstr "系数噪声"
#: src/settings_translation_file.cpp
msgid "Fall bobbing factor"
-msgstr "å è½ä¸Šä¸‹æ‘†åЍ"
+msgstr "å è½ä¸Šä¸‹æ‘†åŠ¨ç³»æ•°"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "åŽå¤‡å­—体"
+msgstr "åŽå¤‡å­—体路径"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
@@ -2877,7 +3153,7 @@ msgstr "åŽå¤‡å­—体阴影"
#: src/settings_translation_file.cpp
msgid "Fallback font shadow alpha"
-msgstr "åŽå¤‡å­—ä½“é˜´å½±é€æ˜Ž"
+msgstr "åŽå¤‡å­—ä½“é˜´å½±é€æ˜Žåº¦"
#: src/settings_translation_file.cpp
msgid "Fallback font size"
@@ -2889,57 +3165,54 @@ msgstr "快速移动键"
#: src/settings_translation_file.cpp
msgid "Fast mode acceleration"
-msgstr "快速移动模å¼åŠ é€Ÿåº¦"
+msgstr "快速模å¼åŠ é€Ÿåº¦"
#: src/settings_translation_file.cpp
msgid "Fast mode speed"
-msgstr "快速移动模å¼é€Ÿåº¦"
+msgstr "快速模å¼é€Ÿåº¦"
#: src/settings_translation_file.cpp
msgid "Fast movement"
msgstr "快速移动"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Fast movement (via the \"special\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"快速移动(通过“使用â€é”®ï¼‰ã€‚\n"
-"è¿™éœ€è¦æœåС噍å…è®¸â€œå¿«é€Ÿç§»åŠ¨â€æƒé™ã€‚"
+"快速移动(通过“特殊â€é”®ï¼‰ã€‚\n"
+"è¿™éœ€è¦æœåŠ¡å™¨çš„â€œfastâ€æƒé™ã€‚"
#: src/settings_translation_file.cpp
msgid "Field of view"
-msgstr "视界"
+msgstr "视野"
#: src/settings_translation_file.cpp
msgid "Field of view in degrees."
-msgstr "视界程度。"
+msgstr "视野角度。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"File in client/serverlist/ that contains your favorite servers displayed in "
"the\n"
"Multiplayer Tab."
msgstr ""
-"client/serverlist/ 中的文件包å«ä¼šæ˜¾ç¤ºåœ¨â€œå¤šäººæ¸¸æˆâ€é€‰é¡¹å¡ä¸­çš„æ‚¨æ”¶è—çš„æœåŠ¡å™¨ã€‚"
+"客户端/æœåŠ¡å™¨åˆ—è¡¨/ ä¸­çš„æ–‡ä»¶ï¼ŒåŒ…å«æ˜¾ç¤ºåœ¨â€œå¤šäººæ¸¸æˆâ€é€‰é¡¹å¡ä¸­çš„æ‚¨\n"
+"æ”¶è—çš„æœåŠ¡å™¨ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Filler depth"
msgstr "填充深度"
#: src/settings_translation_file.cpp
msgid "Filler depth noise"
-msgstr "填充深度噪音"
+msgstr "填充深度噪声"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
-msgstr "电影基调映射"
+msgstr "电影色调映射"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
@@ -2956,14 +3229,12 @@ msgid "Filtering"
msgstr "过滤"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "First of 4 2D noises that together define hill/mountain range height."
-msgstr "定义tunnels的最åˆ2个3D噪音。"
+msgstr "定义决定丘陵/山地范围高度的4个2D噪声的第一项。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "First of two 3D noises that together define tunnels."
-msgstr "定义tunnels的最åˆ2个3D噪音。"
+msgstr "定义决定通é“çš„2个3D噪声的第一项。"
#: src/settings_translation_file.cpp
msgid "Fixed map seed"
@@ -2971,7 +3242,42 @@ msgstr "固定地图ç§å­"
#: src/settings_translation_file.cpp
msgid "Fixed virtual joystick"
-msgstr ""
+msgstr "固定虚拟摇æ†"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "水级别"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "地窖最大Yåæ ‡"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "地窖最å°Yåæ ‡"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "水级别"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "水级别"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "玩家转移è·ç¦»"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "水级别"
#: src/settings_translation_file.cpp
msgid "Fly key"
@@ -2987,19 +3293,19 @@ msgstr "雾"
#: src/settings_translation_file.cpp
msgid "Fog start"
-msgstr ""
+msgstr "雾开始"
#: src/settings_translation_file.cpp
msgid "Fog toggle key"
-msgstr "雾切æ¢é”®"
+msgstr "雾å¯ç”¨/ç¦ç”¨é”®"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "默认粗体"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "默认斜体"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3015,14 +3321,20 @@ msgstr "字体大å°"
#: src/settings_translation_file.cpp
msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgstr "默认字体大å°ï¼Œå•ä½pt。"
#: src/settings_translation_file.cpp
msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+msgstr "åŽå¤‡å­—体大å°ï¼Œå•ä½pt。"
#: src/settings_translation_file.cpp
msgid "Font size of the monospace font in point (pt)."
+msgstr "等宽字体大å°ï¼Œå•ä½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 ""
#: src/settings_translation_file.cpp
@@ -3031,6 +3343,8 @@ msgid ""
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
+"玩家èŠå¤©æ¶ˆæ¯æ ¼å¼ã€‚ä»¥ä¸‹å­—ç¬¦ä¸²æ˜¯åˆæ³•å ä½ç¬¦ï¼š\n"
+"@name, @message, @timestamp (å¯é€‰ï¼‰"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
@@ -3038,52 +3352,51 @@ msgstr "å±å¹•截图格å¼ã€‚"
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Color"
-msgstr "èœå•默认背景色"
+msgstr "窗å£é»˜è®¤èƒŒæ™¯è‰²"
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Opacity"
-msgstr "èœå•默认背景ä¸é€æ˜Žåº¦"
+msgstr "窗å£é»˜è®¤èƒŒæ™¯ä¸é€æ˜Žåº¦"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Color"
-msgstr "èœå•å…¨å±èƒŒæ™¯è‰²"
+msgstr "窗å£å…¨å±èƒŒæ™¯è‰²"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Opacity"
-msgstr "èœå•å…¨å±èƒŒæ™¯ä¸é€æ˜Žåº¦"
+msgstr "窗å£å…¨å±èƒŒæ™¯ä¸é€æ˜Žåº¦"
#: src/settings_translation_file.cpp
msgid "Formspec default background color (R,G,B)."
-msgstr "èœå•默认背景色(R,G,B)。"
+msgstr "窗å£é»˜è®¤èƒŒæ™¯è‰²(红,绿,è“)。"
#: src/settings_translation_file.cpp
msgid "Formspec default background opacity (between 0 and 255)."
-msgstr "èœå•默认背景ä¸é€æ˜Žåº¦(0~255)。"
+msgstr "窗å£é»˜è®¤èƒŒæ™¯ä¸é€æ˜Žåº¦(0~255)。"
#: src/settings_translation_file.cpp
msgid "Formspec full-screen background color (R,G,B)."
-msgstr "èœå•å…¨å±èƒŒæ™¯è‰²(R,G,B)。"
+msgstr "窗å£å…¨å±èƒŒæ™¯è‰²(红,绿,è“)。"
#: src/settings_translation_file.cpp
msgid "Formspec full-screen background opacity (between 0 and 255)."
-msgstr "èœå•å…¨å±èƒŒæ™¯ä¸é€æ˜Žåº¦(0~255)。"
+msgstr "窗å£å…¨å±èƒŒæ™¯ä¸é€æ˜Žåº¦(0~255)。"
#: src/settings_translation_file.cpp
msgid "Forward key"
msgstr "å‰è¿›é”®"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fourth of 4 2D noises that together define hill/mountain range height."
-msgstr "定义tunnels的最åˆ2个3D噪音。"
+msgstr "定义决定丘陵/山地范围高度的4个2D噪声的第四项。"
#: src/settings_translation_file.cpp
msgid "Fractal type"
-msgstr ""
+msgstr "分形类型"
#: src/settings_translation_file.cpp
msgid "Fraction of the visible distance at which fog starts to be rendered"
-msgstr "雾的å¯è§è·ç¦»"
+msgstr "从雾起始点开始雾的å¯è§è·ç¦»åˆ†æ•°"
#: src/settings_translation_file.cpp
msgid "FreeType fonts"
@@ -3108,6 +3421,11 @@ msgid ""
"to maintain active objects up to this distance in the direction the\n"
"player is looking. (This can avoid mobs suddenly disappearing from view)"
msgstr ""
+"客户端得知对象的è·ç¦»å¤šè¿œï¼Œä»¥åœ°å›¾åŒºå—(16 æ–¹å—)为å•ä½ã€‚\n"
+"\n"
+"将此值设定为大于active_block_range的值也会导致æœåС噍å‘\n"
+"玩家注视方å‘维护活跃对象至此è·ç¦»ï¼ˆè¿™å¯ä»¥é¿å…mobçªç„¶ä»Ž\n"
+"视野中消失)"
#: src/settings_translation_file.cpp
msgid "Full screen"
@@ -3123,19 +3441,19 @@ msgstr "免屿¨¡å¼ã€‚"
#: src/settings_translation_file.cpp
msgid "GUI scaling"
-msgstr "用户图形界é¢ç¼©æ”¾"
+msgstr "GUI缩放"
#: src/settings_translation_file.cpp
msgid "GUI scaling filter"
-msgstr "用户图形界é¢ç¼©æ”¾è¿‡æ»¤å™¨"
+msgstr "GUI缩放过滤器"
#: src/settings_translation_file.cpp
msgid "GUI scaling filter txr2img"
-msgstr "用户图形界é¢ç¼©æ”¾è¿‡æ»¤å™¨ txr2img"
+msgstr "GUI缩放过滤器 txr2img"
#: src/settings_translation_file.cpp
msgid "Generate normalmaps"
-msgstr "生æˆå¸¸è§„地图"
+msgstr "生æˆå‘现贴图"
#: src/settings_translation_file.cpp
msgid "Global callbacks"
@@ -3147,18 +3465,25 @@ msgid ""
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
"and junglegrass, in all other mapgens this flag controls all decorations."
msgstr ""
+"全局地图生æˆå±žæ€§ã€‚\n"
+"在地图生æˆå™¨ v6 中‘decorations’标签控制除树木和丛林è‰å¤–所有装饰物。\n"
+"在其他地图生æˆå™¨ä¸­æ­¤æ ‡ç­¾æŽ§åˆ¶æ‰€æœ‰è£…饰物。"
#: 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"
@@ -3177,9 +3502,8 @@ msgid "Ground noise"
msgstr "地é¢å™ªå£°"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "HTTP mods"
-msgstr "HTTP Mod"
+msgstr "HTTP Mods"
#: src/settings_translation_file.cpp
msgid "HUD scale factor"
@@ -3187,10 +3511,9 @@ msgstr "HUD 缩放比例系数"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
-msgstr "HUD 切æ¢é”®"
+msgstr "HUDå¯ç”¨/ç¦ç”¨é”®"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- legacy: (try to) mimic old behaviour (default for release).\n"
@@ -3200,7 +3523,7 @@ msgstr ""
"处ç†å·²å¼ƒç”¨çš„ Lua API 调用:\n"
"- 兼容:(å°è¯•)模拟旧的调用(å‘布版本的默认值)。\n"
"- 记录:模拟并记录已弃用的调用的回溯(调试的默认值)。\n"
-"- é”™è¯¯ï¼šä½¿ç”¨å·²å¼ƒç”¨çš„è°ƒç”¨æ˜¯åœæ­¢ï¼ˆMod å¼€å‘人员推è)。"
+"- é”™è¯¯ï¼šåœæ­¢ä½¿ç”¨å·²å¼ƒç”¨çš„调用(Mod å¼€å‘人员推è)。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3210,6 +3533,10 @@ msgid ""
"call).\n"
"* Instrument the sampler being used to update the statistics."
msgstr ""
+"使性能分æžè®¡æ•°å™¨è‡ªèº«ï¼š\n"
+"* 计数空函数。\n"
+"估测计数器增加的性能开支。\n"
+"* è®¡æ•°è¢«ç”¨äºŽæ›´æ–°ç»Ÿè®¡çš„å–æ ·å™¨ã€‚"
#: src/settings_translation_file.cpp
msgid "Heat blend noise"
@@ -3244,24 +3571,20 @@ msgid "Hill threshold"
msgstr "山丘阈值"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness1 noise"
-msgstr "洞穴噪音 #1"
+msgstr "山丘噪声 #1"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness2 noise"
-msgstr "洞穴噪音 #1"
+msgstr "山丘噪声 #2"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness3 noise"
-msgstr "洞穴噪音 #1"
+msgstr "山丘噪声 #3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness4 noise"
-msgstr "洞穴噪音 #1"
+msgstr "山丘噪声 #4"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
@@ -3272,158 +3595,164 @@ msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
+"跳跃和掉è½çš„æ°´å¹³åŠ é€Ÿåº¦ã€‚\n"
+"å•ä½ä¸ºæ–¹å—æ¯äºŒæ¬¡æ–¹ç§’。"
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration in fast mode,\n"
"in nodes per second per second."
msgstr ""
+"快速模å¼çš„æ°´å¹³å’Œç«–直加速度。\n"
+"å•ä½ä¸ºæ–¹å—æ¯äºŒæ¬¡æ–¹ç§’。"
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration on ground or when climbing,\n"
"in nodes per second per second."
msgstr ""
+"行走或攀爬的水平和竖直加速度。\n"
+"å•ä½ä¸ºæ–¹å—æ¯äºŒæ¬¡æ–¹ç§’。"
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
-msgstr "å¿«æ·æ ä¸‹ä¸€ä¸ª é”®"
+msgstr "å¿«æ·æ ä¸‹ä¸€ä¸ªé”®"
#: src/settings_translation_file.cpp
msgid "Hotbar previous key"
-msgstr "å¿«æ·æ ä¸Šä¸€ä¸ª é”®"
+msgstr "å¿«æ·æ ä¸Šä¸€ä¸ªé”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 1 key"
-msgstr "å¿«æ·æ 1 é”®"
+msgstr "å¿«æ·æ 1é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 10 key"
-msgstr "å¿«æ·æ 10 é”®"
+msgstr "å¿«æ·æ 10é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 11 key"
-msgstr "å¿«æ·æ 11 é”®"
+msgstr "å¿«æ·æ 11é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 12 key"
-msgstr "å¿«æ·æ 12 é”®"
+msgstr "å¿«æ·æ 12é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 13 key"
-msgstr "å¿«æ·æ 13 é”®"
+msgstr "å¿«æ·æ 13é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 14 key"
-msgstr "å¿«æ·æ 14 é”®"
+msgstr "å¿«æ·æ 14é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 15 key"
-msgstr "å¿«æ·æ 15 é”®"
+msgstr "å¿«æ·æ 15é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 16 key"
-msgstr "å¿«æ·æ 16 é”®"
+msgstr "å¿«æ·æ 16é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 17 key"
-msgstr "å¿«æ·æ 17 é”®"
+msgstr "å¿«æ·æ 17é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 18 key"
-msgstr "å¿«æ·æ 18 é”®"
+msgstr "å¿«æ·æ 18é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 19 key"
-msgstr "å¿«æ·æ 19 é”®"
+msgstr "å¿«æ·æ 19é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 2 key"
-msgstr "å¿«æ·æ 2 é”®"
+msgstr "å¿«æ·æ 2é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 20 key"
-msgstr "å¿«æ·æ 20 é”®"
+msgstr "å¿«æ·æ 20é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 21 key"
-msgstr "å¿«æ·æ 21 é”®"
+msgstr "å¿«æ·æ 21é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 22 key"
-msgstr "å¿«æ·æ 22 é”®"
+msgstr "å¿«æ·æ 22é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 23 key"
-msgstr "å¿«æ·æ 23 é”®"
+msgstr "å¿«æ·æ 23é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 24 key"
-msgstr "å¿«æ·æ 24 é”®"
+msgstr "å¿«æ·æ 24é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 25 key"
-msgstr "å¿«æ·æ 25 é”®"
+msgstr "å¿«æ·æ 25é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 26 key"
-msgstr "å¿«æ·æ 26 é”®"
+msgstr "å¿«æ·æ 26é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 27 key"
-msgstr "å¿«æ·æ 27 é”®"
+msgstr "å¿«æ·æ 27é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 28 key"
-msgstr "å¿«æ·æ 28 é”®"
+msgstr "å¿«æ·æ 28é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 29 key"
-msgstr "å¿«æ·æ 29 é”®"
+msgstr "å¿«æ·æ 29é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 3 key"
-msgstr "å¿«æ·æ 3 é”®"
+msgstr "å¿«æ·æ 3é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 30 key"
-msgstr "å¿«æ·æ 30 é”®"
+msgstr "å¿«æ·æ 30é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 31 key"
-msgstr "å¿«æ·æ 31 é”®"
+msgstr "å¿«æ·æ 31é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 32 key"
-msgstr "å¿«æ·æ 32 é”®"
+msgstr "å¿«æ·æ 32é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 4 key"
-msgstr "å¿«æ·æ 4 é”®"
+msgstr "å¿«æ·æ 4é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 5 key"
-msgstr "å¿«æ·æ 5 é”®"
+msgstr "å¿«æ·æ 5é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 6 key"
-msgstr "å¿«æ·æ 6 é”®"
+msgstr "å¿«æ·æ 6é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 7 key"
-msgstr "å¿«æ·æ 7 é”®"
+msgstr "å¿«æ·æ 7é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 8 key"
-msgstr "å¿«æ·æ 8 é”®"
+msgstr "å¿«æ·æ 8é”®"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 9 key"
-msgstr "å¿«æ·æ 9 é”®"
+msgstr "å¿«æ·æ 9é”®"
#: src/settings_translation_file.cpp
msgid "How deep to make rivers."
-msgstr "使河æµå¤šæ·±ã€‚"
+msgstr "ç”Ÿæˆæ²³æµå¤šæ·±ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3431,6 +3760,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"液体波移动多快。更高值=更快。\n"
+"如果为负,液体波å‘åŽç§»åŠ¨ã€‚\n"
+"éœ€è¦æ³¢åŠ¨æ¶²ä½“å¯ç”¨ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3442,7 +3774,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
-msgstr "使河æµå¤šå®½ã€‚"
+msgstr "ç”Ÿæˆæ²³æµå¤šå®½ã€‚"
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
@@ -3468,14 +3800,18 @@ msgstr "IPv6 æœåС噍"
msgid ""
"If FPS would go higher than this, limit it by sleeping\n"
"to not waste CPU power for no benefit."
-msgstr "如果 FPS å¯ä»¥è¶…过此值,é™åˆ¶å®ƒä»¥èŠ‚çœ CPU 功耗,因为没有更多好处。"
+msgstr ""
+"如果 FPS å¯ä»¥è¶…过此值,通过ç¡çœ é™åˆ¶å®ƒä»¥\n"
+"èŠ‚çœæ— æ•ˆ CPU 功耗。"
#: src/settings_translation_file.cpp
msgid ""
"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
"are\n"
"enabled."
-msgstr "如果ç¦ç”¨ï¼Œå½“é£žè¡Œå’Œç–¾è·‘åŒæ—¶å¼€å¯æ—¶â€œç‰¹æ®Šâ€é”®ç”¨äºŽæ€¥é€Ÿé£žè¡Œã€‚"
+msgstr ""
+"如果ç¦ç”¨ï¼Œå½“飞行和快速模å¼åŒæ—¶å¯ç”¨æ—¶â€œç‰¹æ®Šâ€é”®ç”¨äºŽå¿«é€Ÿ\n"
+"飞行。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3497,14 +3833,16 @@ msgid ""
"This requires the \"noclip\" privilege on the server."
msgstr ""
"使玩家å¯ä»¥åœ¨é£žè¡Œå¯ç”¨æ—¶é£žè¿‡å›ºä½“æ–¹å—。\n"
-"è¿™éœ€è¦æœåŠ¡å™¨çš„â€œnoclipâ€ç‰¹æƒã€‚"
+"è¿™éœ€è¦æœåŠ¡å™¨çš„â€œnoclipâ€æƒé™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
"down and\n"
"descending."
-msgstr "如果å¯ç”¨ï¼Œâ€œç‰¹æ®Šâ€é”®å°†ä»£æ›¿æ½œè¡Œé”®çš„å‘下攀爬和下é™ã€‚"
+msgstr ""
+"如果å¯ç”¨ï¼Œâ€œç‰¹æ®Šâ€é”®å°†ä»£æ›¿æ½œè¡Œé”®çš„å‘下攀爬和\n"
+"下é™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3530,21 +3868,20 @@ msgstr ""
msgid ""
"If enabled, makes move directions relative to the player's pitch when flying "
"or swimming."
-msgstr "如果å¯ç”¨ï¼Œåˆ™åœ¨é£žè¡Œæˆ–游泳时相对于玩家的视角æ¥ç§»åŠ¨æ–¹å‘。"
+msgstr "如果å¯ç”¨ï¼Œåˆ™åœ¨é£žè¡Œæˆ–游泳时相对于玩家的仰角æ¥ç§»åŠ¨æ–¹å‘。"
#: 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"
-"在å°åŒºåŸŸä¸­ä½¿ç”¨æ–¹å—框时,这很有用。"
+"如果å¯ç”¨ï¼Œæ‚¨å¯ä»¥å°†æ–¹å—放置在您站立的ä½ç½®ï¼ˆè„š+视线水平)。\n"
+"在å°åŒºåŸŸä¸­ä½¿ç”¨æ–¹å—æ¡†åž‹æ–¹å—æ—¶ï¼Œè¿™å¾ˆæœ‰ç”¨ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3552,6 +3889,8 @@ msgid ""
"limited\n"
"to this distance from the player to the node."
msgstr ""
+"如果客户端modæ–¹å—范围é™åˆ¶å¯ç”¨ï¼Œé™åˆ¶get_node至玩家\n"
+"到方å—çš„è·ç¦»"
#: src/settings_translation_file.cpp
msgid ""
@@ -3560,6 +3899,10 @@ msgid ""
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
+"如果 debug.txt 的文件大å°åœ¨ 打开时超过设置,\n"
+"这个文件将被移动到debug.txt.1, \n"
+"如果存在较旧的debug.txt.1,则旧的将被删除。 \n"
+"仅当此设置为正时,æ‰ä¼šç§»åЍ debug.txt。"
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
@@ -3579,7 +3922,7 @@ msgstr "游æˆå†…èŠå¤©æŽ§åˆ¶å°èƒŒæ™¯ alpha 值(ä¸é€æ˜Žåº¦ï¼Œ0~255)。"
#: src/settings_translation_file.cpp
msgid "In-game chat console background color (R,G,B)."
-msgstr "游æˆå†…èŠå¤©æŽ§åˆ¶å°èƒŒæ™¯è‰²(R,G,B)。"
+msgstr "游æˆå†…èŠå¤©æŽ§åˆ¶å°èƒŒæ™¯è‰²(红,绿,è“)。"
#: src/settings_translation_file.cpp
msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
@@ -3591,15 +3934,15 @@ msgstr "音é‡å¢žå¤§é”®"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr ""
+msgstr "åˆå§‹åž‚直速度,å•ä½ä¸ºæ–¹å—æ¯äºŒæ¬¡æ–¹ç§’。"
#: src/settings_translation_file.cpp
msgid ""
"Instrument builtin.\n"
"This is usually only needed by core/builtin contributors"
msgstr ""
-"内部构建工具。\n"
-"这通常åªè¢«æ ¸å¿ƒï¼å†…部构建者需è¦"
+"内置计数器。\n"
+"é€šå¸¸åªæœ‰æ ¸å¿ƒï¼å†…部构建者需è¦"
#: src/settings_translation_file.cpp
msgid "Instrument chatcommands on registration."
@@ -3610,26 +3953,26 @@ msgid ""
"Instrument global callback functions on registration.\n"
"(anything you pass to a minetest.register_*() function)"
msgstr ""
-"登录时检测全局回调函数。\n"
+"注册时计数全局回调函数。\n"
"(传递给 minetest.register_*() 函数的任何内容)"
#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Active Block Modifiers on registration."
-msgstr ""
+msgstr "注册时计数ABM的行为函数。"
#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Loading Block Modifiers on registration."
-msgstr ""
+msgstr "注册时计数LBM的行为函数。"
#: src/settings_translation_file.cpp
msgid "Instrument the methods of entities on registration."
-msgstr ""
+msgstr "注册时计数实体的方法。"
#: src/settings_translation_file.cpp
msgid "Instrumentation"
-msgstr "仪表"
+msgstr "计数器"
#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
@@ -3641,11 +3984,11 @@ msgstr "å‘客户端å‘逿—¶é—´çš„间隔。"
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
-msgstr "库存物å“动画"
+msgstr "ç‰©å“æ¸…å•物å“动画"
#: src/settings_translation_file.cpp
msgid "Inventory key"
-msgstr "库存键"
+msgstr "ç‰©å“æ¸…å•é”®"
#: src/settings_translation_file.cpp
msgid "Invert mouse"
@@ -3656,14 +3999,12 @@ msgid "Invert vertical mouse movement."
msgstr "å转垂直鼠标移动。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "等宽字体路径"
+msgstr "斜体字体路径"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "等宽字体路径"
+msgstr "斜体等宽字体路径"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -3680,6 +4021,10 @@ msgid ""
"increases processing load.\n"
"At iterations = 20 this mapgen has a similar load to mapgen V7."
msgstr ""
+"递归函数迭代数。\n"
+"增加此值会增加细节é‡ï¼Œä½†ä¹Ÿä¼š\n"
+"增加处ç†å™¨è´Ÿè·ã€‚\n"
+"在迭代数=20时地图生æˆå™¨æœ‰ä¸Žåœ°å›¾ç”Ÿæˆå™¨v4相似的负è·ã€‚"
#: src/settings_translation_file.cpp
msgid "Joystick ID"
@@ -3691,7 +4036,7 @@ msgstr "æ‘‡æ†æŒ‰é’®é‡å¤é—´éš”"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
-msgstr "摇æ†çµæ•度"
+msgstr "摇æ†å¤´çµæ•度"
#: src/settings_translation_file.cpp
msgid "Joystick type"
@@ -3705,6 +4050,11 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
+"仅朱莉亚集åˆã€‚\n"
+"è¶…å¤æ•°å¸¸æ•°çš„Wæˆåˆ†ã€‚\n"
+"改å˜åˆ†å½¢å›¾å½¢å½¢çŠ¶ã€‚\n"
+"对3D分形无影å“。\n"
+"大致在-2到2之间。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3713,6 +4063,10 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
+"仅朱莉亚集åˆã€‚\n"
+"è¶…å¤æ•°å¸¸æ•°çš„Xæˆåˆ†ã€‚\n"
+"改å˜åˆ†å½¢å›¾å½¢å½¢çŠ¶ã€‚\n"
+"大致在-2到2之间。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3721,6 +4075,10 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
+"仅朱莉亚集åˆã€‚\n"
+"è¶…å¤æ•°å¸¸æ•°çš„Yæˆåˆ†ã€‚\n"
+"改å˜åˆ†å½¢å›¾å½¢å½¢çŠ¶ã€‚\n"
+"大致在-2到2之间。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3729,22 +4087,26 @@ msgid ""
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
+"仅朱莉亚集åˆã€‚\n"
+"è¶…å¤æ•°å¸¸æ•°çš„Zæˆåˆ†ã€‚\n"
+"改å˜åˆ†å½¢å›¾å½¢å½¢çŠ¶ã€‚\n"
+"大致在-2到2之间。"
#: src/settings_translation_file.cpp
msgid "Julia w"
-msgstr ""
+msgstr "朱莉亚w"
#: src/settings_translation_file.cpp
msgid "Julia x"
-msgstr ""
+msgstr "朱莉亚x"
#: src/settings_translation_file.cpp
msgid "Julia y"
-msgstr ""
+msgstr "朱莉亚y"
#: src/settings_translation_file.cpp
msgid "Julia z"
-msgstr ""
+msgstr "朱莉亚z"
#: src/settings_translation_file.cpp
msgid "Jump key"
@@ -3760,6 +4122,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"视野缩å°é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3767,6 +4132,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"音é‡å‡å°é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3774,6 +4142,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"丢弃所选物å“键。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3781,6 +4152,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"视野扩大键。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3788,6 +4162,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"音é‡å¢žå¤§é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3795,6 +4172,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"跳跃键。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3802,6 +4182,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"快速模å¼å¿«é€Ÿç§»åŠ¨é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3810,6 +4193,10 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"åŽé€€é”®ã€‚\n"
+"åœ¨æŒ‰ä¸‹æ—¶ä¹Ÿä¼šå–æ¶ˆè‡ªåЍå‰è¿›ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3817,6 +4204,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å‰è¿›é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3824,6 +4214,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"左方å‘键。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3831,6 +4224,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"峿–¹å‘键。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3838,6 +4234,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é™éŸ³é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3845,6 +4244,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"打开èŠå¤©çª—å£è¾“入命令键。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3852,6 +4254,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"打开èŠå¤©çª—å£è¾“入本地命令键。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3859,6 +4264,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"打开èŠå¤©çª—å£é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3866,6 +4274,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"æ‰“å¼€ç‰©å“æ¸…å•键。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3873,6 +4284,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬11个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3880,6 +4294,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬12个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3887,6 +4304,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬13个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3894,6 +4314,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬14个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3901,6 +4324,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬15个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3908,6 +4334,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬16个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3915,6 +4344,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬17个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3922,6 +4354,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬18个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3929,6 +4364,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬19个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3936,6 +4374,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬20个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3943,6 +4384,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬21个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3950,6 +4394,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬22个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3957,6 +4404,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬23个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3964,6 +4414,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬24个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3971,6 +4424,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬25个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3978,6 +4434,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬26个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3985,6 +4444,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬27个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3992,6 +4454,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬28个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3999,6 +4464,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬29个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4006,6 +4474,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬30个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4013,6 +4484,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬31个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4020,6 +4494,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬32个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4027,6 +4504,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬8个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4034,6 +4514,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬5个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4041,6 +4524,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬1个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4048,6 +4534,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬4个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4055,6 +4544,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ä¸‹ä¸€ä¸ªä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4062,6 +4554,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬9个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4069,6 +4564,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ä¸Šä¸€ä¸ªä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4076,6 +4574,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬2个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4083,6 +4584,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬7个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4090,6 +4594,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬6个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4097,6 +4604,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬10个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4104,6 +4614,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"é€‰æ‹©å¿«æ·æ ç¬¬3个ä½ç½®é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4113,6 +4626,10 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"下蹲键。\n"
+"è‹¥aux1_descendsç¦ç”¨ï¼Œä¹Ÿå¯ç”¨äºŽå‘下攀爬ã€åœ¨æ°´ä¸­å‘下游。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4120,6 +4637,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"第一人称第三人称镜头切æ¢é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4127,6 +4647,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"截å±é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4134,6 +4657,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨è‡ªåЍå‰è¿›é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4141,6 +4667,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"开关电影模å¼é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4148,6 +4677,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨å°åœ°å›¾é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4155,6 +4687,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨å¿«é€Ÿç§»åŠ¨é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4162,6 +4697,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨é£žè¡Œé”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4169,6 +4707,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨ç©¿å¢™æ¨¡å¼é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4176,6 +4717,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨ä¿¯ä»°ç§»åŠ¨æ¨¡å¼é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4183,6 +4727,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨ç›¸æœºæ›´æ–°é”®ã€‚仅用于开å‘。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4190,6 +4737,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨èŠå¤©æ˜¾ç¤ºé”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4197,6 +4747,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨è°ƒè¯•ä¿¡æ¯é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4204,6 +4757,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨é›¾æ˜¾ç¤ºé”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4211,6 +4767,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨HUD显示键。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4218,6 +4777,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨å¤§åž‹èŠå¤©æŽ§åˆ¶å°æ˜¾ç¤ºé”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4225,6 +4787,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨æ€§èƒ½åˆ†æžå›¾æ˜¾ç¤ºé”®ã€‚仅用于开å‘。\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4232,6 +4797,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨æ— é™è§†é‡Žé”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4239,20 +4807,21 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"å¯ç”¨/ç¦ç”¨ç¼©æ”¾ï¼ˆå¦‚有å¯èƒ½ï¼‰é”®ã€‚\n"
+"è§http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
-msgstr ""
+msgstr "æå‡ºåœ¨10秒内å‘é€è¶…过Xæ¡æ¶ˆæ¯çš„玩家。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lake steepness"
-msgstr "地图生æˆå™¨å¹³é¢æ¹–å¡åº¦"
+msgstr "æ¹–å¡åº¦"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lake threshold"
-msgstr "地图生æˆå™¨å¹³é¢é˜ˆå€¼"
+msgstr "湖阈值"
#: src/settings_translation_file.cpp
msgid "Language"
@@ -4260,24 +4829,23 @@ msgstr "语言"
#: src/settings_translation_file.cpp
msgid "Large cave depth"
-msgstr "巨大洞穴深度"
+msgstr "大型洞穴深度"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "大型洞穴最大数é‡"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "å¤§åž‹æ´žç©´æœ€å°æ•°é‡"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "大型洞穴淹没比"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Large chat console key"
-msgstr "控制å°é”®"
+msgstr "大型èŠå¤©æŽ§åˆ¶å°é”®"
#: src/settings_translation_file.cpp
msgid "Leaves style"
@@ -4290,6 +4858,10 @@ msgid ""
"- Simple: only outer faces, if defined special_tiles are used\n"
"- Opaque: disable transparency"
msgstr ""
+"æ ‘å¶é£Žæ ¼ï¼š\n"
+"- åŽä¸½ï¼š 所有é¢å¯è§\n"
+"- 简å•: è‹¥special_tiles已定义,仅外表é¢å¯è§\n"
+"- ä¸é€æ˜Žï¼š å–æ¶ˆæ ‘å¶é€æ˜Žåº¦"
#: src/settings_translation_file.cpp
msgid "Left key"
@@ -4301,24 +4873,28 @@ msgid ""
"updated over\n"
"network."
msgstr ""
+"æœåŠ¡å™¨æ—¶é’ŸèŠ‚æ‹é•¿åº¦ï¼Œé€šå¸¸ä¹Ÿæ˜¯å¯¹è±¡é€šè¿‡ç½‘络更新的\n"
+"时间间隔。"
#: src/settings_translation_file.cpp
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"液体波长度。\n"
+"éœ€è¦æ³¢åŠ¨æ¶²ä½“å¯ç”¨ã€‚"
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
-msgstr ""
+msgstr "ABM执行循环时长"
#: src/settings_translation_file.cpp
msgid "Length of time between NodeTimer execution cycles"
-msgstr ""
+msgstr "NodeTimer执行循环时长"
#: src/settings_translation_file.cpp
msgid "Length of time between active block management cycles"
-msgstr ""
+msgstr "活动方å—管ç†å¾ªçŽ¯æ—¶é•¿"
#: src/settings_translation_file.cpp
msgid ""
@@ -4331,38 +4907,38 @@ msgid ""
"- info\n"
"- verbose"
msgstr ""
+"写入debug.txt的日志等级:\n"
+"- <无>(无日志)\n"
+"- 无等级(none)(无等级的消æ¯ï¼‰\n"
+"- 错误(error)\n"
+"- 警告(warning)\n"
+"- 行为(action)\n"
+"- ä¿¡æ¯ï¼ˆinfo)\n"
+"- 冗长调试信æ¯ï¼ˆverbose)"
#: 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
msgid "Light curve gamma"
-msgstr ""
+msgstr "亮度曲线gamma"
#: src/settings_translation_file.cpp
msgid "Light curve high gradient"
-msgstr ""
+msgstr "亮度曲线高梯度"
#: src/settings_translation_file.cpp
msgid "Light curve low gradient"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "ç£ç›˜ä¸Šçš„生产队列é™åˆ¶"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "è¦ç”Ÿæˆçš„生产队列ç»å¯¹é™åˆ¶"
+msgstr "亮度曲线低梯度"
#: src/settings_translation_file.cpp
msgid ""
@@ -4370,6 +4946,9 @@ msgid ""
"Only mapchunks completely within the mapgen limit are generated.\n"
"Value is stored per-world."
msgstr ""
+"从(0,0,0)å‘全部6个方å‘的地图生æˆé™åˆ¶ï¼Œå•ä½ä¸ºæ–¹å—。\n"
+"地图生æˆå™¨åªç”Ÿæˆå®Œå…¨åœ¨æ­¤é™åˆ¶çš„地图å—。\n"
+"此值为æ¯ä¸ªä¸–界å•独ä¿å­˜ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -4379,6 +4958,11 @@ msgid ""
"- Downloads performed by main menu (e.g. mod manager).\n"
"Only has an effect if compiled with cURL."
msgstr ""
+"并行HTTP请求数é™åˆ¶ã€‚\n"
+"- 如果æœåŠ¡å™¨ä½¿ç”¨remote_media设置,影å“媒体信æ¯èŽ·å–。\n"
+"- 影哿œåŠ¡å™¨åˆ—è¡¨ä¸‹è½½å’ŒæœåŠ¡å™¨å…¬å¼€ã€‚\n"
+"- 主èœå•下载(例如mod管ç†å™¨ï¼‰\n"
+"仅在编译时å¯ç”¨cURL时起作用。"
#: src/settings_translation_file.cpp
msgid "Liquid fluidity"
@@ -4390,14 +4974,13 @@ msgstr "液体æµåŠ¨æ€§å¹³æ»‘"
#: src/settings_translation_file.cpp
msgid "Liquid loop max"
-msgstr "液体循环最大"
+msgstr "液体循环最大值"
#: src/settings_translation_file.cpp
msgid "Liquid queue purge time"
msgstr "液体队列清除时间"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Liquid sinking"
msgstr "液体下沉"
@@ -4407,11 +4990,11 @@ msgstr "液体更新间隔,å•ä½ç§’。"
#: src/settings_translation_file.cpp
msgid "Liquid update tick"
-msgstr "æ¶²ä½“æ›´æ–°å•æ¬¡"
+msgstr "液体更新时钟间隔"
#: src/settings_translation_file.cpp
msgid "Load the game profiler"
-msgstr ""
+msgstr "åŠ è½½æ¸¸æˆæ€§èƒ½åˆ†æžå›¾"
#: src/settings_translation_file.cpp
msgid ""
@@ -4419,33 +5002,39 @@ msgid ""
"Provides a /profiler command to access the compiled profile.\n"
"Useful for mod developers and server operators."
msgstr ""
+"è¯»å–æ¸¸æˆæ€§èƒ½åˆ†æžå›¾ä»¥æ”¶é›†æ¸¸æˆæ€§èƒ½åˆ†æžæ•°æ®ã€‚\n"
+"æä¾›/profiler命令用于访问编译的性能分æžå›¾ã€‚\n"
+"对modå¼€å‘者和æœåŠ¡å™¨ç®¡ç†å‘˜æœ‰ç”¨ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Loading Block Modifiers"
-msgstr "活动区å—修改间隔"
+msgstr "加载时区å—修改间隔"
#: src/settings_translation_file.cpp
msgid "Lower Y limit of dungeons."
-msgstr ""
+msgstr "地窖的Y值下é™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "地窖的Y值下é™ã€‚"
#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "主èœå•脚本"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Main menu style"
-msgstr "主èœå•脚本"
+msgstr "主èœå•æ ·å¼"
#: src/settings_translation_file.cpp
msgid ""
"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
-msgstr ""
+msgstr "使雾和天空颜色ä¾èµ–于一天中的时间(黎明/傿™šï¼‰å’Œè§†çº¿æ–¹å‘。"
#: src/settings_translation_file.cpp
msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
+msgstr "使DirectXå’ŒLuaJIT一起工作。如果这导致了问题ç¦ç”¨å®ƒã€‚"
#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
@@ -4457,13 +5046,15 @@ msgstr "地图目录"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen Carpathian."
-msgstr ""
+msgstr "针对Carpathian地图生æˆå™¨çš„属性。"
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen Flat.\n"
"Occasional lakes and hills can be added to the flat world."
msgstr ""
+"针对Flat地图生æˆå™¨çš„属性。\n"
+"有时湖泊和丘陵å¯åР入平å¦çš„世界。"
#: src/settings_translation_file.cpp
msgid ""
@@ -4471,6 +5062,9 @@ msgid ""
"'terrain' enables the generation of non-fractal terrain:\n"
"ocean, islands and underground."
msgstr ""
+"针对Fractal地图生æˆå™¨çš„属性。\n"
+"'terrain'å¯ç”¨éžåˆ†å½¢åœ°å›¾çš„生æˆï¼š\n"
+"海洋,岛屿和地下地形。"
#: src/settings_translation_file.cpp
msgid ""
@@ -4481,10 +5075,16 @@ msgid ""
"to become shallower and occasionally dry.\n"
"'altitude_dry': Reduces humidity with altitude."
msgstr ""
+"针对Valley地图生æˆå™¨çš„属性。\n"
+"'altitude_chill'ï¼šéšæµ·æ‹”高度å‡å°çƒ­é‡ã€‚\n"
+"'humid_rivers':增加河æµå‘¨å›´çš„æ¹¿åº¦ã€‚\n"
+"'vary_river_depth':如果å¯ç”¨ï¼Œé«˜çƒ­é‡ä½Žæ¹¿åº¦å¯¼è‡´æ²³æµ\n"
+"å˜æµ…甚至干枯。\n"
+"'altitude_dry'ï¼šéšæµ·æ‹”高度å‡å°æ¹¿åº¦ã€‚"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen v5."
-msgstr ""
+msgstr "针对v5地图生æˆå™¨çš„属性。"
#: src/settings_translation_file.cpp
msgid ""
@@ -4493,12 +5093,21 @@ msgid ""
"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
"the 'jungles' flag is ignored."
msgstr ""
+"针对v6地图生æˆå™¨çš„属性。\n"
+"'snowboimes'å¯ç”¨æ–°ç‰ˆ5生物群系系统。\n"
+"当'snowbiomes'å¼€å¯ä½¿ä¸›æž—自动å¯ç”¨ï¼Œ\n"
+"忽略'jungles'标签。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
+"针对v7地图生æˆå™¨çš„属性。\n"
+"'ridges'å¯ç”¨æ²³æµã€‚"
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -4513,115 +5122,96 @@ msgid "Mapblock limit"
msgstr "地图å—é™åˆ¶"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapblock mesh generation delay"
-msgstr "地图生æˆé™åˆ¶"
+msgstr "地图生æˆå»¶æ—¶"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapblock mesh generator's MapBlock cache size in MB"
-msgstr "地图生æˆé™åˆ¶"
+msgstr "地图生æˆç¼“存大å°"
#: src/settings_translation_file.cpp
msgid "Mapblock unload timeout"
-msgstr "地图å—å¸è½½è¶…æ—¶"
+msgstr "地图å—å¸è½½æ—¶é™"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Carpathian"
-msgstr "地图生æˆå™¨åˆ†å½¢"
+msgstr "地图生æˆå™¨Carpathian"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Carpathian specific flags"
-msgstr "地图生æˆå™¨å¹³é¢æ ‡å¿—"
+msgstr "地图生æˆå™¨Carpathian标签"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Flat"
-msgstr "地图生æˆå™¨å¹³é¢"
+msgstr "地图生æˆå™¨Flat"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Flat specific flags"
-msgstr "地图生æˆå™¨å¹³é¢æ ‡å¿—"
+msgstr "地图生æˆå™¨Flat标签"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal"
-msgstr "地图生æˆå™¨åˆ†å½¢"
+msgstr "地图生æˆå™¨Fractal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal specific flags"
-msgstr "地图生æˆå™¨å¹³é¢æ ‡å¿—"
+msgstr "地图生æˆå™¨Fractal标签"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V5"
msgstr "地图生æˆå™¨ v5"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V5 specific flags"
-msgstr "地图生æˆå™¨ v6 标志"
+msgstr "地图生æˆå™¨ v5 标签"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V6"
msgstr "地图生æˆå™¨ v6"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V6 specific flags"
-msgstr "地图生æˆå™¨ v6 标志"
+msgstr "地图生æˆå™¨ v6 标签"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V7"
msgstr "地图生æˆå™¨ v7"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V7 specific flags"
-msgstr "地图生æˆå™¨ v7 标志"
+msgstr "地图生æˆå™¨ v7 标签"
#: src/settings_translation_file.cpp
msgid "Mapgen Valleys"
-msgstr "地图生æˆå™¨å±±è°·"
+msgstr "地图生æˆå™¨Valleys"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Valleys specific flags"
-msgstr "地图生æˆå™¨å¹³é¢æ ‡å¿—"
+msgstr "地图生æˆå™¨Valleys标签"
#: src/settings_translation_file.cpp
msgid "Mapgen debug"
msgstr "地图生æˆå™¨è°ƒè¯•"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "地图生æˆå™¨æ ‡å¿—"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "地图生æˆå™¨åç§°"
#: src/settings_translation_file.cpp
msgid "Max block generate distance"
-msgstr ""
+msgstr "最大方å—生æˆè·ç¦»"
#: src/settings_translation_file.cpp
msgid "Max block send distance"
-msgstr ""
+msgstr "最大方å—å‘é€è·ç¦»"
#: src/settings_translation_file.cpp
msgid "Max liquids processed per step."
-msgstr ""
+msgstr "æ¯ä¸ªæ—¶é’Ÿé—´éš”内液体的最大处ç†é€Ÿåº¦ã€‚"
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
-msgstr ""
+msgstr "最大clearobjectsé¢å¤–æ–¹å—æ•°"
#: src/settings_translation_file.cpp
msgid "Max. packets per iteration"
@@ -4645,17 +5235,19 @@ 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
msgid ""
@@ -4663,22 +5255,31 @@ msgid ""
"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."
-msgstr ""
+msgstr "å¯åœ¨åŠ è½½æ—¶åŠ å…¥é˜Ÿåˆ—çš„æœ€å¤§æ–¹å—æ•°ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
+"åœ¨ç”Ÿæˆæ—¶åŠ å…¥é˜Ÿåˆ—çš„æœ€å¤§æ–¹å—æ•°ã€‚\n"
+"设置为空白则自动选择åˆé€‚的数值。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
+"åœ¨ä»Žæ–‡ä»¶ä¸­åŠ è½½æ—¶åŠ å…¥é˜Ÿåˆ—çš„æœ€å¤§æ–¹å—æ•°ã€‚\n"
+"设置为空白则自动选择åˆé€‚的数值。"
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -4689,6 +5290,8 @@ msgid ""
"Maximum number of mapblocks for client to be kept in memory.\n"
"Set to -1 for unlimited amount."
msgstr ""
+"客户端ä¿å­˜åœ¨å†…å­˜ä¸­çš„æœ€å¤§åœ°å›¾å—æ•°é‡ã€‚\n"
+"设置为-1则无é™é‡ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -4696,52 +5299,57 @@ msgid ""
"try reducing it, but don't reduce it to a number below double of targeted\n"
"client number."
msgstr ""
+"æ¯ä¸ªå‘é€é—´éš”之间å‘é€çš„æœ€å¤§åŒ…数,如果你网络连接慢\n"
+"å°è¯•å‡å°å®ƒï¼Œä½†ä¸è¦æŠŠå®ƒå‡å°åˆ°å°é›¨ç›®æ ‡å®¢æˆ·ç«¯æ•°çš„\n"
+"两å€ã€‚"
#: src/settings_translation_file.cpp
msgid "Maximum number of players that can be connected simultaneously."
-msgstr ""
+msgstr "åŒæ—¶è¿žæŽ¥çš„玩家最大数é‡ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum number of recent chat messages to show"
-msgstr "å¼ºåˆ¶è½½å…¥åœ°å›¾å—æœ€å¤§æ•°é‡ã€‚"
+msgstr "æ˜¾ç¤ºçš„æœ€è¿‘æ¶ˆæ¯æœ€å¤§æ•°é‡"
#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
-msgstr ""
+msgstr "æ–¹å—内陿€å­˜å‚¨çš„对象最大数。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum objects per block"
-msgstr "最大强制载入å—"
+msgstr "æ–¹å—内最大对象数"
#: src/settings_translation_file.cpp
msgid ""
"Maximum proportion of current window to be used for hotbar.\n"
"Useful if there's something to be displayed right or left of hotbar."
msgstr ""
+"窗å£å†…ç”¨äºŽæ˜¾ç¤ºå¿«æ·æ çš„æœ€å¤§æ¯”例。\n"
+"有需è¦åœ¨å¿«æ·æ å·¦å³ä¸¤ä¾§æ˜¾ç¤ºçš„内容时该设置有用。"
#: src/settings_translation_file.cpp
msgid "Maximum simultaneous block sends per client"
-msgstr ""
+msgstr "ç»™æ¯ä¸ªå®¢æˆ·ç«¯å‘逿–¹å—的最大次数"
#: src/settings_translation_file.cpp
msgid "Maximum size of the out chat queue"
-msgstr ""
+msgstr "显示最大èŠå¤©è®°å½•的行度"
#: src/settings_translation_file.cpp
msgid ""
"Maximum size of the out chat queue.\n"
"0 to disable queueing and -1 to make the queue size unlimited."
msgstr ""
+"外出èŠå¤©é˜Ÿåˆ—的最大大å°ã€‚\n"
+"0å–æ¶ˆé˜Ÿåˆ—,-1ä½¿é˜Ÿåˆ—å¤§å°æ— é™ã€‚"
#: src/settings_translation_file.cpp
msgid "Maximum time in ms a file download (e.g. a mod download) may take."
-msgstr ""
+msgstr "å•个文件下载(如mod下载)的最大时间。"
#: src/settings_translation_file.cpp
msgid "Maximum users"
-msgstr "最大用户"
+msgstr "最大用户数"
#: src/settings_translation_file.cpp
msgid "Menus"
@@ -4757,10 +5365,14 @@ msgstr "今日消æ¯"
#: src/settings_translation_file.cpp
msgid "Message of the day displayed to players connecting."
-msgstr ""
+msgstr "å‘é€ç»™è¿žæŽ¥ä¸­çŽ©å®¶çš„ä»Šæ—¥æ¶ˆæ¯ã€‚"
#: src/settings_translation_file.cpp
msgid "Method used to highlight selected object."
+msgstr "用于高亮选定的对象的方法。"
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4777,28 +5389,27 @@ 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
msgid "Minimum texture size"
-msgstr "纹ç†è¿‡æ»¤å™¨æœ€å°å¤§å°"
+msgstr "æœ€å°æè´¨å¤§å°"
#: src/settings_translation_file.cpp
msgid "Mipmapping"
-msgstr "Mip 贴图处ç†"
+msgstr "Mip 贴图"
#: src/settings_translation_file.cpp
msgid "Mod channels"
-msgstr ""
+msgstr "mod频é“"
#: src/settings_translation_file.cpp
msgid "Modifies the size of the hudbar elements."
-msgstr ""
+msgstr "更改hudæ å…ƒç´ å¤§å°ã€‚"
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -4810,20 +5421,19 @@ msgstr "等宽字体大å°"
#: src/settings_translation_file.cpp
msgid "Mountain height noise"
-msgstr ""
+msgstr "山高度噪声"
#: src/settings_translation_file.cpp
msgid "Mountain noise"
-msgstr ""
+msgstr "山噪声"
#: src/settings_translation_file.cpp
msgid "Mountain variation noise"
-msgstr ""
+msgstr "å±±å˜åŒ–噪声"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mountain zero level"
-msgstr "水级别"
+msgstr "山起点高度"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
@@ -4835,22 +5445,23 @@ msgstr "é¼ æ ‡çµæ•åº¦å€æ•°ã€‚"
#: src/settings_translation_file.cpp
msgid "Mud noise"
-msgstr ""
+msgstr "泥土噪声"
#: src/settings_translation_file.cpp
msgid ""
"Multiplier for fall bobbing.\n"
"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""
+"æŽ‰è½æ‘‡åЍ倿•°ã€‚\n"
+"例如:设为0åˆ™ä¸æ‘‡åŠ¨ï¼›1.0则正常;2.0则两å€ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mute key"
-msgstr "使用按键"
+msgstr "é™éŸ³æŒ‰é”®"
#: src/settings_translation_file.cpp
msgid "Mute sound"
-msgstr ""
+msgstr "é™éŸ³"
#: src/settings_translation_file.cpp
msgid ""
@@ -4859,6 +5470,10 @@ msgid ""
"Current mapgens in a highly unstable state:\n"
"- The optional floatlands of v7 (disabled by default)."
msgstr ""
+"创建新世界时使用的地图生æˆå™¨å称。\n"
+"在主èœå•中创建一个世界会覆盖此属性。\n"
+"ç›®å‰ä»¥ä¸‹åœ°å›¾ç”Ÿæˆå™¨éžå¸¸ä¸ç¨³å®šï¼š\n"
+"- v7悬空岛(默认ç¦ç”¨ï¼‰ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -4876,8 +5491,8 @@ msgid ""
msgstr "æœåС噍å称,将显示在æä¾›ç»™çŽ©å®¶çš„æœåŠ¡å™¨åˆ—è¡¨ã€‚"
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
-msgstr ""
+msgid "Near plane"
+msgstr "è¿‘å¹³é¢"
#: src/settings_translation_file.cpp
msgid "Network"
@@ -4897,20 +5512,19 @@ msgstr "新用户需è¦è¾“入此密ç ã€‚"
#: src/settings_translation_file.cpp
msgid "Noclip"
-msgstr "无剪辑"
+msgstr "穿墙"
#: src/settings_translation_file.cpp
msgid "Noclip key"
-msgstr "无剪辑键"
+msgstr "穿墙键"
#: src/settings_translation_file.cpp
msgid "Node highlighting"
-msgstr "节点高亮"
+msgstr "æ–¹å—高亮"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "NodeTimer interval"
-msgstr "å‘é€é—´é𔿗¶é—´"
+msgstr "NodeTimeré—´éš”"
#: src/settings_translation_file.cpp
msgid "Noises"
@@ -4918,22 +5532,20 @@ msgstr "噪声"
#: src/settings_translation_file.cpp
msgid "Normalmaps sampling"
-msgstr "一般地图采样"
+msgstr "法线贴图采样"
#: src/settings_translation_file.cpp
msgid "Normalmaps strength"
-msgstr "一般地图强度"
+msgstr "法线贴图强度"
#: src/settings_translation_file.cpp
msgid "Number of emerge threads"
msgstr "生产线程数"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -4944,6 +5556,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"
+"警告:当'num_emerge_threads'大于1æ—¶ï¼Œç›®å‰æœ‰å¾ˆ\n"
+"多bug会导致崩溃。\n"
+"强烈建议在此警告被移除之å‰å°†æ­¤å€¼è®¾ä¸ºé»˜è®¤å€¼'1'。\n"
+"值0:\n"
+"- 自动选择。生产线程数会是‘处ç†å™¨æ•°-2’,\n"
+"- 下é™ä¸º1。\n"
+"任何其他值:\n"
+"- 指定生产线程数,下é™ä¸º1。\n"
+"警告:增大此值会æé«˜å¼•擎地图生æˆå™¨é€Ÿåº¦ï¼Œä½†ä¼šç”±äºŽ\n"
+"å¹²æ‰°å…¶ä»–è¿›ç¨‹è€Œå½±å“æ¸¸æˆä½“验,尤其是å•äººæ¨¡å¼æˆ–è¿è¡Œ\n"
+"‘on_generated’中的Lua代ç ã€‚对于大部分用户æ¥è¯´ï¼Œæœ€\n"
+"佳值为1。"
#: src/settings_translation_file.cpp
msgid ""
@@ -4951,28 +5576,31 @@ msgid ""
"This is a trade-off between sqlite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
+"/clearobjectsæ¯æ¬¡èƒ½åŠ è½½çš„é¢å¤–æ–¹å—æ•°ã€‚\n"
+"这是与sqlite交互和内存消耗的平衡。\n"
+"(4096=100MB,按ç»éªŒæ³•则)。"
#: src/settings_translation_file.cpp
msgid "Number of parallax occlusion iterations."
-msgstr "视差闭塞迭代数。"
+msgstr "视差é®è”½è¿­ä»£æ•°ã€‚"
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
-msgstr ""
+msgstr "在线内容仓库(ContentDB)"
#: src/settings_translation_file.cpp
msgid "Opaque liquids"
-msgstr ""
+msgstr "ä¸é€æ˜Žæ¶²ä½“"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
-msgstr ""
+msgstr "默认字体åŽé˜´å½±çš„逿˜Žåº¦ï¼ˆalpha),å–值范围0~255。"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
+msgstr "åŽå¤‡å­—体åŽé˜´å½±çš„逿˜Žåº¦ï¼ˆalpha),å–值范围0~255。"
#: src/settings_translation_file.cpp
msgid ""
@@ -4980,39 +5608,36 @@ msgid ""
"formspec is\n"
"open."
msgstr ""
+"当窗å£ç„¦ç‚¹ä¸¢å¤±æ˜¯æ‰“开暂åœèœå•。如果游æˆå†…çª—å£æ‰“开,\n"
+"åˆ™ä¸æš‚åœã€‚"
#: src/settings_translation_file.cpp
msgid "Overall bias of parallax occlusion effect, usually scale/2."
-msgstr ""
+msgstr "视差é®è”½æ•ˆæžœçš„æ•´ä½“斜纹,通常为比例/2。"
#: src/settings_translation_file.cpp
msgid "Overall scale of parallax occlusion effect."
-msgstr "视差闭塞效果的总体比例。"
+msgstr "视差é®è”½æ•ˆæžœçš„æ€»ä½“比例。"
#: src/settings_translation_file.cpp
msgid "Parallax occlusion"
-msgstr "视差贴图闭塞"
+msgstr "视差é®è”½"
#: src/settings_translation_file.cpp
msgid "Parallax occlusion bias"
-msgstr "视差贴图闭塞åç§»"
+msgstr "视差é®è”½åç§»"
#: src/settings_translation_file.cpp
msgid "Parallax occlusion iterations"
-msgstr "视差贴图闭塞迭代"
+msgstr "视差é®è”½è¿­ä»£"
#: src/settings_translation_file.cpp
msgid "Parallax occlusion mode"
-msgstr "视差贴图闭塞模å¼"
+msgstr "视差é®è”½æ¨¡å¼"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Parallax occlusion scale"
-msgstr "视差贴图闭塞比例"
-
-#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "视差贴图闭塞强度"
+msgstr "视差é®è”½æ¯”例"
#: src/settings_translation_file.cpp
msgid ""
@@ -5022,20 +5647,26 @@ 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."
-msgstr "å±å¹•截图ä¿å­˜ä½ç½®ã€‚"
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Path to shader directory. If no path is defined, default location will be "
"used."
-msgstr ""
+msgstr "ç€è‰²å™¨ç›®å½•路径。如果未定义路径,则使用默认路径。"
#: src/settings_translation_file.cpp
msgid "Path to texture directory. All textures are first searched from here."
-msgstr ""
+msgstr "æè´¨ç›®å½•路径。所有æè´¨éƒ½é¦–先从此路径æœç´¢ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -5044,6 +5675,10 @@ 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
msgid ""
@@ -5052,29 +5687,43 @@ 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 ""
+"等宽字体路径。\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 "Physics"
+msgid "Per-player limit of queued blocks load from disk"
msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Per-player limit of queued blocks to generate"
+msgstr "è¦ç”Ÿæˆçš„生产队列é™åˆ¶"
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr "物ç†"
+
+#: src/settings_translation_file.cpp
msgid "Pitch move key"
-msgstr "飞行键"
+msgstr "俯仰移动键"
#: src/settings_translation_file.cpp
msgid "Pitch move mode"
-msgstr ""
+msgstr "俯仰移动模å¼"
#: src/settings_translation_file.cpp
msgid ""
"Player is able to fly without being affected by gravity.\n"
"This requires the \"fly\" privilege on the server."
msgstr ""
+"使玩家å¯ä»¥ä¸å—é‡åŠ›é£žèµ·ã€‚\n"
+"è¿™éœ€è¦æœåŠ¡å™¨çš„â€œflyâ€æƒé™ã€‚"
#: src/settings_translation_file.cpp
msgid "Player name"
@@ -5085,64 +5734,81 @@ msgid "Player transfer distance"
msgstr "玩家转移è·ç¦»"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Player versus player"
-msgstr "玩家对战玩家"
+msgstr "玩家对战"
#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
msgstr ""
+"è¦è¿žæŽ¥åˆ°çš„端å£ï¼ˆUDP)。 \n"
+"请注æ„,主èœå•中的端å£å­—段将覆盖此设置。"
#: src/settings_translation_file.cpp
msgid ""
"Prevent digging and placing from repeating when holding the mouse buttons.\n"
"Enable this when you dig or place too often by accident."
msgstr ""
+"按ä½é¼ æ ‡æ—¶ï¼Œé˜²æ­¢é‡å¤ç ´åå’Œé‡å¤æ”¾ç½®ã€‚ \n"
+"当您æ„外地频ç¹ç ´åæˆ–æ”¾ç½®æ–¹å—æ—¶å¯ç”¨æ­¤åŠŸèƒ½ã€‚"
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
-msgstr ""
+msgstr "阻止 mod 执行ä¸å®‰å…¨æ“作,如è¿è¡Œ shell 命令。"
#: src/settings_translation_file.cpp
msgid ""
"Print the engine's profiling data in regular intervals (in seconds).\n"
"0 = disable. Useful for developers."
msgstr ""
+"以固定间隔(以秒为å•ä½ï¼‰æ‰“å°å¼•æ“Žçš„æ€§èƒ½åˆ†æžæ•°æ®ã€‚ \n"
+"0 = ç¦ç”¨ã€‚对开å‘人员很有用。"
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
-msgstr ""
+msgstr "有\"basic_privs\"的玩家å¯ä»¥æŽˆäºˆçš„æƒé™"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Profiler"
-msgstr "山谷轮廓"
+msgstr "性能分æž"
#: src/settings_translation_file.cpp
msgid "Profiler toggle key"
-msgstr "剖æžå™¨åˆ‡æ¢é”®"
+msgstr "性能分æžå¯ç”¨/ç¦ç”¨é”®"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Profiling"
-msgstr "Mod 剖æž"
+msgstr "性能分æž"
#: src/settings_translation_file.cpp
-msgid "Proportion of large caves that contain liquid."
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+msgstr "åŒ…å«æ¶²ä½“的大洞穴的比例。"
+
+#: src/settings_translation_file.cpp
msgid ""
"Radius of cloud area stated in number of 64 node cloud squares.\n"
"Values larger than 26 will start to produce sharp cutoffs at cloud area "
"corners."
msgstr ""
+"以64个节点的云立方体的数目表示的云区域åŠå¾„。\n"
+"大于26的值将开始在云区域的æ‹è§’处产生尖é”的边界。"
#: src/settings_translation_file.cpp
msgid "Raises terrain to make valleys around the rivers."
-msgstr ""
+msgstr "抬高地形使河æµå‘¨å›´å½¢æˆå±±è°·ã€‚"
#: src/settings_translation_file.cpp
msgid "Random input"
@@ -5154,12 +5820,11 @@ msgstr "范围选择键"
#: src/settings_translation_file.cpp
msgid "Recent Chat Messages"
-msgstr ""
+msgstr "最近èŠå¤©æ¶ˆæ¯"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "字体路径"
+msgstr "常规字体路径"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5174,15 +5839,16 @@ msgid ""
"Remove color codes from incoming chat messages\n"
"Use this to stop players from being able to use color in their messages"
msgstr ""
+"移除传入èŠå¤©æ¶ˆæ¯çš„色彩ç \n"
+"使用该设置æ¥é˜²æ­¢çŽ©å®¶åœ¨æ¶ˆæ¯ä¸­ä½¿ç”¨é¢œè‰²"
#: src/settings_translation_file.cpp
msgid "Replaces the default main menu with a custom one."
-msgstr ""
+msgstr "将默认主èœå•替æ¢ä¸ºè‡ªå®šä¹‰ä¸»èœå•。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Report path"
-msgstr "字体路径"
+msgstr "报告路径"
#: src/settings_translation_file.cpp
msgid ""
@@ -5197,23 +5863,32 @@ 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"
-msgstr ""
+msgstr "山脊扩散噪声"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ridge noise"
-msgstr "æ²³æµå™ªéŸ³"
+msgstr "山脊噪声"
#: src/settings_translation_file.cpp
msgid "Ridge underwater noise"
-msgstr ""
+msgstr "水下山脊噪声"
#: src/settings_translation_file.cpp
msgid "Ridged mountain size noise"
-msgstr ""
+msgstr "山脊大å°å™ªå£°"
#: src/settings_translation_file.cpp
msgid "Right key"
@@ -5224,34 +5899,28 @@ msgid "Rightclick repetition interval"
msgstr "å³å‡»é‡å¤é—´éš”"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel depth"
-msgstr "æ²³æµæ·±åº¦"
+msgstr "æ²³é“æ·±åº¦"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel width"
-msgstr "æ²³æµæ·±åº¦"
+msgstr "æ²³é“宽度"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River depth"
msgstr "æ²³æµæ·±åº¦"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River noise"
-msgstr "æ²³æµå™ªéŸ³"
+msgstr "æ²³æµå™ªå£°"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River size"
msgstr "æ²³æµå¤§å°"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River valley width"
-msgstr "æ²³æµæ·±åº¦"
+msgstr "河谷深度"
#: src/settings_translation_file.cpp
msgid "Rollback recording"
@@ -5259,11 +5928,11 @@ msgstr "回滚记录"
#: src/settings_translation_file.cpp
msgid "Rolling hill size noise"
-msgstr ""
+msgstr "波状丘陵大å°å™ªå£°"
#: src/settings_translation_file.cpp
msgid "Rolling hills spread noise"
-msgstr ""
+msgstr "波状丘陵扩散噪声"
#: src/settings_translation_file.cpp
msgid "Round minimap"
@@ -5271,19 +5940,19 @@ msgstr "圆形å°åœ°å›¾"
#: src/settings_translation_file.cpp
msgid "Safe digging and placing"
-msgstr ""
+msgstr "安全挖掘和放置"
#: src/settings_translation_file.cpp
msgid "Sandy beaches occur when np_beach exceeds this value."
-msgstr ""
+msgstr "当 np_beach 超过这个值时会出现沙滩。"
#: src/settings_translation_file.cpp
msgid "Save the map received by the client on disk."
-msgstr ""
+msgstr "将客户端接收到的地图ä¿å­˜åœ¨ç£ç›˜ä¸Šã€‚"
#: src/settings_translation_file.cpp
msgid "Save window size automatically when modified."
-msgstr ""
+msgstr "当窗å£å¤§å°æ”¹å˜æ—¶è‡ªåЍä¿å­˜ã€‚"
#: src/settings_translation_file.cpp
msgid "Saving map received from server"
@@ -5297,6 +5966,11 @@ msgid ""
"pixels when scaling down, at the cost of blurring some\n"
"edge pixels when images are scaled by non-integer sizes."
msgstr ""
+"æ ¹æ®ç”¨æˆ·æŒ‡å®šå€¼ç¼©æ”¾GUI。\n"
+"使用最近的邻近抗锯齿滤镜缩放GUI。\n"
+"这会将粗边处ç†å…‰æ»‘ï¼Œå¹¶ä¸”åœ¨ç¼©å°æ—¶ï¼Œ\n"
+"ä»¥åœ¨éžæ•´æ•°ç¼©æ”¾å¤§å°ä¸‹æ¨¡ç³ŠåŒ–部分边界\n"
+"为代价混åˆåƒç´ ã€‚"
#: src/settings_translation_file.cpp
msgid "Screen height"
@@ -5311,14 +5985,12 @@ msgid "Screenshot folder"
msgstr "截图文件夹"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Screenshot format"
-msgstr "截图文件夹"
+msgstr "截图格å¼"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Screenshot quality"
-msgstr "截图"
+msgstr "截图å“è´¨"
#: src/settings_translation_file.cpp
msgid ""
@@ -5326,21 +5998,21 @@ msgid ""
"1 means worst quality; 100 means best quality.\n"
"Use 0 for default quality."
msgstr ""
+"截图å“质。仅用于JPEGæ ¼å¼ã€‚\n"
+"1 代表最差å“质,100 代表最佳å“质。\n"
+"使用 0 æ¥ä½¿ç”¨é¢„设å“质。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Seabed noise"
-msgstr "洞穴噪音 #1"
+msgstr "海底噪声"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Second of 4 2D noises that together define hill/mountain range height."
-msgstr "定义tunnels的最åˆ2个3D噪音。"
+msgstr "定义山/山丘范围高度的4个2D噪声的第二项。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Second of two 3D noises that together define tunnels."
-msgstr "定义tunnels的最åˆ2个3D噪音。"
+msgstr "定义通é“çš„2个3D噪音的第二项。"
#: src/settings_translation_file.cpp
msgid "Security"
@@ -5348,11 +6020,11 @@ msgstr "安全"
#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
-msgstr ""
+msgstr "è§ https://www.sqlite.org/pragma.html#pragma_synchronous"
#: src/settings_translation_file.cpp
msgid "Selection box border color (R,G,B)."
-msgstr ""
+msgstr "边框颜色 (红,绿,è“) 选择框。"
#: src/settings_translation_file.cpp
msgid "Selection box color"
@@ -5363,7 +6035,6 @@ msgid "Selection box width"
msgstr "选择框宽度"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -5431,7 +6102,7 @@ msgstr "æœåŠ¡å™¨ç«¯å£"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
-msgstr ""
+msgstr "æœåŠ¡å™¨ç«¯é®æŒ¡åˆ é™¤"
#: src/settings_translation_file.cpp
msgid "Serverlist URL"
@@ -5446,42 +6117,40 @@ msgid ""
"Set the language. Leave empty to use the system language.\n"
"A restart is required after changing this."
msgstr ""
+"设定语言。留空以使用系统语言。\n"
+"å˜æ›´åŽé¡»é‡æ–°å¯åŠ¨ã€‚"
#: src/settings_translation_file.cpp
msgid "Set the maximum character length of a chat message sent by clients."
-msgstr ""
+msgstr "设定客户端传é€çš„èŠå¤©è®¯æ¯çš„æœ€å¤§å­—符长度。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
-"å¯ç”¨è§†å·®é—­å¡žæ˜ å°„。\n"
-"需è¦ç€è‰²å™¨å·²å¯ç”¨ã€‚"
+"设置为真以å¯ç”¨é£˜åŠ¨æ ‘å¶ã€‚\n"
+"需è¦å¯ç”¨ç€è‰²å™¨ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"å¯ç”¨è§†å·®é—­å¡žæ˜ å°„。\n"
-"需è¦ç€è‰²å™¨å·²å¯ç”¨ã€‚"
+"设置为真以å¯ç”¨æ‘‡åЍæµä½“(例如水)。\n"
+"需è¦å¯ç”¨ç€è‰²å™¨ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
-"å¯ç”¨è§†å·®é—­å¡žæ˜ å°„。\n"
-"需è¦ç€è‰²å™¨å·²å¯ç”¨ã€‚"
+"设置为真以å¯ç”¨æ‘†åЍæ¤ç‰©ã€‚\n"
+"需è¦å¯ç”¨ç€è‰²å™¨ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Shader path"
-msgstr "ç€è‰²å™¨"
+msgstr "ç€è‰²å™¨è·¯å¾„"
#: src/settings_translation_file.cpp
msgid ""
@@ -5490,24 +6159,25 @@ msgid ""
"cards.\n"
"This only works with the OpenGL video backend."
msgstr ""
+"ç€è‰²å™¨å…许高级视觉效果并且在一些显å¡ä¸Šå¯èƒ½ä¼šæé«˜\n"
+"性能。\n"
+"仅用于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 "字体阴影å移,0 表示ä¸ç»˜åˆ¶é˜´å½±ã€‚"
+msgstr "默认字体阴影å移(å•ä½ä¸ºåƒç´ ï¼‰ï¼Œ0 表示ä¸ç»˜åˆ¶é˜´å½±ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
"be drawn."
-msgstr "字体阴影å移,0 表示ä¸ç»˜åˆ¶é˜´å½±ã€‚"
+msgstr "åŽå¤‡å­—体阴影å移(å•ä½ä¸ºåƒç´ ï¼‰ï¼Œ0 表示ä¸ç»˜åˆ¶é˜´å½±ã€‚"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
-msgstr ""
+msgstr "å°åœ°å›¾çš„形状。å¯ç”¨ = 圆形,åœç”¨ = 方形。"
#: src/settings_translation_file.cpp
msgid "Show debug info"
@@ -5515,11 +6185,11 @@ msgstr "显示调试信æ¯"
#: src/settings_translation_file.cpp
msgid "Show entity selection boxes"
-msgstr ""
+msgstr "显示实体选择框"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
-msgstr "关机消æ¯"
+msgstr "关闭消æ¯"
#: src/settings_translation_file.cpp
msgid ""
@@ -5530,6 +6200,12 @@ msgid ""
"Altering this value is for special usage, leaving it unchanged is\n"
"recommended."
msgstr ""
+"地图生æˆå™¨ç”Ÿæˆçš„地图å—的大å°ï¼Œä»¥åœ°å›¾åŒºå—(16æ–¹å—)表示。\n"
+"警告ï¼ï¼šå°†æ­¤å€¼å¢žåŠ åˆ°å¤§äºŽ5没有益处,而且有\n"
+"多ç§å±é™©ã€‚\n"
+"å‡å°‘此值增加洞穴和地窖密度。\n"
+"ä¿®æ”¹æ­¤å€¼é€‚ç”¨äºŽç‰¹æ®Šç”¨é€”ï¼Œå»ºè®®ä¸æ”¹å˜\n"
+"此值。"
#: src/settings_translation_file.cpp
msgid ""
@@ -5537,10 +6213,13 @@ msgid ""
"increase the cache hit %, reducing the data being copied from the main\n"
"thread, thus reducing jitter."
msgstr ""
+"网格生æˆå™¨çš„地图区å—缓存大å°ã€‚增加此值将会\n"
+"增加缓存命中率,å‡å°‘从主线程å¤åˆ¶æ•°æ®ï¼Œä»Žè€Œ\n"
+"å‡å°‘抖动。"
#: src/settings_translation_file.cpp
msgid "Slice w"
-msgstr ""
+msgstr "切片 w"
#: src/settings_translation_file.cpp
msgid "Slope and fill work together to modify the heights."
@@ -5548,19 +6227,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "å°åž‹æ´žç©´æœ€å¤§æ•°"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "å°åž‹æ´žç©´æœ€å°æ•°"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
-msgstr ""
+msgstr "在边界上的混åˆç”Ÿç‰©ç¾¤ç³»çš„æ¹¿åº¦å˜åŒ–。"
#: src/settings_translation_file.cpp
msgid "Small-scale temperature variation for blending biomes on borders."
-msgstr ""
+msgstr "在边界上的混åˆç”Ÿç‰©ç¾¤ç³»çš„æ¸©åº¦å˜åŒ–。"
#: src/settings_translation_file.cpp
msgid "Smooth lighting"
@@ -5571,41 +6250,40 @@ msgid ""
"Smooths camera when looking around. Also called look or mouse smoothing.\n"
"Useful for recording videos."
msgstr ""
+"å½“è½¬åŠ¨è§†è§’æ—¶è®©æ‘„å½±æœºå˜æµç•…。也称为观看或鼠标æµç•…。\n"
+"对录影很有用。"
#: src/settings_translation_file.cpp
msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
-msgstr ""
+msgstr "在电影模å¼ä¸­è®©æ‘„å½±æœºæ—‹è½¬å˜æµç•…。设为 0 以åœç”¨ã€‚"
#: src/settings_translation_file.cpp
msgid "Smooths rotation of camera. 0 to disable."
-msgstr ""
+msgstr "让旋转摄影机时较æµç•…。设为 0 以åœç”¨ã€‚"
#: src/settings_translation_file.cpp
msgid "Sneak key"
msgstr "潜行键"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Sneaking speed"
-msgstr "步行速度"
+msgstr "潜行速度"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
-msgstr ""
+msgstr "æ½œè¡Œé€Ÿåº¦ï¼Œä»¥æ–¹å—æ¯ç§’为å•ä½ã€‚"
#: src/settings_translation_file.cpp
msgid "Sound"
msgstr "音效"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Special key"
-msgstr "潜行键"
+msgstr "特殊键"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Special key for climbing/descending"
-msgstr "攀登/é™è½çš„é”®"
+msgstr "用于攀登/é™è½çš„特殊键"
#: src/settings_translation_file.cpp
msgid ""
@@ -5614,6 +6292,17 @@ msgid ""
"(obviously, remote_media should end with a slash).\n"
"Files that are not present will be fetched the usual way."
msgstr ""
+"客户端从指定的 URL è€Œä¸æ˜¯ä½¿ç”¨ UDP 获å–媒体。\n"
+"$filename 应该å¯ä»¥é€šè¿‡ cURL 从 $remote_media$filename 访问。\n"
+"(显然,remote_media 部份应以斜线结æŸï¼‰ã€‚\n"
+"没有在其中的文件将会以通常的方å¼èŽ·å–。"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5640,6 +6329,11 @@ msgid "Step mountain spread noise"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "视差强度。"
+
+#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
msgstr "生æˆçš„一般地图强度。"
@@ -5651,10 +6345,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "视差强度。"
-
-#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
msgstr "严格å议检查"
@@ -5663,6 +6353,20 @@ msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "åŒæ­¥ SQLite"
@@ -5738,9 +6442,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "The depth of dirt or other biome filler node."
-msgstr "泥土深度或其他过滤器"
+msgstr "泥土深度或其他生物群系过滤节点"
#: src/settings_translation_file.cpp
msgid ""
@@ -5773,6 +6476,8 @@ msgid ""
"The privileges that new users automatically get.\n"
"See /privs in game for a full list on your server and mod configuration."
msgstr ""
+"新玩家自动获得的æƒé™ã€‚\n"
+"在游æˆä¸­æŸ¥çœ‹/privs以获得完整列表和modé…置。"
#: src/settings_translation_file.cpp
msgid ""
@@ -5782,7 +6487,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5877,7 +6582,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Toggle camera mode key"
-msgstr "åˆ‡æ¢æ‹ç…§æ¨¡å¼é”®"
+msgstr "å¯ç”¨/ç¦ç”¨æ‹ç…§æ¨¡å¼é”®"
#: src/settings_translation_file.cpp
msgid "Tooltip delay"
@@ -5905,7 +6610,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Trusted mods"
-msgstr "å¯ä¿¡ MOD"
+msgstr "å¯ä¿¡ mod"
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
@@ -5934,7 +6639,12 @@ msgstr "å¸è½½æœªç”¨æœåŠ¡å™¨æ•°æ®"
#: src/settings_translation_file.cpp
msgid "Upper Y limit of dungeons."
-msgstr ""
+msgstr "地窖的Y值上é™ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "地窖的Y值上é™ã€‚"
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
@@ -6059,7 +6769,7 @@ msgstr "å¯è§†èŒƒå›´å¢žåŠ é”®"
#: src/settings_translation_file.cpp
msgid "View zoom key"
-msgstr ""
+msgstr "检视缩放键"
#: src/settings_translation_file.cpp
msgid "Viewing range"
@@ -6279,6 +6989,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr ""
@@ -6349,10 +7067,6 @@ msgstr "cURL è¶…æ—¶"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "字体阴影ä¸é€æ˜Žåº¦ï¼ˆ0-255)。"
-#, fuzzy
-#~ msgid "Floatland level"
-#~ msgstr "水级别"
-
#~ msgid "Enables filmic tone mapping"
#~ msgstr "å¯ç”¨ç”µå½±åŸºè°ƒæ˜ å°„"
@@ -6388,3 +7102,21 @@ msgstr "cURL è¶…æ—¶"
#~ msgstr ""
#~ "调整亮度表的伽玛编ç ã€‚较高的数值会较亮。\n"
#~ "这个设定是给客户端使用的,会被æœåŠ¡å™¨å¿½ç•¥ã€‚"
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "å±å¹•截图ä¿å­˜è·¯å¾„。"
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "视差é®è”½å¼ºåº¦"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "ç£ç›˜ä¸Šçš„生产队列é™åˆ¶"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "正在下载和安装 $1,请ç¨ç­‰..."
+
+#~ msgid "Back"
+#~ msgstr "åŽé€€"
+
+#~ msgid "Ok"
+#~ msgstr "确定"
diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po
index 7af879637..646c292b5 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: 2020-01-18 20:21+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2020-06-13 23:17+0200\n"
+"PO-Revision-Date: 2020-01-29 13:50+0000\n"
+"Last-Translator: pan93412 <pan93412@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 3.9-dev\n"
+"X-Generator: Weblate 3.11-dev\n"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -20,12 +20,15 @@ msgstr "é‡ç”Ÿ"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
-msgstr "您已經死亡"
+msgstr "您已死亡"
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "在 Lua 指令稿中發生錯誤,如 mod:"
+msgstr "Lua 指令稿發生錯誤:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -36,10 +39,6 @@ msgid "Main menu"
msgstr "主é¸å–®"
#: builtin/fstk/ui.lua
-msgid "Ok"
-msgstr "確定"
-
-#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "釿–°é€£ç·š"
@@ -61,11 +60,11 @@ msgstr "伺æœå™¨å¼·åˆ¶å”定版本 $1。 "
#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
-msgstr "伺æœå™¨æ”¯æ´å”定版本 $1 到 $2 "
+msgstr "伺æœå™¨æ”¯æ´å”定版本 $1 到 $2。 "
#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
-msgstr "å˜—è©¦é‡æ–°å•Ÿç”¨å…¬å…±ä¼ºæœå™¨æ¸…單並檢查您的網際網路連線。"
+msgstr "è«‹å˜—è©¦é‡æ–°å•Ÿç”¨å…¬å…±ä¼ºæœå™¨æ¸…單並檢查您的網際網路連線。"
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
@@ -87,63 +86,61 @@ msgstr "å–æ¶ˆ"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr "ä¾è³´ï¼š"
+msgstr "相ä¾å…ƒä»¶ï¼š"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
-msgstr "åœç”¨å…¨éƒ¨"
+msgstr "全部åœç”¨"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "å·²åœç”¨ Mod包"
+msgstr "åœç”¨ Mod 包"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr "啟用全部"
+msgstr "全部啟用"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "釿–°å‘½å Mod 包"
+msgstr "啟用 Mod 包"
#: 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 "無法啟用 Mod「$1ã€ï¼Œå› ç‚ºå…¶åŒ…å«äº†ä¸å…許的字元。åªèƒ½æœ‰ [a-z0-9_] 字元。"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
msgstr ""
-"啟用 mod 「$1〠失敗,因為其包å«äº†ä¸åˆæ³•çš„å­—å…ƒã€‚åªæœ‰ å­—å…ƒ [a-z0-9_] æ‰æ˜¯å¯ç”¨"
-"的。"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No (optional) dependencies"
-msgstr "é¸ç”¨çš„相ä¾å…ƒä»¶:"
+msgstr "沒有 (é¸ç”¨çš„) 相ä¾å…ƒä»¶"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr "找ä¸åˆ° mod æè¿°ã€‚"
+msgstr "未æä¾›éŠæˆ²æè¿°ã€‚"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "無相ä¾å…ƒä»¶ã€‚"
+msgstr "沒有強制相ä¾å…ƒä»¶"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "找ä¸åˆ° mod æè¿°ã€‚"
+msgstr "未æä¾› Mod 包æè¿°ã€‚"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No optional dependencies"
-msgstr "é¸ç”¨çš„相ä¾å…ƒä»¶:"
+msgstr "沒有å¯é¸ç›¸ä¾å…ƒä»¶"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr "é¸ç”¨çš„相ä¾å…ƒä»¶:"
+msgstr "å¯é¸ç›¸ä¾å…ƒä»¶ï¼š"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
@@ -163,21 +160,21 @@ msgid "All packages"
msgstr "所有套件"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Back"
-msgstr "Back"
-
-#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
-msgstr "主é¸å–®"
+msgstr "返回主é¸å–®"
#: builtin/mainmenu/dlg_contentstore.lua
-msgid "Downloading and installing $1, please wait..."
-msgstr "正在下載 $1,請ç¨å€™â€¦â€¦"
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
+msgid "Downloading..."
+msgstr "正在載入..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr "å®‰è£ $1 到 $2 失敗"
+msgstr "無法下載 $1"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -191,15 +188,15 @@ msgstr "安è£"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr "Mods"
+msgstr "Mod"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr "無法å–得任何套件"
+msgstr "無法å–得套件"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
-msgstr "沒有æœå°‹åˆ°ä»»ä½•é …ç›®"
+msgstr "ç„¡çµæžœ"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
@@ -207,48 +204,169 @@ msgid "Search"
msgstr "æœå°‹"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Texture packs"
msgstr "æè³ªåŒ…"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Uninstall"
-msgstr "安è£"
+msgstr "解除安è£"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
msgstr "æ›´æ–°"
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "å為「$1ã€çš„世界已存在"
#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "寒冷海拔"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Altitude dry"
+msgstr "寒冷海拔"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biome blending"
+msgstr "生物雜訊"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Biomes"
+msgstr "生物雜訊"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caverns"
+msgstr "洞穴雜訊"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Caves"
+msgstr "å€é »ç¨‹"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "建立"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
+msgid "Decorations"
+msgstr "迭代"
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "從 minetest.net 下載一個å­éŠæˆ²ï¼Œåƒæ˜¯ minetest_game"
+msgstr "從 minetest.net ä¸‹è¼‰éŠæˆ²ï¼Œä¾‹å¦‚ Minetest Game"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr "從 minetest.net 下載一個"
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Dungeons"
+msgstr "地城雜訊"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floating landmasses in the sky"
+msgstr "浮地山密度"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Floatlands (experimental)"
+msgstr "浮地高度"
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "éŠæˆ²"
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Humid rivers"
+msgstr "顯示å¡é©…動程å¼"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "地圖產生器"
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "Mapgen 旗標"
+
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
+msgid "Mapgen-specific flags"
+msgstr "Mapgen v5 特別旗標"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Mountains"
+msgstr "山雜訊"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
-msgstr "鏿“‡ç¯„åœ"
+msgstr "æœªé¸æ“‡éŠæˆ²"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Rivers"
+msgstr "æ²³æµå¤§å°"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -256,21 +374,65 @@ msgid "Seed"
msgstr "種å­"
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Warning: The minimal development test is meant for developers."
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Terrain surface erosion"
+msgstr "地形基礎高度"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Vary river depth"
+msgstr "æ²³æµæ·±åº¦"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
+msgid "Warning: The Development Test is meant for developers."
msgstr "警告:最å°åŒ–的開發測試僅供開發者使用。"
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
-msgstr "ä¸–ç•ŒéŠæˆ²"
+msgstr "世界å稱"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "You have no games installed."
-msgstr "您沒有安è£å­éŠæˆ²ã€‚"
+msgstr "您未安è£éŠæˆ²ã€‚"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "您確定您è¦åˆªé™¤ã€Œ$1ã€å—Žï¼Ÿ"
+msgstr "您確定è¦åˆªé™¤ã€Œ$1ã€å—Žï¼Ÿ"
#: builtin/mainmenu/dlg_delete_content.lua
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
@@ -279,18 +441,16 @@ msgid "Delete"
msgstr "刪除"
#: builtin/mainmenu/dlg_delete_content.lua
-#, fuzzy
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "Mod 管ç†å“¡ï¼šåˆªé™¤ã€Œ$1ã€å¤±æ•—"
+msgstr "pkgmgr:無法刪除「$1ã€"
#: builtin/mainmenu/dlg_delete_content.lua
-#, fuzzy
msgid "pkgmgr: invalid path \"$1\""
-msgstr "Mod 管ç†å“¡ï¼šç„¡æ•ˆçš„ mod 路徑「$1ã€"
+msgstr "pkgmgr:「%1ã€è·¯å¾‘無效"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "刪除世界「$1ã€ï¼Ÿ"
+msgstr "刪除「$1ã€ä¸–界?"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
@@ -304,18 +464,15 @@ msgstr "釿–°å‘½å Mod 包:"
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
-msgstr ""
-"這個Mod包有給定一個明確的å稱在它所屬的 modpack.conf 之中,å¯ä»¥åœ¨è©²æª”案中複寫"
-"Mod包的å稱。"
+msgstr "這個 Mod 包有在其 modpack.conf æä¾›æ˜Žç¢ºçš„åç¨±ï¼Œæœƒè¦†è“‹æ­¤è™•çš„é‡æ–°å‘½å。"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr "(這個設定沒有æè¿°å¯ç”¨ï¼‰"
+msgstr "(未æä¾›è¨­å®šæè¿°ï¼‰"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "2D Noise"
-msgstr "噪音"
+msgstr "2D 雜訊值"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -340,11 +497,12 @@ msgstr "已啟用"
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
msgid "Lacunarity"
-msgstr "安全"
+msgstr "Lacunarity"
#: builtin/mainmenu/dlg_settings_advanced.lua
+#, fuzzy
msgid "Octaves"
-msgstr ""
+msgstr "å€é »ç¨‹"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
@@ -353,7 +511,7 @@ msgstr "補償"
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
msgid "Persistance"
-msgstr "玩家傳é€è·é›¢"
+msgstr "暫留"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
@@ -365,21 +523,19 @@ msgstr "請輸入有效的數字。"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr "æ¢å¾©é è¨­å€¼"
+msgstr "還原至é è¨­å€¼"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
msgstr "è¦æ¨¡"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Select directory"
-msgstr "地圖目錄"
+msgstr "鏿“‡ç›®éŒ„"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Select file"
-msgstr "é¸å– Mod 檔案:"
+msgstr "鏿“‡æª”案"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Show technical names"
@@ -387,156 +543,146 @@ msgstr "顯示技術å稱"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr "值必須大於 $1。"
+msgstr "數值必須大於 $1。"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr "å€¼å¿…é ˆå°æ–¼ $1。"
+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".
+#. It can be enabled in noise settings in
+#. 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
-#, fuzzy
msgid "defaults"
-msgstr "é è¨­éŠæˆ²"
+msgstr "é è¨­å€¼"
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+msgstr "ç·©è§£ (eased)"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "$1 (Enabled)"
-msgstr "已啟用"
+msgstr "$1(已啟用)"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "$1 mods"
-msgstr "3D 模å¼"
+msgstr "$1 個 Mod"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr "å®‰è£ $1 到 $2 失敗"
+msgstr "ç„¡æ³•å®‰è£ $1 至 $2"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "å®‰è£ Mod:找ä¸åˆ° $1 的真實 mod å稱"
+msgstr "å®‰è£ Mod:找ä¸åˆ°ä¸‹è¿°é …目的真實 Mod å稱:$1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
-msgstr "å®‰è£ Mod:找ä¸åˆ° mod 包 $1 é©åˆçš„資料夾å稱"
+msgstr "å®‰è£ Mod:找ä¸åˆ° $1 Mod 包é©åˆçš„資料夾å稱"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"\n"
-"å®‰è£ Modï¼šä¸æ”¯æ´çš„æª”案類型「$1ã€æˆ–æ˜¯ææ¯€çš„壓縮檔"
+msgstr "安è£ï¼šã€Œ%1ã€æª”æ¡ˆé¡žåž‹ä¸æ”¯æ´ï¼Œæˆ–是å°å­˜æª”æå£ž"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install: file: \"$1\""
-msgstr "å®‰è£ Mod:檔案「$1ã€"
+msgstr "安è£ï¼šæª”案:「$1ã€"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to find a valid mod or modpack"
-msgstr "å®‰è£ Mod:找ä¸åˆ° mod 包 $1 é©åˆçš„資料夾å稱"
+msgstr "找ä¸åˆ°æœ‰æ•ˆçš„ Mod 或 Mod 包"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a $1 as a texture pack"
-msgstr "å®‰è£ $1 到 $2 失敗"
+msgstr "無法將 $1 安è£ç‚ºæè³ªåŒ…"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a game as a $1"
-msgstr "å®‰è£ $1 到 $2 失敗"
+msgstr "ç„¡æ³•å°‡éŠæˆ²å®‰è£ç‚º $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a mod as a $1"
-msgstr "å®‰è£ $1 到 $2 失敗"
+msgstr "無法將 Mod 安è£ç‚º $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a modpack as a $1"
-msgstr "å®‰è£ $1 到 $2 失敗"
+msgstr "無法將 Mod 包安è£ç‚º $1"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "ç€è¦½ç·šä¸Šå…§å®¹"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Content"
-msgstr "繼續"
+msgstr "內容"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Disable Texture Pack"
-msgstr "é¸å–æè³ªåŒ…:"
+msgstr "åœç”¨æè³ªåŒ…"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Information:"
-msgstr "Mod 資訊:"
+msgstr "資訊:"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Installed Packages:"
-msgstr "已安è£çš„ Mod:"
+msgstr "已安è£å¥—件:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
msgstr "無相ä¾å…ƒä»¶ã€‚"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "No package description available"
-msgstr "找ä¸åˆ° mod æè¿°"
+msgstr "沒有å¯ç”¨çš„套件æè¿°"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
msgstr "釿–°å‘½å"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Uninstall Package"
-msgstr "解除安è£å·²é¸å–çš„ mod"
+msgstr "解除安è£å¥—ä»¶"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Use Texture Pack"
-msgstr "æè³ªåŒ…"
+msgstr "使用æè³ªåŒ…"
#: builtin/mainmenu/tab_credits.lua
msgid "Active Contributors"
@@ -587,24 +733,28 @@ msgid "Host Server"
msgstr "主機伺æœå™¨"
#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
msgid "Name/Password"
msgstr "å稱ï¼å¯†ç¢¼"
#: builtin/mainmenu/tab_local.lua
msgid "New"
-msgstr "æ–°"
+msgstr "新增"
#: builtin/mainmenu/tab_local.lua
msgid "No world created or selected!"
-msgstr "未有已建立或已é¸å–的世界ï¼"
+msgstr "未建立或é¸å–世界ï¼"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
-msgstr "çŽ©éŠæˆ²"
+msgstr "éŠçŽ©éŠæˆ²"
#: builtin/mainmenu/tab_local.lua
msgid "Port"
-msgstr "埠"
+msgstr "連線埠"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -615,13 +765,12 @@ msgid "Server Port"
msgstr "伺æœå™¨åŸ "
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Start Game"
-msgstr "主æŒéŠæˆ²"
+msgstr "é–‹å§‹éŠæˆ²"
#: builtin/mainmenu/tab_online.lua
msgid "Address / Port"
-msgstr "地å€ï¼åŸ "
+msgstr "地å€ï¼é€£ç·šåŸ "
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
@@ -641,12 +790,11 @@ msgstr "刪除收è—"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Favorite"
-msgstr "最愛"
+msgstr "æ”¶è—"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
msgid "Join Game"
-msgstr "主æŒéŠæˆ²"
+msgstr "åŠ å…¥éŠæˆ²"
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "Name / Password"
@@ -656,6 +804,7 @@ msgstr "å稱ï¼å¯†ç¢¼"
msgid "Ping"
msgstr "Ping"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "已啟用 PvP"
@@ -677,9 +826,8 @@ msgid "8x"
msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "All Settings"
-msgstr "設定"
+msgstr "所有設定"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
@@ -687,12 +835,11 @@ msgstr "å鋸齒:"
#: builtin/mainmenu/tab_settings.lua
msgid "Are you sure to reset your singleplayer world?"
-msgstr "您確定è¦è¦é‡ç½®æ‚¨çš„å–®äººéŠæˆ²ä¸–界嗎?"
+msgstr "您確定è¦é‡è¨­æ‚¨çš„å–®äººéŠæˆ²ä¸–界嗎?"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Autosave Screen Size"
-msgstr "自動儲存視窗大å°"
+msgstr "自動儲存螢幕大å°"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
@@ -715,9 +862,8 @@ msgid "Fancy Leaves"
msgstr "è¯éº—葉å­"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Generate Normal Maps"
-msgstr "生æˆä¸€èˆ¬åœ°åœ–"
+msgstr "產生一般地圖"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
@@ -733,11 +879,11 @@ msgstr "å¦"
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr "ç„¡éŽæ¿¾å™¨"
+msgstr "æ²’æœ‰éŽæ¿¾å™¨"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
-msgstr "無 Mip 貼圖"
+msgstr "沒有 Mip 貼圖"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
@@ -745,7 +891,7 @@ msgstr "çªé¡¯ç¯€é»ž"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr "çªé¡¯ç¯€é»ž"
+msgstr "加入節點外框"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
@@ -769,7 +915,7 @@ msgstr "ç²’å­"
#: builtin/mainmenu/tab_settings.lua
msgid "Reset singleplayer world"
-msgstr "é‡ç½®å–®äººéŠæˆ²ä¸–界"
+msgstr "é‡è¨­å–®äººéŠæˆ²ä¸–界"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
@@ -785,7 +931,7 @@ msgstr "著色器"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "著色器(無法使用)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -808,9 +954,8 @@ msgid "Tone Mapping"
msgstr "色調映射"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Touchthreshold: (px)"
-msgstr "碰觸é™å€¼ï¼ˆåƒç´ ï¼‰"
+msgstr "觸控閾值:(åƒç´ ï¼‰"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
@@ -821,9 +966,8 @@ msgid "Waving Leaves"
msgstr "è‘‰å­æ“ºå‹•"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Liquids"
-msgstr "擺動節點"
+msgstr "擺動液體"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
@@ -835,7 +979,7 @@ msgstr "是"
#: builtin/mainmenu/tab_simple_main.lua
msgid "Config mods"
-msgstr "設定 mod"
+msgstr "設定 Mod"
#: builtin/mainmenu/tab_simple_main.lua
msgid "Main"
@@ -867,7 +1011,7 @@ msgstr "正在載入æè³ª..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr "æ­£åœ¨é‡æ–°æ§‹å»ºè‘—色器..."
+msgstr "æ­£åœ¨é‡æ–°çµ„建著色器..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
@@ -879,7 +1023,7 @@ msgstr "找ä¸åˆ°æˆ–ç„¡æ³•è¼‰å…¥éŠæˆ² \""
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr "ç„¡æ•ˆçš„éŠæˆ²è¦æ ¼ã€‚"
+msgstr "éŠæˆ²è¦æ ¼ç„¡æ•ˆã€‚"
#: src/client/clientlauncher.cpp
msgid "Main Menu"
@@ -895,16 +1039,24 @@ msgstr "玩家å稱太長。"
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr "è«‹é¸æ“‡åå­—!"
+msgstr "è«‹é¸æ“‡å稱ï¼"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr ""
+msgstr "無法開啟æä¾›çš„密碼檔案: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
msgstr "æä¾›çš„世界路徑ä¸å­˜åœ¨ï¼š "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string. Put either "no" or "yes"
+#. into the translation field (literally).
+#. Choose "yes" if the language requires use of the fallback
+#. font, "no" otherwise.
+#. The fallback font is (normally) required for languages with
+#. non-Latin script, like Chinese.
+#. When in doubt, test your translation.
#: src/client/fontengine.cpp
msgid "needs_fallback_font"
msgstr "yes"
@@ -935,12 +1087,13 @@ msgstr "- 模å¼ï¼š "
#: src/client/game.cpp
msgid "- Port: "
-msgstr "- 埠: "
+msgstr "- 連線埠: "
#: src/client/game.cpp
msgid "- Public: "
msgstr "- 公開: "
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
msgstr "- PvP: "
@@ -950,42 +1103,36 @@ msgid "- Server Name: "
msgstr "- 伺æœå™¨å稱: "
#: src/client/game.cpp
-#, fuzzy
msgid "Automatic forward disabled"
-msgstr "å‰é€²éµ"
+msgstr "å·²åœç”¨è‡ªå‹•å‰é€²"
#: src/client/game.cpp
-#, fuzzy
msgid "Automatic forward enabled"
-msgstr "å‰é€²éµ"
+msgstr "已啟用自動å‰é€²"
#: src/client/game.cpp
-#, fuzzy
msgid "Camera update disabled"
-msgstr "æ”å½±æ©Ÿåˆ‡æ›æ›´æ–°æŒ‰éµ"
+msgstr "å·²åœç”¨ç›¸æ©Ÿæ›´æ–°"
#: src/client/game.cpp
-#, fuzzy
msgid "Camera update enabled"
-msgstr "æ”å½±æ©Ÿåˆ‡æ›æ›´æ–°æŒ‰éµ"
+msgstr "已啟用相機更新"
#: src/client/game.cpp
msgid "Change Password"
msgstr "變更密碼"
#: src/client/game.cpp
-#, fuzzy
msgid "Cinematic mode disabled"
-msgstr "é›»å½±æ¨¡å¼æŒ‰éµ"
+msgstr "å·²åœç”¨é›»å½±æ¨¡å¼"
#: src/client/game.cpp
-#, fuzzy
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..."
@@ -1030,7 +1177,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Creating client..."
-msgstr "正在建立客戶端..."
+msgstr "正在建立用戶端..."
#: src/client/game.cpp
msgid "Creating server..."
@@ -1038,16 +1185,15 @@ msgstr "正在建立伺æœå™¨..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr ""
+msgstr "已隱è—除錯資訊åŠåˆ†æžåœ–"
#: src/client/game.cpp
-#, fuzzy
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 ""
@@ -1079,19 +1225,19 @@ msgstr ""
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr ""
+msgstr "å·²åœç”¨ç„¡é™è¦–野"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr ""
+msgstr "已啟用無é™è¦–野"
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr "離開到é¸å–®"
+msgstr "離開,回到é¸å–®"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr "離開到作業系統"
+msgstr "離開,回到作業系統"
#: src/client/game.cpp
msgid "Fast mode disabled"
@@ -1103,7 +1249,7 @@ msgstr "已啟用快速模å¼"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr ""
+msgstr "已啟用快速模å¼ï¼ˆè¨»ï¼šæ²’有「fastã€æ¬Šé™ï¼‰"
#: src/client/game.cpp
msgid "Fly mode disabled"
@@ -1115,17 +1261,15 @@ msgstr "已啟用飛行模å¼"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr ""
+msgstr "已啟用飛行模å¼ï¼ˆè¨»ï¼šæ²’有「flyã€æ¬Šé™ï¼‰"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog disabled"
-msgstr "è‹¥åœç”¨ "
+msgstr "å·²åœç”¨éœ§æ°£"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog enabled"
-msgstr "已啟用"
+msgstr "已啟用霧氣"
#: src/client/game.cpp
msgid "Game info:"
@@ -1141,11 +1285,11 @@ msgstr "正在主æŒä¼ºæœå™¨"
#: src/client/game.cpp
msgid "Item definitions..."
-msgstr "物å“定義..."
+msgstr "定義物å“..."
#: src/client/game.cpp
msgid "KiB/s"
-msgstr "KiB/s"
+msgstr "KiB/ç§’"
#: src/client/game.cpp
msgid "Media..."
@@ -1153,53 +1297,51 @@ msgstr "媒體..."
#: src/client/game.cpp
msgid "MiB/s"
-msgstr "MiB/s"
+msgstr "MiB/ç§’"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "迷你地圖目å‰å·²è¢«éŠæˆ²æˆ– Mod åœç”¨"
#: src/client/game.cpp
-#, fuzzy
msgid "Minimap hidden"
-msgstr "迷你地圖按éµ"
+msgstr "已隱è—迷你地圖"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x1"
-msgstr ""
+msgstr "雷锿¨¡å¼çš„迷你地圖,放大 1 å€"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x2"
-msgstr ""
+msgstr "雷锿¨¡å¼çš„迷你地圖,放大 2 å€"
#: src/client/game.cpp
msgid "Minimap in radar mode, Zoom x4"
-msgstr ""
+msgstr "雷锿¨¡å¼çš„迷你地圖,放大 4 å€"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x1"
-msgstr ""
+msgstr "è¡¨é¢æ¨¡å¼çš„迷你地圖,放大 1 å€"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x2"
-msgstr ""
+msgstr "è¡¨é¢æ¨¡å¼çš„迷你地圖,放大 2 å€"
#: src/client/game.cpp
msgid "Minimap in surface mode, Zoom x4"
-msgstr ""
+msgstr "è¡¨é¢æ¨¡å¼çš„迷你地圖,放大 4 å€"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr ""
+msgstr "å·²åœç”¨ç©¿ç‰†æ¨¡å¼"
#: src/client/game.cpp
-#, fuzzy
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..."
@@ -1215,15 +1357,15 @@ msgstr "開啟"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr ""
+msgstr "å·²åœç”¨ Pitch 移動模å¼"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr ""
+msgstr "已啟用 Pitch 移動模å¼"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "已顯示分æžåœ–"
#: src/client/game.cpp
msgid "Remote server"
@@ -1235,7 +1377,7 @@ msgstr "正在解æžåœ°å€â€¦â€¦"
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr "關閉..."
+msgstr "正在關閉..."
#: src/client/game.cpp
msgid "Singleplayer"
@@ -1246,86 +1388,89 @@ msgid "Sound Volume"
msgstr "音é‡"
#: src/client/game.cpp
-#, fuzzy
msgid "Sound muted"
-msgstr "音é‡"
+msgstr "å·²éœéŸ³"
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
#: src/client/game.cpp
-#, fuzzy
msgid "Sound unmuted"
-msgstr "音é‡"
+msgstr "已喿¶ˆéœéŸ³"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Viewing range changed to %d"
-msgstr "音é‡å·²èª¿æ•´ç‚º%d%%"
+msgstr "已調整視野至 %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr ""
+msgstr "視野已為最大值:%d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr ""
+msgstr "視野已為最å°å€¼ï¼š%d"
#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
-msgstr "音é‡å·²èª¿æ•´ç‚º%d%%"
+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 src/gui/modalMenu.cpp
+#: src/client/game.cpp
msgid "ok"
msgstr "確定"
#: src/client/gameui.cpp
-#, fuzzy
msgid "Chat hidden"
-msgstr "èŠå¤©æŒ‰éµ"
+msgstr "éš±è—èŠå¤©å®¤"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "顯示èŠå¤©å®¤"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "å·²éš±è— HUD"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "已顯示 HUD"
#: src/client/gameui.cpp
-#, fuzzy
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 "應用程å¼"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Backspace"
-msgstr "Back"
+msgstr "退格éµ"
#: src/client/keycode.cpp
msgid "Caps Lock"
-msgstr "Caps Lock"
+msgstr "大寫鎖定éµ"
#: src/client/keycode.cpp
msgid "Clear"
@@ -1369,7 +1514,7 @@ msgstr "è½‰æ› IME"
#: src/client/keycode.cpp
msgid "IME Escape"
-msgstr "逃脫 IME"
+msgstr "跳脫 IME"
#: src/client/keycode.cpp
msgid "IME Mode Change"
@@ -1393,20 +1538,21 @@ msgstr "å·¦éµ"
#: src/client/keycode.cpp
msgid "Left Control"
-msgstr "左邊 Control"
+msgstr "å·¦ Control"
#: src/client/keycode.cpp
msgid "Left Menu"
-msgstr "左邊é¸å–®éµ"
+msgstr "å·¦é¸å–®éµ"
#: src/client/keycode.cpp
msgid "Left Shift"
-msgstr "左邊 Shift"
+msgstr "å·¦ Shift"
#: src/client/keycode.cpp
msgid "Left Windows"
-msgstr "左方視窗"
+msgstr "å·¦ Windows éµ"
+#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
msgid "Menu"
msgstr "é¸å–®"
@@ -1417,7 +1563,7 @@ msgstr "中éµ"
#: src/client/keycode.cpp
msgid "Num Lock"
-msgstr "Num Lock"
+msgstr "數字鎖定éµ"
#: src/client/keycode.cpp
msgid "Numpad *"
@@ -1433,7 +1579,7 @@ msgstr "æ•¸å­—éµ -"
#: src/client/keycode.cpp
msgid "Numpad ."
-msgstr "數字éµè‡ºã€‚"
+msgstr "æ•¸å­—éµ ."
#: src/client/keycode.cpp
msgid "Numpad /"
@@ -1485,11 +1631,11 @@ msgstr "OEM 清除"
#: 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"
@@ -1497,8 +1643,9 @@ msgstr "æš«åœ"
#: src/client/keycode.cpp
msgid "Play"
-msgstr "玩"
+msgstr "éŠçŽ©"
+#. ~ "Print screen" key
#: src/client/keycode.cpp
msgid "Print"
msgstr "列å°"
@@ -1517,24 +1664,25 @@ msgstr "å³éµ"
#: src/client/keycode.cpp
msgid "Right Control"
-msgstr "å³é‚Š Control"
+msgstr "å³ Control"
#: src/client/keycode.cpp
msgid "Right Menu"
-msgstr "å³é‚Šé¸å–®éµ"
+msgstr "å³é¸å–®éµ"
#: src/client/keycode.cpp
msgid "Right Shift"
-msgstr "å³é‚Š Shift"
+msgstr "å³ Shift"
#: src/client/keycode.cpp
msgid "Right Windows"
-msgstr "峿–¹è¦–窗"
+msgstr "å³ Windows éµ"
#: src/client/keycode.cpp
msgid "Scroll Lock"
-msgstr "Scroll Lock"
+msgstr "æ²å‹•鎖定éµ"
+#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
msgstr "鏿“‡"
@@ -1549,11 +1697,11 @@ msgstr "ç¡çœ "
#: src/client/keycode.cpp
msgid "Snapshot"
-msgstr "螢幕截圖"
+msgstr "å¿«ç…§"
#: src/client/keycode.cpp
msgid "Space"
-msgstr "Space"
+msgstr "空白éµ"
#: src/client/keycode.cpp
msgid "Tab"
@@ -1573,7 +1721,7 @@ msgstr "X 按鈕 2"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Zoom"
-msgstr "縮放"
+msgstr "é è¿‘調整"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1581,7 +1729,7 @@ msgstr "密碼ä¸ç¬¦åˆï¼"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
-msgstr ""
+msgstr "註冊並加入"
#: src/gui/guiConfirmRegistration.cpp
#, c-format
@@ -1592,33 +1740,33 @@ 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
-#, fuzzy
msgid "\"Special\" = climb down"
-msgstr "「使用ã€=å‘下攀爬"
+msgstr "\"Special\" = å‘下攀爬"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Autoforward"
-msgstr "å‰é€²"
+msgstr "自動å‰é€²"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
-msgstr ""
+msgstr "自動跳èº"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "後退"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Change camera"
-msgstr "變更按éµ"
+msgstr "變更相機"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
@@ -1633,9 +1781,8 @@ msgid "Console"
msgstr "終端機"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Dec. range"
-msgstr "視野"
+msgstr "é™ä½Žè¦–野"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
@@ -1654,9 +1801,8 @@ msgid "Forward"
msgstr "å‰é€²"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Inc. range"
-msgstr "視野"
+msgstr "æé«˜è¦–野"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
@@ -1672,7 +1818,7 @@ 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)"
@@ -1688,7 +1834,7 @@ msgstr "éœéŸ³"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Next item"
-msgstr "下一個項目"
+msgstr "下一個物å“"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
@@ -1700,7 +1846,7 @@ msgstr "鏿“‡ç¯„åœ"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr "螢幕截圖"
+msgstr "螢幕擷å–"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
@@ -1708,44 +1854,39 @@ msgstr "潛行"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Special"
-msgstr ""
+msgstr "特殊"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle HUD"
-msgstr "切æ›é£›è¡Œ"
+msgstr "åˆ‡æ› HUD"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
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
-#, fuzzy
msgid "Toggle fog"
-msgstr "切æ›é£›è¡Œ"
+msgstr "切æ›éœ§æ°£"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle minimap"
-msgstr "切æ›ç„¡çœç•¥"
+msgstr "切æ›è¿·ä½ åœ°åœ–"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr "切æ›ç„¡çœç•¥"
+msgstr "切æ›ç©¿ç‰†æ¨¡å¼"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
-msgstr "切æ›å¿«é€Ÿ"
+msgstr "åˆ‡æ› Pitch 移動模å¼"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -1772,18 +1913,22 @@ msgid "Exit"
msgstr "離開"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy
msgid "Muted"
-msgstr "éœéŸ³"
+msgstr "å·²éœéŸ³"
#: src/gui/guiVolumeChange.cpp
msgid "Sound Volume: "
msgstr "音é‡ï¼š "
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
msgstr "輸入 "
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
msgid "LANG_CODE"
msgstr "zh_TW"
@@ -1793,13 +1938,16 @@ 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
+#, 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 ""
+msgstr "(Android) ä½¿ç”¨è™›æ“¬æ–æ¡¿è§¸ç™¼ \"aux\" 按éµã€‚\n"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -1839,31 +1987,33 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr ""
+msgstr "控制山脊之形狀或大å°çš„ 2D 雜訊值。"
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "控制波狀丘陵地之形狀或大å°çš„ 2D 雜訊值。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "控制 Step mountains 之形狀或大å°çš„ 2D 雜訊值。"
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
-msgstr ""
+msgstr "控制山脊範åœä¹‹å¤§å°æˆ–產狀的 2D 雜訊值。"
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "æŽ§åˆ¶æ³¢ç‹€ä¸˜é™µåœ°ä¹‹å¤§å°æˆ–產狀的 2D 雜訊值。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr ""
+msgstr "控制 Step mountains 範åœä¹‹å½¢ç‹€æˆ–大å°çš„ 2D 雜訊值。"
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "å®šä½æ²³è°·åŠæ²³é“çš„ 2D 雜訊值。"
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -1874,36 +2024,47 @@ msgid "3D mode"
msgstr "3D 模å¼"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "3D mode parallax strength"
+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"
-"åŒæ™‚ç”¨ä¾†ç”¢ç”Ÿç©ºå³¶å±±åœ°å½¢çµæ§‹ã€‚"
+"å®šç¾©é«˜å±±çµæ§‹èˆ‡é«˜åº¦æ‰€ç”¨çš„ 3D 雜訊值。\n"
+"åŒæ™‚ç”¨ä¾†å®šç¾©ç©ºå³¶å±±åœ°å½¢çµæ§‹ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
-msgstr "產生河æµå³½è°·æ™‚用的雜訊值。"
+msgstr "定義河æµå³½è°·çµæ§‹æ‰€ç”¨çš„ 3D 雜訊值。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D noise defining terrain."
-msgstr "產生大型洞穴時用的雜訊值。"
+msgstr "定義地形所用的 3D 雜訊值。"
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
-msgstr ""
+msgstr "æ‡¸ç©ºã€æ‡¸å´–等山丘的 3D 雜訊值。通常是å°è®Šç•°ã€‚"
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "決定æ¯å€‹åœ°åœ–å€å¡Šä¸­åœ°åŸŽæ•¸é‡çš„ 3D 雜訊值。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"3D support.\n"
"Currently supported:\n"
@@ -1918,12 +2079,14 @@ msgid ""
msgstr ""
"3D 支æ´ã€‚\n"
"ç›®å‰å·²æ”¯æ´ï¼š\n"
-"- 無:無 3D 輸出。\n"
-"- 浮雕:é’色ï¼å“紅色彩色 3D。\n"
-"- äº¤éŒ¯çš„ï¼šåŸºæ–¼åæŒ¯èž¢å¹•的奇ï¼å¶è¡Œæ”¯æ´ã€‚\n"
-"- 頂底:將螢幕分離為頂部ï¼åº•部。\n"
-"- 一邊一個:將螢幕分離為一邊一個。\n"
-"- ç¿»é ï¼šåŸºæ–¼å››é‡ç·©è¡çš„ 3D。"
+"- none:無 3D 輸出。\n"
+"- anaglyph:é’色ï¼å“紅色彩色 3D。\n"
+"- interlacedï¼šåŸºæ–¼åæŒ¯èž¢å¹•的奇ï¼å¶è¡Œæ”¯æ´ã€‚\n"
+"- topbottom:將螢幕分æˆé ‚ï¼åº•部。\n"
+"- sidebyside:將螢幕分離為一邊一個。\n"
+"- crossview: é¬¥é›žçœ¼å¼ 3D\n"
+"- pageflip:基於四é‡ç·©è¡çš„ 3D。\n"
+"註:interlaced 模å¼éœ€è¦å•Ÿç”¨è‘—色器。"
#: src/settings_translation_file.cpp
msgid ""
@@ -1935,35 +2098,34 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr "當伺æœå™¨ç•¶æ©Ÿæ™‚è¦é¡¯ç¤ºåœ¨æ‰€æœ‰å®¢æˆ¶ç«¯ä¸Šçš„訊æ¯ã€‚"
+msgstr "當伺æœå™¨ç•¶æ©Ÿæ™‚è¦é¡¯ç¤ºåœ¨æ‰€æœ‰ç”¨æˆ¶ç«¯ä¸Šçš„訊æ¯ã€‚"
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
-msgstr "當伺æœå™¨é—œæ©Ÿæ™‚è¦é¡¯ç¤ºåœ¨æ‰€æœ‰å®¢æˆ¶ç«¯ä¸Šçš„訊æ¯ã€‚"
+msgstr "當伺æœå™¨é—œæ©Ÿæ™‚è¦é¡¯ç¤ºåœ¨æ‰€æœ‰ç”¨æˆ¶ç«¯ä¸Šçš„訊æ¯ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ABM interval"
-msgstr "地圖儲存間隔"
+msgstr "ABM é–“éš”"
#: src/settings_translation_file.cpp
-msgid "Absolute limit of emerge queues"
+#, fuzzy
+msgid "Absolute limit of queued blocks to emerge"
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 "活動å€å¡Šèª¿æ•´å™¨"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Active block management interval"
msgstr "活動å€å¡Šç®¡ç†é–“éš”"
@@ -1973,7 +2135,7 @@ msgstr "活動å€å¡Šç¯„åœ"
#: src/settings_translation_file.cpp
msgid "Active object send range"
-msgstr "活動目標發é€ç¯„åœ"
+msgstr "活動目標傳é€ç¯„åœ"
#: src/settings_translation_file.cpp
msgid ""
@@ -1996,6 +2158,16 @@ msgid ""
msgstr "調整您螢幕的 DPI 設定(並ä¸åªæœ‰ X11/Android)例如 4K 螢幕。"
#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr "進階"
@@ -2009,13 +2181,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Altitude chill"
-msgstr "高度寒冷"
-
-#: src/settings_translation_file.cpp
msgid "Always fly and fast"
-msgstr "總是啟用飛行與快速"
+msgstr "總是啟用飛行與快速模å¼"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -2023,12 +2190,11 @@ msgstr "環境é®è”½å…‰"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "çŽ©å®¶æ¯ 10 秒能傳é€çš„訊æ¯é‡"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Amplifies the valleys."
-msgstr "放大山谷"
+msgstr "放大山谷。"
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
@@ -2039,31 +2205,32 @@ msgid "Announce server"
msgstr "公佈伺æœå™¨"
#: src/settings_translation_file.cpp
-#, fuzzy
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
+#, fuzzy
msgid "Arm inertia"
-msgstr ""
+msgstr "慣性手臂"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
-msgstr ""
+msgstr "慣性手臂,當相機移動時æä¾›æ›´åŠ çœŸå¯¦çš„æ‰‹è‡‚é‹å‹•。"
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
@@ -2084,7 +2251,7 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
-"在這樣的è·é›¢ä¸‹ï¼Œä¼ºæœå™¨å°‡ç©æ¥µæœ€ä½³åŒ–那些è¦å‚³é€çµ¦å®¢æˆ¶ç«¯çš„æ–¹å¡Šã€‚\n"
+"在這樣的è·é›¢ä¸‹ï¼Œä¼ºæœå™¨å°‡ç©æ¥µæœ€ä½³åŒ–那些è¦å‚³é€çµ¦ç”¨æˆ¶ç«¯çš„æ–¹å¡Šã€‚\n"
"較å°çš„值å¯èƒ½æœƒæå‡æ•ˆèƒ½ï¼Œä½†ä»£åƒ¹æ˜¯ä¸€äº›å¯è¦‹çš„彩ç¾å•題。\n"
"ï¼ˆæœ‰ä¸€äº›åœ¨æ°´ä¸­èˆ‡æ´žç©´ä¸­çš„æ–¹å¡Šå°‡ä¸æœƒè¢«å½©ç¾ï¼Œä»¥åŠæœ‰æ™‚在陸地上)\n"
"將此值設定為大於 max_block_send_distance 將會åœç”¨é€™å€‹æœ€ä½³åŒ–。\n"
@@ -2137,11 +2304,11 @@ msgstr "基礎特權"
#: src/settings_translation_file.cpp
msgid "Beach noise"
-msgstr "æµ·ç˜å™ªéŸ³"
+msgstr "æµ·ç˜é›œè¨Š"
#: src/settings_translation_file.cpp
msgid "Beach noise threshold"
-msgstr "æµ·ç˜å™ªéŸ³é–¾å€¼"
+msgstr "æµ·ç˜é›œè¨Šé–¾å€¼"
#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
@@ -2153,11 +2320,11 @@ msgstr "ç¶å®šåœ°å€"
#: src/settings_translation_file.cpp
msgid "Biome API temperature and humidity noise parameters"
-msgstr "Biome API 溫度與濕度 噪音 åƒæ•¸"
+msgstr "Biome API 溫度與濕度 雜訊 åƒæ•¸"
#: src/settings_translation_file.cpp
msgid "Biome noise"
-msgstr "生物噪音"
+msgstr "生物雜訊"
#: src/settings_translation_file.cpp
msgid "Bits per pixel (aka color depth) in fullscreen mode."
@@ -2202,8 +2369,8 @@ msgstr "映射貼圖"
#: src/settings_translation_file.cpp
msgid ""
-"Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\n"
-"Most users will not need to change this.\n"
+"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 ""
@@ -2222,15 +2389,15 @@ msgstr "æ”å½±æ©Ÿåˆ‡æ›æ›´æ–°æŒ‰éµ"
#: src/settings_translation_file.cpp
msgid "Cave noise"
-msgstr "洞穴噪音"
+msgstr "洞穴雜訊"
#: src/settings_translation_file.cpp
msgid "Cave noise #1"
-msgstr "洞穴噪音 #1"
+msgstr "洞穴雜訊 #1"
#: src/settings_translation_file.cpp
msgid "Cave noise #2"
-msgstr "洞穴噪音 #2"
+msgstr "洞穴雜訊 #2"
#: src/settings_translation_file.cpp
msgid "Cave width"
@@ -2238,11 +2405,11 @@ msgstr "洞穴寬度"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
-msgstr "洞穴1噪音"
+msgstr "洞穴1 雜訊"
#: src/settings_translation_file.cpp
msgid "Cave2 noise"
-msgstr "洞穴2噪音"
+msgstr "洞穴2 雜訊"
#: src/settings_translation_file.cpp
msgid "Cavern limit"
@@ -2250,7 +2417,7 @@ msgstr "洞穴極é™"
#: src/settings_translation_file.cpp
msgid "Cavern noise"
-msgstr "洞穴噪音"
+msgstr "洞穴雜訊"
#: src/settings_translation_file.cpp
msgid "Cavern taper"
@@ -2282,27 +2449,34 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat font size"
+msgstr "字型大å°"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "èŠå¤©æŒ‰éµ"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat log level"
+msgstr "除錯記錄等級"
+
+#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr "連線時的狀態訊æ¯"
+msgstr "èŠå¤©è¨Šæ¯æ•¸ä¸Šé™"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
-msgstr "連線時的狀態訊æ¯"
+msgstr "èŠå¤©è¨Šæ¯æ ¼å¼"
#: src/settings_translation_file.cpp
-#, fuzzy
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"
@@ -2330,20 +2504,20 @@ msgstr "æ¸…é™¤é€æ˜Žæè³ª"
#: src/settings_translation_file.cpp
msgid "Client"
-msgstr "客戶端"
+msgstr "用戶端"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr "客戶端與伺æœå™¨"
+msgstr "用戶端與伺æœå™¨"
#: src/settings_translation_file.cpp
msgid "Client modding"
-msgstr "客戶端修改"
+msgstr "用戶端修改"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Client side modding restrictions"
-msgstr "客戶端修改"
+msgstr "用戶端修改"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
@@ -2363,7 +2537,7 @@ msgstr "雲朵"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
-msgstr "雲朵是客戶端的特效。"
+msgstr "雲朵是用戶端的特效。"
#: src/settings_translation_file.cpp
msgid "Clouds in menu"
@@ -2519,7 +2693,7 @@ msgstr "é™¤éŒ¯è³‡è¨Šåˆ‡æ›æŒ‰éµ"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Debug log file size threshold"
-msgstr "沙漠噪音閾值"
+msgstr "沙漠雜訊閾值"
#: src/settings_translation_file.cpp
msgid "Debug log level"
@@ -2566,6 +2740,11 @@ msgid "Default report format"
msgstr "缺çœå ±å‘Šæ ¼å¼"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Default stack size"
+msgstr "é è¨­éŠæˆ²"
+
+#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
@@ -2644,12 +2823,12 @@ msgid ""
"Delay between mesh updates on the client in ms. Increasing this will slow\n"
"down the rate of mesh updates, thus reducing jitter on slower clients."
msgstr ""
-"在客戶端上的網格間更新延é²ï¼Œä»¥æ¯«ç§’為單ä½ã€‚增加它就會減慢\n"
-"網格更新速率,從而減少在較慢客戶端上的抖動。"
+"在用戶端上的網格間更新延é²ï¼Œä»¥æ¯«ç§’為單ä½ã€‚增加它就會減慢\n"
+"網格更新速率,從而減少在較慢用戶端上的抖動。"
#: src/settings_translation_file.cpp
msgid "Delay in sending blocks after building"
-msgstr "建造åŽç™¼é€å€å¡Šå‰å»¶é²çš„æ™‚é–“"
+msgstr "建造åŽå‚³é€å€å¡Šå‰å»¶é²çš„æ™‚é–“"
#: src/settings_translation_file.cpp
msgid "Delay showing tooltips, stated in milliseconds."
@@ -2676,7 +2855,7 @@ msgstr "伺æœå™¨çš„æè¿°ï¼Œæœƒåœ¨çŽ©å®¶åŠ å…¥æ™‚é¡¯ç¤ºï¼Œä¹Ÿæœƒé¡¯ç¤ºåœ¨ä¼ºæœ
#: src/settings_translation_file.cpp
msgid "Desert noise threshold"
-msgstr "沙漠噪音閾值"
+msgstr "沙漠雜訊閾值"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2733,9 +2912,8 @@ msgid "Dungeon minimum Y"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dungeon noise"
-msgstr "山噪音"
+msgstr "地城雜訊"
#: src/settings_translation_file.cpp
msgid ""
@@ -2748,7 +2926,7 @@ msgid ""
"Enable Lua modding support on client.\n"
"This support is experimental and API can change."
msgstr ""
-"在客戶端上啟用 Lua 修改支æ´ã€‚\n"
+"在用戶端上啟用 Lua 修改支æ´ã€‚\n"
"é€™å€‹æ”¯æ´æ˜¯å¯¦é©—性的,且 API å¯èƒ½æœƒè®Šå‹•。"
#: src/settings_translation_file.cpp
@@ -2807,8 +2985,8 @@ msgid ""
"to new servers, but they may not support all new features that you are "
"expecting."
msgstr ""
-"啟用以讓舊的客戶端無法連線。\n"
-"較舊的客戶端在這個æ„ç¾©ä¸Šç›¸å®¹ï¼Œå®ƒå€‘ä¸æœƒåœ¨é€£ç·šè‡³\n"
+"啟用以讓舊的用戶端無法連線。\n"
+"較舊的用戶端在這個æ„ç¾©ä¸Šç›¸å®¹ï¼Œå®ƒå€‘ä¸æœƒåœ¨é€£ç·šè‡³\n"
"新伺æœå™¨æ™‚當掉,但它們å¯èƒ½æœƒä¸æ”¯æ´ä¸€äº›æ‚¨é æœŸæœƒæœ‰çš„æ–°åŠŸèƒ½ã€‚"
#: src/settings_translation_file.cpp
@@ -2844,7 +3022,7 @@ msgid ""
"Needs enable_ipv6 to be enabled."
msgstr ""
"啟用ï¼åœç”¨åŸ·è¡Œ IPv6 伺æœå™¨ã€‚IPv6 伺æœå™¨å¯èƒ½æœƒé™åˆ¶åªæœ‰\n"
-"IPv6 客戶端æ‰èƒ½é€£ç·šï¼Œå–決於系統設定。\n"
+"IPv6 用戶端æ‰èƒ½é€£ç·šï¼Œå–決於系統設定。\n"
"當 bind_address 被設定時將會被忽略。"
#: src/settings_translation_file.cpp
@@ -2919,6 +3097,16 @@ msgstr ""
"也許會造æˆåœ¨æ–¹å¡Šé–“有視覺空隙。"
#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr "在暫åœé¸å–®ä¸­çš„ FPS"
@@ -2928,7 +3116,7 @@ msgstr "FSAA"
#: src/settings_translation_file.cpp
msgid "Factor noise"
-msgstr "噪音係數"
+msgstr "雜訊係數"
#: src/settings_translation_file.cpp
msgid "Fall bobbing factor"
@@ -2991,7 +3179,7 @@ msgid ""
"the\n"
"Multiplayer Tab."
msgstr ""
-"在 客戶端/伺æœå™¨æ¸…å–®/ 中的檔案包å«äº†é¡¯ç¤ºåœ¨å¤šäººéŠæˆ²åˆ†é ä¸­æ‚¨æœ€æ„›çš„伺æœå™¨ã€‚"
+"在 用戶端/伺æœå™¨æ¸…å–®/ 中的檔案包å«äº†é¡¯ç¤ºåœ¨å¤šäººéŠæˆ²åˆ†é ä¸­æ‚¨æœ€æ„›çš„伺æœå™¨ã€‚"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3000,7 +3188,7 @@ msgstr "填充深度"
#: src/settings_translation_file.cpp
msgid "Filler depth noise"
-msgstr "填充深度噪音"
+msgstr "填充深度雜訊"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
@@ -3024,14 +3212,12 @@ msgid "Filtering"
msgstr "éŽæ¿¾å™¨"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "First of 4 2D noises that together define hill/mountain range height."
-msgstr "二之一 一åŒå®šç¾©éš§é“çš„ 3D 噪音。"
+msgstr "四之一 一åŒå®šç¾©å±±ä¸˜ç¯„åœé«˜åº¦çš„ 2D 雜訊。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "First of two 3D noises that together define tunnels."
-msgstr "二之一 一åŒå®šç¾©éš§é“çš„ 3D 噪音。"
+msgstr "二之一 一åŒå®šç¾©éš§é“çš„ 3D 雜訊。"
#: src/settings_translation_file.cpp
msgid "Fixed map seed"
@@ -3042,6 +3228,41 @@ msgid "Fixed virtual joystick"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland density"
+msgstr "浮地山密度"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland maximum Y"
+msgstr "浮地山高度"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland minimum Y"
+msgstr "浮地山高度"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland noise"
+msgstr "浮地基礎噪音"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland taper exponent"
+msgstr "浮地山密度"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland tapering distance"
+msgstr "浮地基礎噪音"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Floatland water level"
+msgstr "浮地高度"
+
+#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr "飛行按éµ"
@@ -3054,13 +3275,12 @@ msgid "Fog"
msgstr "霧"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fog start"
-msgstr "霧開始"
+msgstr "霧氣開始"
#: src/settings_translation_file.cpp
msgid "Fog toggle key"
-msgstr "霧切æ›éµ"
+msgstr "霧氣切æ›éµ"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
@@ -3096,10 +3316,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
+"玩家èŠå¤©è¨Šæ¯çš„æ ¼å¼ï¼Œä»¥ä¸‹å­—串皆是有效的佔ä½ç¬¦è™Ÿï¼š\n"
+"@nameã€@messageã€@timestamp(å¯é¸ï¼‰"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
@@ -3146,9 +3374,8 @@ msgid "Forward key"
msgstr "å‰é€²éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fourth of 4 2D noises that together define hill/mountain range height."
-msgstr "二之一 一åŒå®šç¾©éš§é“çš„ 3D 噪音。"
+msgstr "四之四 一åŒå®šç¾©å±±ä¸˜ç¯„åœé«˜åº¦çš„ 2D 雜訊。"
#: src/settings_translation_file.cpp
msgid "Fractal type"
@@ -3156,7 +3383,7 @@ msgstr "碎形類型"
#: src/settings_translation_file.cpp
msgid "Fraction of the visible distance at which fog starts to be rendered"
-msgstr "霧開始呈ç¾çš„å¯è¦‹è·é›¢åˆ†æ•¸"
+msgstr "開始呈ç¾éœ§æ°£çš„å¯è¦‹è·é›¢åˆ†æ•¸"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3167,12 +3394,12 @@ msgstr "Freetype å­—åž‹"
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
-msgstr "è¦åœ¨å®¢æˆ¶ç«¯ä¸Šå¾žå¤šé çš„å€å¡Šé–‹å§‹ç”Ÿæˆï¼Œä»¥åœ°åœ–å€å¡Šè¨ˆç®—(16 個節點)。"
+msgstr "è¦åœ¨ç”¨æˆ¶ç«¯ä¸Šå¾žå¤šé çš„å€å¡Šé–‹å§‹ç”Ÿæˆï¼Œä»¥åœ°åœ–å€å¡Šè¨ˆç®—(16 個節點)。"
#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
-msgstr "è¦æŠŠå¤šé çš„å€å¡Šé€åˆ°å®¢æˆ¶ç«¯ï¼Œä»¥åœ°åœ–å€å¡Šè¨ˆç®—(16 個節點)。"
+msgstr "è¦æŠŠå¤šé çš„å€å¡Šé€åˆ°ç”¨æˆ¶ç«¯ï¼Œä»¥åœ°åœ–å€å¡Šè¨ˆç®—(16 個節點)。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3253,9 +3480,8 @@ msgid "Ground level"
msgstr "地é¢é«˜åº¦"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ground noise"
-msgstr "泥土噪音"
+msgstr "地é¢é›œè¨Š"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3298,11 +3524,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Heat blend noise"
-msgstr "熱 æ··åˆ å™ªéŸ³"
+msgstr "熱 æ··åˆ é›œè¨Š"
#: src/settings_translation_file.cpp
msgid "Heat noise"
-msgstr "熱 噪音"
+msgstr "熱 雜訊"
#: src/settings_translation_file.cpp
msgid "Height component of the initial window size."
@@ -3310,11 +3536,11 @@ msgstr "åˆå§‹è¦–窗大å°çš„高度組件。"
#: src/settings_translation_file.cpp
msgid "Height noise"
-msgstr "高度噪音"
+msgstr "高度雜訊"
#: src/settings_translation_file.cpp
msgid "Height select noise"
-msgstr "高度 鏿“‡ 噪音"
+msgstr "高度 鏿“‡ 雜訊"
#: src/settings_translation_file.cpp
msgid "High-precision FPU"
@@ -3329,24 +3555,20 @@ msgid "Hill threshold"
msgstr "山丘閾值"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness1 noise"
-msgstr "å¡åº¦å™ªéŸ³"
+msgstr "多丘陵1 雜訊"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness2 noise"
-msgstr "å¡åº¦å™ªéŸ³"
+msgstr "多丘陵2 雜訊"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness3 noise"
-msgstr "å¡åº¦å™ªéŸ³"
+msgstr "多丘陵3 雜訊"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness4 noise"
-msgstr "å¡åº¦å™ªéŸ³"
+msgstr "多丘陵4 雜訊"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
@@ -3372,171 +3594,139 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—下一個éµ"
#: src/settings_translation_file.cpp
msgid "Hotbar previous key"
-msgstr "Hotbar 上一個éµ"
+msgstr "å¿«æ·åˆ—上一個éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 1 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 1 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 10 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 10 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 11 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 11 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 12 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 12 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 13 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 13 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 14 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 14 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 15 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 15 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 16 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 16 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 17 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 17 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 18 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 18 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 19 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 19 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 2 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 2 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 20 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 20 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 21 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 21 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 22 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 22 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 23 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 23 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 24 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 24 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 25 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 25 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 26 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 26 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 27 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 27 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 28 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 28 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 29 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 29 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 3 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 3 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 30 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 30 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 31 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 31 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 32 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 32 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 4 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 4 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 5 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 5 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 6 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 6 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 7 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 7 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 8 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 8 個槽的按éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 9 key"
-msgstr "Hotbar 下一個éµ"
+msgstr "å¿«æ·åˆ—第 9 個槽的按éµ"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3565,11 +3755,11 @@ msgstr "æ²³æµå¤šå¯¬"
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
-msgstr "溼度 æ··åˆ å™ªéŸ³"
+msgstr "溼度 æ··åˆ é›œè¨Š"
#: src/settings_translation_file.cpp
msgid "Humidity noise"
-msgstr "溼度 噪音"
+msgstr "溼度 雜訊"
#: src/settings_translation_file.cpp
msgid "Humidity variation for biomes."
@@ -3608,9 +3798,9 @@ msgid ""
"so that the utility of noclip mode is reduced."
msgstr ""
"若啟用,伺æœå™¨å°‡æœƒåŸ·è¡ŒåŸºæ–¼çŽ©å®¶çœ¼ç›ä½ç½®çš„\n"
-"地圖å€å¡Šé˜»æ“‹å‰”除。這樣å¯ä»¥æ¸›å°‘å‘客戶端發\n"
-"é€ 50-80% çš„å€å¡Šæ•¸ã€‚å®¢æˆ¶ç«¯å°‡ä¸æœƒæ”¶åˆ°æœ€\n"
-"ä¸å¯èƒ½çœ‹è¦‹çš„內容,而使 noclip 模å¼çš„æ•ˆç”¨é™ä½Žã€‚"
+"地圖å€å¡Šé˜»æ“‹å‰”除。這樣å¯ä»¥æ¸›å°‘å‘用戶端發\n"
+"é€ 50-80% çš„å€å¡Šæ•¸ã€‚ç”¨æˆ¶ç«¯å°‡ä¸æœƒæ”¶åˆ°æœ€\n"
+"ä¸å¯èƒ½çœ‹è¦‹çš„內容,而使穿牆模å¼çš„æ•ˆç”¨é™ä½Žã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3619,7 +3809,7 @@ msgid ""
"This requires the \"noclip\" privilege on the server."
msgstr ""
"若與飛行模å¼ä¸€åŒå•Ÿç”¨ï¼Œçީ家就å¯ä»¥é£›éŽå›ºé«”節點。\n"
-"這需è¦åœ¨ä¼ºæœå™¨ä¸Šçš„「noclipã€ç‰¹æ¬Šã€‚"
+"這需è¦åœ¨ä¼ºæœå™¨ä¸Šçš„「noclipã€æ¬Šé™ã€‚"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3759,7 +3949,7 @@ msgstr "儲存世界中的é‡è¦è®Šæ›´çš„間隔,以秒計。"
#: src/settings_translation_file.cpp
msgid "Interval of sending time of day to clients."
-msgstr "發é€ç•¶æ—¥æ™‚間至客戶端的間隔。"
+msgstr "傳é€ç•¶æ—¥æ™‚間至用戶端的間隔。"
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
@@ -4056,288 +4246,262 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 11th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 11 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 12th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 12 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 13th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 13 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 14th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 14 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 15th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 15 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 16th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 16 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 17th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 17 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 18th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 18 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 19th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 19 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 20th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 20 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 21st hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 21 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 22nd hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 22 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 23rd hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 23 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 24th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 24 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 25th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 25 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 26th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 26 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 27th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 27 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 28th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 28 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 29th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 29 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 30th hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 30 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 31st hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 31 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the 32nd hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 32 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the eighth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 8 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the fifth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 5 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the first hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 1 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the fourth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–上一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 4 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4347,18 +4511,17 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"在快æ·åˆ—é¸å–下一個物å“的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the ninth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 9 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4368,62 +4531,57 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–上一個物å“的按éµã€‚\n"
+"在快æ·åˆ—é¸å–上一個物å“的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the second hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 2 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the seventh hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 7 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the sixth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 6 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the tenth hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 10 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for selecting the third hotbar slot.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"在 hotbar é¸å–下一個物å“的按éµã€‚\n"
+"é¸å–å¿«æ·åˆ—中第 3 個槽的按éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4517,18 +4675,17 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"åˆ‡æ› noclip 模å¼çš„æŒ‰éµã€‚\n"
+"切æ›ç©¿ç‰†æ¨¡å¼çš„æŒ‰éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for toggling pitch move mode.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"åˆ‡æ› noclip 模å¼çš„æŒ‰éµã€‚\n"
+"åˆ‡æ› Pitch Move 模å¼çš„æŒ‰éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4543,13 +4700,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for toggling the display of chat.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"切æ›é¡¯ç¤ºèŠå¤©çš„æŒ‰éµã€‚\n"
+"用來切æ›èŠå¤©é¡¯ç¤ºçš„æŒ‰éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4564,13 +4720,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for toggling the display of fog.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"切æ›é¡¯ç¤ºéœ§çš„æŒ‰éµã€‚\n"
+"切æ›é¡¯ç¤ºéœ§æ°£çš„æŒ‰éµã€‚\n"
"請見 http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4756,14 +4911,6 @@ msgid "Light curve low gradient"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues on disk"
-msgstr "在ç£ç¢Ÿä¸Šå‡ºç¾ä½‡åˆ—çš„é™åˆ¶"
-
-#: src/settings_translation_file.cpp
-msgid "Limit of emerge queues to generate"
-msgstr "è¦ç”Ÿæˆçš„出ç¾ä½‡åˆ—çš„é™åˆ¶"
-
-#: src/settings_translation_file.cpp
msgid ""
"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
"Only mapchunks completely within the mapgen limit are generated.\n"
@@ -4839,6 +4986,11 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Lower Y limit of floatlands."
+msgstr "大型å½éš¨æ©Ÿæ´žç©´çš„ Y 上é™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr "主é¸å–®æŒ‡ä»¤ç¨¿"
@@ -4921,10 +5073,17 @@ msgstr ""
"以「noã€é–‹é ­çš„æ——標字串將會用於明確的åœç”¨å®ƒå€‘。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
-"'ridges' enables the rivers."
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
msgstr ""
+"專用於 Mapgen flat 的地圖生æˆå±¬æ€§ã€‚\n"
+"å¯èƒ½æœƒæœ‰å°‘數的湖泊或是丘陵會在æ‰å¹³çš„世界中生æˆã€‚\n"
+"æœªåœ¨æ——æ¨™å­—ä¸²ä¸­æŒ‡å®šçš„æ——æ¨™å°‡ä¸æœƒè‡ªé è¨­å€¼ä¿®æ”¹ã€‚\n"
+"以「noã€é–‹é ­çš„æ——標字串將會用於明確的åœç”¨å®ƒå€‘。"
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -5025,10 +5184,6 @@ msgid "Mapgen debug"
msgstr "Mapgen 除錯"
#: src/settings_translation_file.cpp
-msgid "Mapgen flags"
-msgstr "Mapgen 旗標"
-
-#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr "Mapgen å稱"
@@ -5094,17 +5249,19 @@ msgid "Maximum number of blocks that can be queued for loading."
msgstr "å¯è¢«æ”¾é€²ä½‡åˆ—內等待載入的最大å€å¡Šæ•¸ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"å¯è¢«æ”¾é€²ä½‡åˆ—內等待生æˆçš„æœ€å¤§å€å¡Šæ•¸ã€‚\n"
"å°‡å…¶è¨­å®šç•™ç©ºå‰‡æœƒè‡ªå‹•é¸æ“‡é©ç•¶çš„值。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
-"Set to blank for an appropriate amount to be chosen automatically."
+"This limit is enforced per player."
msgstr ""
"å¯è¢«æ”¾é€²ä½‡åˆ—內等待從檔案載入的最大å€å¡Šæ•¸ã€‚\n"
"å°‡å…¶è¨­å®šç•™ç©ºå‰‡æœƒè‡ªå‹•é¸æ“‡é©ç•¶çš„值。"
@@ -5118,7 +5275,7 @@ msgid ""
"Maximum number of mapblocks for client to be kept in memory.\n"
"Set to -1 for unlimited amount."
msgstr ""
-"è¦ä¿ç•™åœ¨è¨˜æ†¶é«”中的客戶端地圖å€å¡Šæœ€å¤§å€¼ã€‚\n"
+"è¦ä¿ç•™åœ¨è¨˜æ†¶é«”中的用戶端地圖å€å¡Šæœ€å¤§å€¼ã€‚\n"
"設定為 -1 則ä¸é™åˆ¶æ•¸é‡ã€‚"
#: src/settings_translation_file.cpp
@@ -5129,7 +5286,7 @@ msgid ""
msgstr ""
"æ¯å€‹å‚³é€æ­¥é©Ÿè¦å‚³é€çš„æœ€å¤§å°åŒ…數,若您的網路連線緩慢\n"
"請試著é™ä½Žå®ƒï¼Œä½†è«‹ä¸è¦é™ä½Žåˆ°ä½Žæ–¼å…©å€çš„目標\n"
-"客戶端數。"
+"用戶端數。"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5137,9 +5294,8 @@ msgid "Maximum number of players that can be connected simultaneously."
msgstr "最大å¯åŒæ™‚連線的玩家數。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum number of recent chat messages to show"
-msgstr "強制載入地圖å€å¡Šçš„æœ€å¤§æ•¸é‡ã€‚"
+msgstr "最多顯示幾個最近èŠå¤©è¨Šæ¯"
#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
@@ -5159,7 +5315,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum simultaneous block sends per client"
-msgstr "æ¯å€‹å®¢æˆ¶ç«¯æœ€å¤§åŒæ™‚傳é€å€å¡Šæ•¸"
+msgstr "æ¯å€‹ç”¨æˆ¶ç«¯æœ€å¤§åŒæ™‚傳é€å€å¡Šæ•¸"
#: src/settings_translation_file.cpp
msgid "Maximum size of the out chat queue"
@@ -5200,6 +5356,10 @@ msgid "Method used to highlight selected object."
msgstr "用於çªé¡¯ç‰©ä»¶çš„æ–¹æ³•。"
#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr "迷你地圖"
@@ -5246,21 +5406,20 @@ msgstr "等寬字型大å°"
#: src/settings_translation_file.cpp
msgid "Mountain height noise"
-msgstr "山高度 噪音"
+msgstr "山高度 雜訊"
#: src/settings_translation_file.cpp
msgid "Mountain noise"
-msgstr "山噪音"
+msgstr "山雜訊"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mountain variation noise"
-msgstr "山高度 噪音"
+msgstr "山變異 雜訊"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Mountain zero level"
-msgstr "山噪音"
+msgstr "山雜訊"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
@@ -5272,7 +5431,7 @@ msgstr "æ»‘é¼ éˆæ•åº¦å€æ•¸ã€‚"
#: src/settings_translation_file.cpp
msgid "Mud noise"
-msgstr "泥土噪音"
+msgstr "泥土雜訊"
#: src/settings_translation_file.cpp
msgid ""
@@ -5305,7 +5464,7 @@ msgid ""
"When starting from the main menu, this is overridden."
msgstr ""
"玩家å稱。\n"
-"當執行伺æœå™¨æ™‚,以此å稱連線的客戶端å³ç‚ºç®¡ç†å“¡ã€‚\n"
+"當執行伺æœå™¨æ™‚,以此å稱連線的用戶端å³ç‚ºç®¡ç†å“¡ã€‚\n"
"當從主é¸å–®å•Ÿå‹•時,這個將會被覆寫。"
#: src/settings_translation_file.cpp
@@ -5314,7 +5473,7 @@ msgid ""
msgstr "伺æœå™¨å稱,當玩家加入時會顯示,也會顯示在伺æœå™¨æ¸…單中。"
#: src/settings_translation_file.cpp
-msgid "Near clipping plane"
+msgid "Near plane"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5335,11 +5494,11 @@ msgstr "新使用這需è¦è¼¸å…¥é€™å€‹å¯†ç¢¼ã€‚"
#: src/settings_translation_file.cpp
msgid "Noclip"
-msgstr "Noclip"
+msgstr "穿牆"
#: src/settings_translation_file.cpp
msgid "Noclip key"
-msgstr "Noclip 按éµ"
+msgstr "穿牆按éµ"
#: src/settings_translation_file.cpp
msgid "Node highlighting"
@@ -5351,7 +5510,7 @@ msgstr "NodeTimer é–“éš”"
#: src/settings_translation_file.cpp
msgid "Noises"
-msgstr "噪音"
+msgstr "雜訊"
#: src/settings_translation_file.cpp
msgid "Normalmaps sampling"
@@ -5368,9 +5527,6 @@ msgstr "出ç¾çš„執行緒數"
#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use.\n"
-"WARNING: Currently there are multiple bugs that may cause crashes when\n"
-"'num_emerge_threads' is larger than 1. Until this warning is removed it is\n"
-"strongly recommended this value is set to the default '1'.\n"
"Value 0:\n"
"- Automatic selection. The number of emerge threads will be\n"
"- 'number of processors - 2', with a lower limit of 1.\n"
@@ -5451,10 +5607,6 @@ msgid "Parallax occlusion scale"
msgstr "視差é®è”½ä¿‚數"
#: src/settings_translation_file.cpp
-msgid "Parallax occlusion strength"
-msgstr "視差é®è”½å¼·åº¦"
-
-#: src/settings_translation_file.cpp
msgid ""
"Path of the fallback font.\n"
"If “freetype†setting is enabled: Must be a TrueType font.\n"
@@ -5464,8 +5616,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Path to save screenshots at."
-msgstr "儲存螢幕截圖的路徑。"
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5498,6 +5652,15 @@ msgid "Pause on lost window focus"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Per-player limit of queued blocks to generate"
+msgstr "è¦ç”Ÿæˆçš„出ç¾ä½‡åˆ—çš„é™åˆ¶"
+
+#: src/settings_translation_file.cpp
msgid "Physics"
msgstr "物ç†"
@@ -5573,6 +5736,18 @@ msgid "Profiling"
msgstr "分æž"
#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
msgstr ""
@@ -5600,7 +5775,7 @@ msgstr "範åœé¸æ“‡éµ"
#: src/settings_translation_file.cpp
msgid "Recent Chat Messages"
-msgstr ""
+msgstr "最近èŠå¤©è¨Šæ¯"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5620,6 +5795,8 @@ msgid ""
"Remove color codes from incoming chat messages\n"
"Use this to stop players from being able to use color in their messages"
msgstr ""
+"移除傳入èŠå¤©è¨Šæ¯çš„色彩碼\n"
+"使用這個能防止玩家在訊æ¯ä¸­ä½¿ç”¨è‰²å½©"
#: src/settings_translation_file.cpp
msgid "Replaces the default main menu with a custom one."
@@ -5644,22 +5821,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ridge mountain spread noise"
-msgstr "水下山脊噪音"
+msgstr "山脊展開雜訊"
#: src/settings_translation_file.cpp
msgid "Ridge noise"
-msgstr "山脊噪音"
+msgstr "山脊雜訊"
#: src/settings_translation_file.cpp
msgid "Ridge underwater noise"
-msgstr "水下山脊噪音"
+msgstr "水下山脊雜訊"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ridged mountain size noise"
-msgstr "水下山脊噪音"
+msgstr "山脊大å°é›œè¨Š"
#: src/settings_translation_file.cpp
msgid "Right key"
@@ -5685,9 +5860,8 @@ msgid "River depth"
msgstr "æ²³æµæ·±åº¦"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River noise"
-msgstr "æ²³æµå™ªéŸ³"
+msgstr "æ²³æµé›œè¨Š"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5705,11 +5879,11 @@ msgstr "返回記錄"
#: src/settings_translation_file.cpp
msgid "Rolling hill size noise"
-msgstr ""
+msgstr "波狀丘陵地大å°é›œè¨Š"
#: src/settings_translation_file.cpp
msgid "Rolling hills spread noise"
-msgstr ""
+msgstr "波狀丘陵地展開雜訊"
#: src/settings_translation_file.cpp
msgid "Round minimap"
@@ -5725,7 +5899,7 @@ msgstr "ç•¶ np_beach è¶…éŽæ­¤å€¼æ™‚ï¼Œæœƒç”Ÿæˆæ²™ç˜ã€‚"
#: src/settings_translation_file.cpp
msgid "Save the map received by the client on disk."
-msgstr "由客戶端儲存接收到的地圖到ç£ç¢Ÿä¸Šã€‚"
+msgstr "由用戶端儲存接收到的地圖到ç£ç¢Ÿä¸Šã€‚"
#: src/settings_translation_file.cpp
msgid "Save window size automatically when modified."
@@ -5782,17 +5956,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Seabed noise"
-msgstr "海底噪音"
+msgstr "海底雜訊"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Second of 4 2D noises that together define hill/mountain range height."
-msgstr "二之二 一åŒå®šç¾©éš§é“çš„ 3D 噪音。"
+msgstr "四之二 一åŒå®šç¾©å±±ä¸˜ç¯„åœé«˜åº¦çš„ 2D 雜訊。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Second of two 3D noises that together define tunnels."
-msgstr "二之二 一åŒå®šç¾©éš§é“çš„ 3D 噪音。"
+msgstr "二之二 一åŒå®šç¾©éš§é“çš„ 3D 雜訊。"
#: src/settings_translation_file.cpp
msgid "Security"
@@ -5904,7 +6076,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Set the maximum character length of a chat message sent by clients."
-msgstr ""
+msgstr "設定用戶端傳é€ä¹‹èŠå¤©è¨Šæ¯çš„æœ€å¤§å­—元長度。"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6077,13 +6249,20 @@ msgid ""
"(obviously, remote_media should end with a slash).\n"
"Files that are not present will be fetched the usual way."
msgstr ""
-"客戶端從指定的 URL è€Œä¸æ˜¯ä½¿ç”¨ UDP 抓å–媒體。\n"
+"用戶端從指定的 URL è€Œä¸æ˜¯ä½¿ç”¨ UDP 抓å–媒體。\n"
"$filename 應該å¯ä»¥é€éŽ cURL 從 $remote_media$filename å­˜å–。\n"
"(當然,remote_media éƒ¨ä»½æ‡‰ä»¥æ–œç·šçµæŸï¼‰ã€‚\n"
"æ²’æœ‰åœ¨å…¶ä¸­çš„æª”æ¡ˆå°‡æœƒä»¥å¹³å¸¸çš„æ–¹å¼æŠ“å–。"
#: src/settings_translation_file.cpp
msgid ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6095,17 +6274,22 @@ msgstr "éœæ…‹é‡ç”Ÿé»ž"
#: src/settings_translation_file.cpp
msgid "Steepness noise"
-msgstr "å¡åº¦å™ªéŸ³"
+msgstr "å¡åº¦é›œè¨Š"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Step mountain size noise"
-msgstr "山噪音"
+msgstr "山雜訊"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Step mountain spread noise"
-msgstr "山噪音"
+msgstr "山雜訊"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Strength of 3D mode parallax."
+msgstr "視差強度。"
#: src/settings_translation_file.cpp
msgid "Strength of generated normalmaps."
@@ -6119,10 +6303,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Strength of parallax."
-msgstr "視差強度。"
-
-#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
msgstr "åš´æ ¼å”議檢查"
@@ -6131,6 +6311,20 @@ msgid "Strip color codes"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
msgstr "åŒæ­¥çš„ SQLite"
@@ -6139,9 +6333,8 @@ msgid "Temperature variation for biomes."
msgstr "生態的溫度變化。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Terrain alternative noise"
-msgstr "地形高度噪音"
+msgstr "地形替代雜訊"
#: src/settings_translation_file.cpp
msgid "Terrain base noise"
@@ -6154,11 +6347,11 @@ msgstr "地形高度"
#: src/settings_translation_file.cpp
msgid "Terrain higher noise"
-msgstr "地形高處噪音"
+msgstr "地形高處雜訊"
#: src/settings_translation_file.cpp
msgid "Terrain noise"
-msgstr "地形噪音"
+msgstr "地形雜訊"
#: src/settings_translation_file.cpp
msgid ""
@@ -6166,7 +6359,7 @@ msgid ""
"Controls proportion of world area covered by hills.\n"
"Adjust towards 0.0 for a larger proportion."
msgstr ""
-"山丘的地形噪音閾值。\n"
+"山丘的地形雜訊閾值。\n"
"控制山丘覆蓋世界的比例。\n"
"å¾€ 0.0 調整一å–得較大的比例。"
@@ -6176,13 +6369,13 @@ msgid ""
"Controls proportion of world area covered by lakes.\n"
"Adjust towards 0.0 for a larger proportion."
msgstr ""
-"湖泊的地形噪音閾值。\n"
+"湖泊的地形雜訊閾值。\n"
"控制湖泊覆蓋世界的比例。\n"
"å¾€ 0.0 調整一å–得較大的比例。"
#: src/settings_translation_file.cpp
msgid "Terrain persistence noise"
-msgstr "地形æŒçºŒæ€§å™ªéŸ³"
+msgstr "地形æŒçºŒæ€§é›œè¨Š"
#: src/settings_translation_file.cpp
msgid "Texture path"
@@ -6257,7 +6450,7 @@ msgid ""
"In active blocks objects are loaded and ABMs run.\n"
"This is also the minimum range in which active objects (mobs) are "
"maintained.\n"
-"This should be configured together with active_object_range."
+"This should be configured together with active_object_send_range_blocks."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6328,9 +6521,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Third of 4 2D noises that together define hill/mountain range height."
-msgstr "二之一 一åŒå®šç¾©éš§é“çš„ 3D 噪音。"
+msgstr "四之三 一åŒå®šç¾©å±±ä¸˜ç¯„åœé«˜åº¦çš„ 2D 雜訊。"
#: src/settings_translation_file.cpp
msgid ""
@@ -6354,7 +6546,7 @@ msgstr "時間速度"
#: src/settings_translation_file.cpp
msgid "Timeout for client to remove unused map data from memory."
-msgstr "客戶端從記憶體移除未使用的地圖資料的逾時時間。"
+msgstr "用戶端從記憶體移除未使用的地圖資料的逾時時間。"
#: src/settings_translation_file.cpp
msgid ""
@@ -6377,11 +6569,11 @@ msgstr "工具æç¤ºå»¶é²"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Touch screen threshold"
-msgstr "æµ·ç˜å™ªéŸ³é–¾å€¼"
+msgstr "æµ·ç˜é›œè¨Šé–¾å€¼"
#: src/settings_translation_file.cpp
msgid "Trees noise"
-msgstr "樹林噪音"
+msgstr "樹林雜訊"
#: src/settings_translation_file.cpp
msgid "Trilinear filtering"
@@ -6436,6 +6628,11 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Upper Y limit of floatlands."
+msgstr "大型å½éš¨æ©Ÿæ´žç©´çš„ Y 上é™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
msgstr "使用 3D ç«‹é«”è€Œéžæ‰å¹³çš„雲朵外觀。"
@@ -6509,7 +6706,7 @@ msgid ""
"When noise is < -0.55 terrain is near-flat."
msgstr ""
"垂直地形大å°çš„變化。\n"
-"當噪音 < -0.55 則地形近乎平å¦ã€‚"
+"當雜訊 < -0.55 則地形近乎平å¦ã€‚"
#: src/settings_translation_file.cpp
msgid "Varies depth of biome surface nodes."
@@ -6521,7 +6718,7 @@ msgid ""
"Defines the 'persistence' value for terrain_base and terrain_alt noises."
msgstr ""
"地形粗糙度變化。\n"
-"為 terrain_base 與 terrain_alt 噪音定義 'persistence' 值。"
+"為 terrain_base 與 terrain_alt 雜訊定義 'persistence' 值。"
#: src/settings_translation_file.cpp
msgid "Varies steepness of cliffs."
@@ -6706,7 +6903,7 @@ msgid ""
"Whether players are shown to clients without any range limit.\n"
"Deprecated, use the setting player_transfer_distance instead."
msgstr ""
-"çŽ©å®¶æ˜¯å¦æ‡‰è©²åœ¨å®¢æˆ¶ç«¯ç„¡è·é›¢é™åˆ¶åœ°é¡¯ç¤ºã€‚\n"
+"çŽ©å®¶æ˜¯å¦æ‡‰è©²åœ¨ç”¨æˆ¶ç«¯ç„¡è·é›¢é™åˆ¶åœ°é¡¯ç¤ºã€‚\n"
"已棄用,請用 setting player_transfer_distance 代替。"
#: src/settings_translation_file.cpp
@@ -6718,7 +6915,7 @@ msgid ""
"Whether to ask clients to reconnect after a (Lua) crash.\n"
"Set this to true if your server is set up to restart automatically."
msgstr ""
-"是å¦è¦åœ¨ (Lua) 當掉後詢å•客戶端是å¦é‡æ–°é€£ç·šã€‚\n"
+"是å¦è¦åœ¨ (Lua) 當掉後詢å•用戶端是å¦é‡æ–°é€£ç·šã€‚\n"
"如果您的伺æœå™¨è¢«è¨­å®šç‚ºæœƒè‡ªå‹•釿–°é–‹å•Ÿï¼Œå°‡é€™å€‹è¨­å®šç‚ºçœŸã€‚"
#: src/settings_translation_file.cpp
@@ -6736,7 +6933,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
-msgstr "是å¦é¡¯ç¤ºå®¢æˆ¶ç«¯é™¤éŒ¯è³‡è¨Šï¼ˆèˆ‡æŒ‰ä¸‹ F5 æœ‰åŒæ¨£çš„æ•ˆæžœï¼‰ã€‚"
+msgstr "是å¦é¡¯ç¤ºç”¨æˆ¶ç«¯é™¤éŒ¯è³‡è¨Šï¼ˆèˆ‡æŒ‰ä¸‹ F5 æœ‰åŒæ¨£çš„æ•ˆæžœï¼‰ã€‚"
#: src/settings_translation_file.cpp
msgid "Width component of the initial window size."
@@ -6803,6 +7000,14 @@ msgid "Y-distance over which caverns expand to full size."
msgstr "洞穴拓展至全尺寸的 Y è·é›¢ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
msgstr "å¹³å‡åœ°å½¢è¡¨é¢çš„ Y 高度。"
@@ -6889,22 +7094,6 @@ msgstr "cURL 逾時"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "字型陰影 alpha(ä¸é€æ˜Žåº¦ï¼Œä»‹æ–¼ 0 到 255)。"
-#~ msgid "Floatland mountain height"
-#~ msgstr "浮地山高度"
-
-#, fuzzy
-#~ msgid "Floatland mountain exponent"
-#~ msgstr "浮地山密度"
-
-#~ msgid "Floatland mountain density"
-#~ msgstr "浮地山密度"
-
-#~ msgid "Floatland level"
-#~ msgstr "浮地高度"
-
-#~ msgid "Floatland base noise"
-#~ msgstr "浮地基礎噪音"
-
#~ msgid "Floatland base height noise"
#~ msgstr "浮地基礎高度噪音"
@@ -6943,3 +7132,21 @@ msgstr "cURL 逾時"
#~ msgstr ""
#~ "調整亮度表的伽瑪編碼。較高的數值會較亮。\n"
#~ "這個設定是給客戶端使用的,會被伺æœå™¨å¿½ç•¥ã€‚"
+
+#~ msgid "Path to save screenshots at."
+#~ msgstr "儲存螢幕截圖的路徑。"
+
+#~ msgid "Parallax occlusion strength"
+#~ msgstr "視差é®è”½å¼·åº¦"
+
+#~ msgid "Limit of emerge queues on disk"
+#~ msgstr "在ç£ç¢Ÿä¸Šå‡ºç¾ä½‡åˆ—çš„é™åˆ¶"
+
+#~ msgid "Downloading and installing $1, please wait..."
+#~ msgstr "æ­£åœ¨ä¸‹è¼‰ä¸¦å®‰è£ $1,請ç¨å€™â€¦â€¦"
+
+#~ msgid "Back"
+#~ msgstr "返回"
+
+#~ msgid "Ok"
+#~ msgstr "確定"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 6afa5b8fe..3d6d1b0ea 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -6,7 +6,7 @@ INCLUDE(CheckIncludeFiles)
INCLUDE(CheckLibraryExists)
# Add custom SemiDebug build mode
-set(CMAKE_CXX_FLAGS_SEMIDEBUG "-O1 -g -Wall -Wabi" CACHE STRING
+set(CMAKE_CXX_FLAGS_SEMIDEBUG "-O1 -g -Wall" CACHE STRING
"Flags used by the C++ compiler during semidebug builds."
FORCE
)
@@ -62,7 +62,7 @@ set(USE_GETTEXT FALSE)
if(ENABLE_GETTEXT)
find_package(GettextLib)
- if(GETTEXT_FOUND)
+ if(GETTEXTLIB_FOUND)
if(WIN32)
message(STATUS "GetText library: ${GETTEXT_LIBRARY}")
message(STATUS "GetText DLL: ${GETTEXT_DLL}")
@@ -70,7 +70,7 @@ if(ENABLE_GETTEXT)
endif()
set(USE_GETTEXT TRUE)
message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}")
- endif(GETTEXT_FOUND)
+ endif(GETTEXTLIB_FOUND)
else()
mark_as_advanced(GETTEXT_ICONV_DLL GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT)
message(STATUS "GetText disabled.")
@@ -217,6 +217,26 @@ endif(ENABLE_REDIS)
find_package(SQLite3 REQUIRED)
+OPTION(ENABLE_PROMETHEUS "Enable prometheus client support" FALSE)
+set(USE_PROMETHEUS FALSE)
+
+if(ENABLE_PROMETHEUS)
+ find_path(PROMETHEUS_CPP_INCLUDE_DIR NAMES prometheus/counter.h)
+ find_library(PROMETHEUS_PULL_LIBRARY NAMES prometheus-cpp-pull)
+ find_library(PROMETHEUS_CORE_LIBRARY NAMES prometheus-cpp-core)
+ if(PROMETHEUS_CPP_INCLUDE_DIR AND PROMETHEUS_PULL_LIBRARY AND PROMETHEUS_CORE_LIBRARY)
+ set(PROMETHEUS_LIBRARIES ${PROMETHEUS_PULL_LIBRARY} ${PROMETHEUS_CORE_LIBRARY})
+ set(USE_PROMETHEUS TRUE)
+ include_directories(${PROMETHEUS_CPP_INCLUDE_DIR})
+ endif(PROMETHEUS_CPP_INCLUDE_DIR AND PROMETHEUS_PULL_LIBRARY AND PROMETHEUS_CORE_LIBRARY)
+endif(ENABLE_PROMETHEUS)
+
+if(USE_PROMETHEUS)
+ message(STATUS "Prometheus client enabled.")
+else(USE_PROMETHEUS)
+ message(STATUS "Prometheus client disabled.")
+endif(USE_PROMETHEUS)
+
OPTION(ENABLE_SPATIAL "Enable SpatialIndex AreaStore backend" TRUE)
set(USE_SPATIAL FALSE)
@@ -375,7 +395,6 @@ set(common_SRCS
collision.cpp
content_mapnode.cpp
content_nodemeta.cpp
- content_sao.cpp
convert_json.cpp
craftdef.cpp
debug.cpp
@@ -384,7 +403,6 @@ set(common_SRCS
environment.cpp
face_position_cache.cpp
filesys.cpp
- genericobject.cpp
gettext.cpp
httpfetch.cpp
hud.cpp
@@ -409,6 +427,7 @@ set(common_SRCS
noise.cpp
objdef.cpp
object_properties.cpp
+ particles.cpp
pathfinder.cpp
player.cpp
porting.cpp
@@ -422,10 +441,10 @@ set(common_SRCS
server.cpp
serverenvironment.cpp
serverlist.cpp
- serverobject.cpp
settings.cpp
staticobject.cpp
terminal_chat_console.cpp
+ texture_override.cpp
tileanimation.cpp
tool.cpp
translation.cpp
@@ -437,9 +456,12 @@ set(common_SRCS
${JTHREAD_SRCS}
${common_SCRIPT_SRCS}
${UTIL_SRCS}
- ${UNITTEST_SRCS}
)
+if(BUILD_UNITTESTS)
+ set(common_SRCS ${common_SRCS} ${UNITTEST_SRCS})
+endif()
+
# This gives us the icon and file version information
if(WIN32)
@@ -454,7 +476,7 @@ if(WIN32)
-i${WINRESOURCE_FILE}
-o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- DEPENDS ${WINRESOURCE_FILE})
+ DEPENDS ${WINRESOURCE_FILE} ${MINETEST_EXE_MANIFEST_FILE})
SET(extra_windows_SRCS ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
else(MINGW) # Probably MSVC
set(extra_windows_SRCS ${WINRESOURCE_FILE} ${MINETEST_EXE_MANIFEST_FILE})
@@ -474,8 +496,12 @@ set(client_SRCS
${client_network_SRCS}
${client_irrlicht_changes_SRCS}
${client_SCRIPT_SRCS}
- ${UNITTEST_CLIENT_SRCS}
)
+
+if(BUILD_UNITTESTS)
+ set(client_SRCS ${client_SRCS} ${UNITTEST_CLIENT_SRCS})
+endif()
+
list(SORT client_SRCS)
# Server sources
@@ -592,6 +618,9 @@ if(BUILD_CLIENT)
if (USE_REDIS)
target_link_libraries(${PROJECT_NAME} ${REDIS_LIBRARY})
endif()
+ if (USE_PROMETHEUS)
+ target_link_libraries(${PROJECT_NAME} ${PROMETHEUS_LIBRARIES})
+ endif()
if (USE_SPATIAL)
target_link_libraries(${PROJECT_NAME} ${SPATIAL_LIBRARY})
endif()
@@ -627,6 +656,9 @@ if(BUILD_SERVER)
if (USE_REDIS)
target_link_libraries(${PROJECT_NAME}server ${REDIS_LIBRARY})
endif()
+ if (USE_PROMETHEUS)
+ target_link_libraries(${PROJECT_NAME}server ${PROMETHEUS_LIBRARIES})
+ endif()
if (USE_SPATIAL)
target_link_libraries(${PROJECT_NAME}server ${SPATIAL_LIBRARY})
endif()
@@ -649,7 +681,7 @@ set(GETTEXT_BLACKLISTED_LOCALES
option(APPLY_LOCALE_BLACKLIST "Use a blacklist to avoid broken locales" TRUE)
-if (GETTEXT_FOUND AND APPLY_LOCALE_BLACKLIST)
+if (GETTEXTLIB_FOUND AND APPLY_LOCALE_BLACKLIST)
set(GETTEXT_USED_LOCALES "")
foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
if (NOT ";${GETTEXT_BLACKLISTED_LOCALES};" MATCHES ";${LOCALE};")
@@ -661,7 +693,7 @@ endif()
# Set some optimizations and tweaks
-include(CheckCXXCompilerFlag)
+include(CheckCSourceCompiles)
if(MSVC)
# Visual Studio
@@ -671,9 +703,12 @@ if(MSVC)
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:SSE")
endif()
- #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
- set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF")
-
+
+ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF")
+ else()
+ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF")
+ endif()
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
@@ -695,13 +730,19 @@ else()
else()
set(RELEASE_WARNING_FLAGS "")
endif()
-
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(WARNING_FLAGS "${WARNING_FLAGS} -Wsign-compare")
endif()
+
if(APPLE AND USE_LUAJIT)
# required per http://luajit.org/install.html
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000")
+ elseif(UNIX AND USE_LUAJIT)
+ check_c_source_compiles("#ifndef __aarch64__\n#error\n#endif\nint main(){}" IS_AARCH64)
+ if(IS_AARCH64)
+ # Move text segment below LuaJIT's 47-bit limit (see issue #9367)
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Ttext-segment=0x200000000")
+ endif()
endif()
if(MINGW)
@@ -709,6 +750,11 @@ else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN32_LEAN_AND_MEAN")
endif()
+ # Use a safe subset of flags to speed up math calculations:
+ # - we don't need errno or math exceptions
+ # - we don't deal with Inf/NaN or signed zero
+ set(MATH_FLAGS "-fno-math-errno -fno-trapping-math -ffinite-math-only -fno-signed-zeros")
+
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -Wall -pipe -funroll-loops")
if(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os")
@@ -719,11 +765,11 @@ else()
AND CMAKE_CXX_COMPILER_VERSION MATCHES "^9\\.")
# Clang 9 has broken -ffast-math on glibc
else()
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffast-math")
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MATH_FLAGS}")
endif()
endif(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)")
- set(CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 -Wall -Wabi ${WARNING_FLAGS} ${OTHER_FLAGS}")
- set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wabi ${WARNING_FLAGS} ${OTHER_FLAGS}")
+ set(CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
+ set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
if(USE_GPROF)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
diff --git a/src/activeobject.h b/src/activeobject.h
index 4a2de92cd..85e160d10 100644
--- a/src/activeobject.h
+++ b/src/activeobject.h
@@ -55,6 +55,23 @@ struct ActiveObjectMessage
std::string datastring;
};
+enum ActiveObjectCommand {
+ AO_CMD_SET_PROPERTIES,
+ AO_CMD_UPDATE_POSITION,
+ AO_CMD_SET_TEXTURE_MOD,
+ AO_CMD_SET_SPRITE,
+ AO_CMD_PUNCHED,
+ AO_CMD_UPDATE_ARMOR_GROUPS,
+ AO_CMD_SET_ANIMATION,
+ AO_CMD_SET_BONE_POSITION,
+ AO_CMD_ATTACH_TO,
+ AO_CMD_SET_PHYSICS_OVERRIDE,
+ AO_CMD_OBSOLETE1,
+ // ^ UPDATE_NAMETAG_ATTRIBUTES deprecated since 0.4.14, removed in 5.3.0
+ AO_CMD_SPAWN_INFANT,
+ AO_CMD_SET_ANIMATION_SPEED
+};
+
/*
Parent class for ServerActiveObject and ClientActiveObject
*/
diff --git a/src/client/camera.cpp b/src/client/camera.cpp
index 871ea709d..abc55e4b7 100644
--- a/src/client/camera.cpp
+++ b/src/client/camera.cpp
@@ -86,6 +86,51 @@ Camera::~Camera()
m_wieldmgr->drop();
}
+void Camera::notifyFovChange()
+{
+ LocalPlayer *player = m_client->getEnv().getLocalPlayer();
+ assert(player);
+
+ PlayerFovSpec spec = player->getFov();
+
+ /*
+ * Update m_old_fov_degrees first - it serves as the starting point of the
+ * upcoming transition.
+ *
+ * If an FOV transition is already active, mark current FOV as the start of
+ * the new transition. If not, set it to the previous transition's target FOV.
+ */
+ if (m_fov_transition_active)
+ m_old_fov_degrees = m_curr_fov_degrees;
+ else
+ m_old_fov_degrees = m_server_sent_fov ? m_target_fov_degrees : m_cache_fov;
+
+ /*
+ * Update m_server_sent_fov next - it corresponds to the target FOV of the
+ * upcoming transition.
+ *
+ * Set it to m_cache_fov, if server-sent FOV is 0. Otherwise check if
+ * server-sent FOV is a multiplier, and multiply it with m_cache_fov instead
+ * of overriding.
+ */
+ if (spec.fov == 0.0f) {
+ m_server_sent_fov = false;
+ m_target_fov_degrees = m_cache_fov;
+ } else {
+ m_server_sent_fov = true;
+ m_target_fov_degrees = spec.is_multiplier ? m_cache_fov * spec.fov : spec.fov;
+ }
+
+ if (spec.transition_time > 0.0f)
+ m_fov_transition_active = true;
+
+ // If FOV smooth transition is active, initialize required variables
+ if (m_fov_transition_active) {
+ m_transition_time = spec.transition_time;
+ m_fov_diff = m_target_fov_degrees - m_old_fov_degrees;
+ }
+}
+
bool Camera::successfullyCreated(std::string &error_message)
{
if (!m_playernode) {
@@ -297,9 +342,13 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
if (player->getParent())
player_position = player->getParent()->getPosition();
- if(player->touching_ground &&
- player_position.Y > old_player_position.Y)
- {
+ // Smooth the camera movement when the player instantly moves upward due to stepheight.
+ // To smooth the 'not touching_ground' stepheight, smoothing is necessary when jumping
+ // or swimming (for when moving from liquid to land).
+ // Disable smoothing if climbing or flying, to avoid upwards offset of player model
+ // when seen in 3rd person view.
+ bool flying = g_settings->getBool("free_move") && m_client->checkLocalPrivilege("fly");
+ if (player_position.Y > old_player_position.Y && !player->is_climbing && !flying) {
f32 oldy = old_player_position.Y;
f32 newy = player_position.Y;
f32 t = std::exp(-23 * frametime);
@@ -333,17 +382,21 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
fall_bobbing *= m_cache_fall_bobbing_amount;
}
- // Calculate players eye offset for different camera modes
- v3f PlayerEyeOffset = player->getEyeOffset();
- if (m_camera_mode == CAMERA_MODE_FIRST)
- PlayerEyeOffset += player->eye_offset_first;
- else
- PlayerEyeOffset += player->eye_offset_third;
-
- // Set head node transformation
- m_headnode->setPosition(PlayerEyeOffset+v3f(0,cameratilt*-player->hurt_tilt_strength+fall_bobbing,0));
- m_headnode->setRotation(v3f(player->getPitch(), 0, cameratilt*player->hurt_tilt_strength));
- m_headnode->updateAbsolutePosition();
+ // Calculate and translate the head SceneNode offsets
+ {
+ v3f eye_offset = player->getEyeOffset();
+ if (m_camera_mode == CAMERA_MODE_FIRST)
+ eye_offset += player->eye_offset_first;
+ else
+ eye_offset += player->eye_offset_third;
+
+ // Set head node transformation
+ eye_offset.Y += cameratilt * -player->hurt_tilt_strength + fall_bobbing;
+ m_headnode->setPosition(eye_offset);
+ m_headnode->setRotation(v3f(player->getPitch(), 0,
+ cameratilt * player->hurt_tilt_strength));
+ m_headnode->updateAbsolutePosition();
+ }
// Compute relative camera position and target
v3f rel_cam_pos = v3f(0,0,0);
@@ -458,35 +511,40 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
m_camera_position = my_cp;
/*
- * Apply server-sent FOV. If server doesn't enforce FOV,
- * check for zoom and set to zoom FOV.
- * Otherwise, default to m_cache_fov
+ * Apply server-sent FOV, instantaneous or smooth transition.
+ * If not, check for zoom and set to zoom FOV.
+ * Otherwise, default to m_cache_fov.
*/
-
- f32 fov_degrees;
- PlayerFovSpec fov_spec = player->getFov();
- if (fov_spec.fov > 0.0f) {
- // If server-sent FOV is a multiplier, multiply
- // it with m_cache_fov instead of overriding
- if (fov_spec.is_multiplier)
- fov_degrees = m_cache_fov * fov_spec.fov;
- else
- fov_degrees = fov_spec.fov;
+ if (m_fov_transition_active) {
+ // Smooth FOV transition
+ // Dynamically calculate FOV delta based on frametimes
+ f32 delta = (frametime / m_transition_time) * m_fov_diff;
+ m_curr_fov_degrees += delta;
+
+ // Mark transition as complete if target FOV has been reached
+ if ((m_fov_diff > 0.0f && m_curr_fov_degrees >= m_target_fov_degrees) ||
+ (m_fov_diff < 0.0f && m_curr_fov_degrees <= m_target_fov_degrees)) {
+ m_fov_transition_active = false;
+ m_curr_fov_degrees = m_target_fov_degrees;
+ }
+ } else if (m_server_sent_fov) {
+ // Instantaneous FOV change
+ m_curr_fov_degrees = m_target_fov_degrees;
} else if (player->getPlayerControl().zoom && player->getZoomFOV() > 0.001f) {
// Player requests zoom, apply zoom FOV
- fov_degrees = player->getZoomFOV();
+ m_curr_fov_degrees = player->getZoomFOV();
} else {
// Set to client's selected FOV
- fov_degrees = m_cache_fov;
+ m_curr_fov_degrees = m_cache_fov;
}
- fov_degrees = rangelim(fov_degrees, 1.0f, 160.0f);
+ m_curr_fov_degrees = rangelim(m_curr_fov_degrees, 1.0f, 160.0f);
// FOV and aspect ratio
const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize();
m_aspect = (f32) window_size.X / (f32) window_size.Y;
- m_fov_y = fov_degrees * M_PI / 180.0;
+ m_fov_y = m_curr_fov_degrees * M_PI / 180.0;
// Increase vertical FOV on lower aspect ratios (<16:10)
- m_fov_y *= MYMAX(1.0, MYMIN(1.4, sqrt(16./10. / m_aspect)));
+ m_fov_y *= core::clamp(sqrt(16./10. / m_aspect), 1.0, 1.4);
m_fov_x = 2 * atan(m_aspect * tan(0.5 * m_fov_y));
m_cameranode->setAspectRatio(m_aspect);
m_cameranode->setFOV(m_fov_y);
@@ -538,7 +596,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
m_wieldnode->setPosition(wield_position);
m_wieldnode->setRotation(wield_rotation);
- m_wieldnode->setColor(player->light_color);
+ m_wieldnode->setNodeLightColor(player->light_color);
// Set render distance
updateViewingRange();
@@ -553,14 +611,11 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
const bool walking = movement_XZ && player->touching_ground;
const bool swimming = (movement_XZ || player->swimming_vertical) && player->in_liquid;
const bool climbing = movement_Y && player->is_climbing;
- if ((walking || swimming || climbing) &&
- (!g_settings->getBool("free_move") || !m_client->checkLocalPrivilege("fly"))) {
+ if ((walking || swimming || climbing) && !flying) {
// Start animation
m_view_bobbing_state = 1;
m_view_bobbing_speed = MYMIN(speed.getLength(), 70);
- }
- else if (m_view_bobbing_state == 1)
- {
+ } else if (m_view_bobbing_state == 1) {
// Stop animation
m_view_bobbing_state = 2;
m_view_bobbing_speed = 60;
diff --git a/src/client/camera.h b/src/client/camera.h
index 88de3570a..3a59637bc 100644
--- a/src/client/camera.h
+++ b/src/client/camera.h
@@ -75,6 +75,12 @@ public:
return m_camera_position;
}
+ // Returns the absolute position of the head SceneNode in the world
+ inline v3f getHeadPosition() const
+ {
+ return m_headnode->getAbsolutePosition();
+ }
+
// Get the camera direction (in absolute camera coordinates).
// This has view bobbing applied.
inline v3f getDirection() const
@@ -106,6 +112,9 @@ public:
return MYMAX(m_fov_x, m_fov_y);
}
+ // Notify about new server-sent FOV and initialize smooth FOV transition
+ void notifyFovChange();
+
// Checks if the constructor was able to create the scene nodes
bool successfullyCreated(std::string &error_message);
@@ -180,6 +189,9 @@ private:
Client *m_client;
+ // Default Client FOV (as defined by the "fov" setting)
+ f32 m_cache_fov;
+
// Absolute camera position
v3f m_camera_position;
// Absolute camera direction
@@ -187,6 +199,14 @@ private:
// Camera offset
v3s16 m_camera_offset;
+ // Server-sent FOV variables
+ bool m_server_sent_fov = false;
+ f32 m_curr_fov_degrees, m_old_fov_degrees, m_target_fov_degrees;
+
+ // FOV transition variables
+ bool m_fov_transition_active = false;
+ f32 m_fov_diff, m_transition_time;
+
v2f m_wieldmesh_offset = v2f(55.0f, -35.0f);
v2f m_arm_dir;
v2f m_cam_vel;
@@ -224,7 +244,6 @@ private:
f32 m_cache_fall_bobbing_amount;
f32 m_cache_view_bobbing_amount;
- f32 m_cache_fov;
bool m_arm_inertia;
std::list<Nametag *> m_nametags;
diff --git a/src/client/client.cpp b/src/client/client.cpp
index 770a32b4e..0249e1558 100644
--- a/src/client/client.cpp
+++ b/src/client/client.cpp
@@ -61,6 +61,28 @@ with this program; if not, write to the Free Software Foundation, Inc.,
extern gui::IGUIEnvironment* guienv;
/*
+ Utility classes
+*/
+
+u32 PacketCounter::sum() const
+{
+ u32 n = 0;
+ for (const auto &it : m_packets)
+ n += it.second;
+ return n;
+}
+
+void PacketCounter::print(std::ostream &o) const
+{
+ for (const auto &it : m_packets) {
+ auto name = it.first >= TOCLIENT_NUM_MSG_TYPES ? "?"
+ : toClientCommandTable[it.first].name;
+ o << "cmd " << it.first << " (" << name << ") count "
+ << it.second << std::endl;
+ }
+}
+
+/*
Client
*/
@@ -164,7 +186,7 @@ void Client::loadMods()
infostream << mod.name << " ";
infostream << std::endl;
- // Load and run "mod" scripts
+ // Load "mod" scripts
for (const ModSpec &mod : m_mods) {
if (!string_allowed(mod.name, MODNAME_ALLOWED_CHARS)) {
throw ModError("Error loading mod \"" + mod.name +
@@ -174,7 +196,7 @@ void Client::loadMods()
scanModIntoMemory(mod.name, mod.path);
}
- // Load and run "mod" scripts
+ // Run them
for (const ModSpec &mod : m_mods)
m_script->loadModFromMemory(mod.name);
@@ -183,10 +205,14 @@ void Client::loadMods()
// Run a callback when mods are loaded
m_script->on_mods_loaded();
+
+ // Create objects if they're ready
if (m_state == LC_Ready)
m_script->on_client_ready(m_env.getLocalPlayer());
if (m_camera)
m_script->on_camera_ready(m_camera);
+ if (m_minimap)
+ m_script->on_minimap_ready(m_minimap);
}
bool Client::checkBuiltinIntegrity()
@@ -336,12 +362,14 @@ void Client::step(float dtime)
{
float &counter = m_packetcounter_timer;
counter -= dtime;
- if(counter <= 0.0)
+ if(counter <= 0.0f)
{
- counter = 20.0;
+ counter = 30.0f;
+ u32 sum = m_packetcounter.sum();
+ float avg = sum / counter;
- infostream << "Client packetcounter (" << m_packetcounter_timer
- << "):"<<std::endl;
+ infostream << "Client packetcounter (" << counter << "s): "
+ << "sum=" << sum << " avg=" << avg << "/s" << std::endl;
m_packetcounter.print(infostream);
m_packetcounter.clear();
}
@@ -431,12 +459,9 @@ void Client::step(float dtime)
/*
Handle environment
*/
- // Control local player (0ms)
LocalPlayer *player = m_env.getLocalPlayer();
- assert(player);
- player->applyControl(dtime, &m_env);
- // Step environment
+ // Step environment (also handles player controls)
m_env.step(dtime);
m_sound->step(dtime);
@@ -621,14 +646,17 @@ void Client::step(float dtime)
m_mod_storage_save_timer -= dtime;
if (m_mod_storage_save_timer <= 0.0f) {
- verbosestream << "Saving registered mod storages." << std::endl;
m_mod_storage_save_timer = g_settings->getFloat("server_map_save_interval");
+ int n = 0;
for (std::unordered_map<std::string, ModMetadata *>::const_iterator
it = m_mod_storages.begin(); it != m_mod_storages.end(); ++it) {
if (it->second->isModified()) {
it->second->save(getModStoragePath());
+ n++;
}
}
+ if (n > 0)
+ infostream << "Saved " << n << " modified mod storages." << std::endl;
}
// Write server map
@@ -639,11 +667,9 @@ void Client::step(float dtime)
}
}
-bool Client::loadMedia(const std::string &data, const std::string &filename)
+bool Client::loadMedia(const std::string &data, const std::string &filename,
+ bool from_media_push)
{
- // Silly irrlicht's const-incorrectness
- Buffer<char> data_rw(data.c_str(), data.size());
-
std::string name;
const char *image_ext[] = {
@@ -653,12 +679,15 @@ bool Client::loadMedia(const std::string &data, const std::string &filename)
};
name = removeStringEnd(filename, image_ext);
if (!name.empty()) {
- verbosestream<<"Client: Attempting to load image "
- <<"file \""<<filename<<"\""<<std::endl;
+ TRACESTREAM(<< "Client: Attempting to load image "
+ << "file \"" << filename << "\"" << std::endl);
io::IFileSystem *irrfs = RenderingEngine::get_filesystem();
video::IVideoDriver *vdrv = RenderingEngine::get_video_driver();
+ // Silly irrlicht's const-incorrectness
+ Buffer<char> data_rw(data.c_str(), data.size());
+
// Create an irrlicht memory file
io::IReadFile *rfile = irrfs->createMemoryReadFile(
*data_rw, data_rw.getSize(), "_tempreadfile");
@@ -687,17 +716,15 @@ bool Client::loadMedia(const std::string &data, const std::string &filename)
};
name = removeStringEnd(filename, sound_ext);
if (!name.empty()) {
- verbosestream<<"Client: Attempting to load sound "
- <<"file \""<<filename<<"\""<<std::endl;
- m_sound->loadSoundData(name, data);
- return true;
+ TRACESTREAM(<< "Client: Attempting to load sound "
+ << "file \"" << filename << "\"" << std::endl);
+ return m_sound->loadSoundData(name, data);
}
const char *model_ext[] = {
".x", ".b3d", ".md2", ".obj",
NULL
};
-
name = removeStringEnd(filename, model_ext);
if (!name.empty()) {
verbosestream<<"Client: Storing model into memory: "
@@ -714,9 +741,11 @@ bool Client::loadMedia(const std::string &data, const std::string &filename)
};
name = removeStringEnd(filename, translate_ext);
if (!name.empty()) {
- verbosestream << "Client: Loading translation: "
- << "\"" << filename << "\"" << std::endl;
- g_translations->loadTranslation(data);
+ if (from_media_push)
+ return false;
+ TRACESTREAM(<< "Client: Loading translation: "
+ << "\"" << filename << "\"" << std::endl);
+ g_client_translations->loadTranslation(data);
return true;
}
@@ -1728,8 +1757,11 @@ void Client::afterContentReceived()
text = wgettext("Initializing nodes...");
RenderingEngine::draw_load_screen(text, guienv, m_tsrc, 0, 72);
m_nodedef->updateAliases(m_itemdef);
- for (const auto &path : getTextureDirs())
- m_nodedef->applyTextureOverrides(path + DIR_DELIM + "override.txt");
+ for (const auto &path : getTextureDirs()) {
+ TextureOverrideSource override_source(path + DIR_DELIM + "override.txt");
+ m_nodedef->applyTextureOverrides(override_source.getNodeTileOverrides());
+ m_itemdef->applyTextureOverrides(override_source.getItemTextureOverrides());
+ }
m_nodedef->setNodeRegistrationStatus(true);
m_nodedef->runNodeResolveCallbacks();
delete[] text;
@@ -1786,13 +1818,24 @@ void Client::makeScreenshot()
char timetstamp_c[64];
strftime(timetstamp_c, sizeof(timetstamp_c), "%Y%m%d_%H%M%S", tm);
- std::string filename_base = g_settings->get("screenshot_path")
+ std::string screenshot_dir;
+
+ if (fs::IsPathAbsolute(g_settings->get("screenshot_path")))
+ screenshot_dir = g_settings->get("screenshot_path");
+ else
+ screenshot_dir = porting::path_user + DIR_DELIM + g_settings->get("screenshot_path");
+
+ std::string filename_base = screenshot_dir
+ DIR_DELIM
+ std::string("screenshot_")
+ std::string(timetstamp_c);
std::string filename_ext = "." + g_settings->get("screenshot_format");
std::string filename;
+ // Create the directory if it doesn't already exist.
+ // Otherwise, saving the screenshot would fail.
+ fs::CreateDir(screenshot_dir);
+
u32 quality = (u32)g_settings->getS32("screenshot_quality");
quality = MYMIN(MYMAX(quality, 0), 100) / 100.0 * 255;
diff --git a/src/client/client.h b/src/client/client.h
index 3c0c133e0..cdf516886 100644
--- a/src/client/client.h
+++ b/src/client/client.h
@@ -81,34 +81,24 @@ public:
void add(u16 command)
{
- std::map<u16, u16>::iterator n = m_packets.find(command);
- if(n == m_packets.end())
- {
+ auto n = m_packets.find(command);
+ if (n == m_packets.end())
m_packets[command] = 1;
- }
else
- {
n->second++;
- }
}
void clear()
{
- for (auto &m_packet : m_packets) {
- m_packet.second = 0;
- }
+ m_packets.clear();
}
- void print(std::ostream &o)
- {
- for (const auto &m_packet : m_packets) {
- o << "cmd "<< m_packet.first <<" count "<< m_packet.second << std::endl;
- }
- }
+ u32 sum() const;
+ void print(std::ostream &o) const;
private:
// command, count
- std::map<u16, u16> m_packets;
+ std::map<u16, u32> m_packets;
};
class ClientScripting;
@@ -231,7 +221,7 @@ public:
void handleCommand_FormspecPrepend(NetworkPacket *pkt);
void handleCommand_CSMRestrictionFlags(NetworkPacket *pkt);
void handleCommand_PlayerSpeed(NetworkPacket *pkt);
- void handleCommand_Redirect(NetworkPacket *pkt);
+ void handleCommand_MediaPush(NetworkPacket *pkt);
void ProcessData(NetworkPacket *pkt);
@@ -387,7 +377,8 @@ public:
// The following set of functions is used by ClientMediaDownloader
// Insert a media file appropriately into the appropriate manager
- bool loadMedia(const std::string &data, const std::string &filename);
+ bool loadMedia(const std::string &data, const std::string &filename,
+ bool from_media_push = false);
// Send a request for conventional media transfer
void request_media(const std::vector<std::string> &file_requests);
@@ -502,6 +493,7 @@ private:
Camera *m_camera = nullptr;
Minimap *m_minimap = nullptr;
bool m_minimap_disabled_by_server = false;
+
// Server serialization version
u8 m_server_ser_ver;
@@ -543,7 +535,6 @@ private:
AuthMechanism m_chosen_auth_mech;
void *m_auth_data = nullptr;
-
bool m_access_denied = false;
bool m_access_denied_reconnect = false;
std::string m_access_denied_reason = "";
@@ -552,7 +543,10 @@ private:
bool m_nodedef_received = false;
bool m_activeobjects_received = false;
bool m_mods_loaded = false;
+
ClientMediaDownloader *m_media_downloader;
+ // Set of media filenames pushed by server at runtime
+ std::unordered_set<std::string> m_media_pushed_files;
// time_of_day speed approximation for old protocol
bool m_time_of_day_set = false;
diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp
index 44e36ee0e..895b0193c 100644
--- a/src/client/clientenvironment.cpp
+++ b/src/client/clientenvironment.cpp
@@ -216,6 +216,9 @@ void ClientEnvironment::step(float dtime)
*/
{
+ // Control local player
+ lplayer->applyControl(dtime_part, this);
+
// Apply physics
if (!free_move && !is_climbing) {
// Gravity
@@ -320,20 +323,8 @@ void ClientEnvironment::step(float dtime)
// Step object
cao->step(dtime, this);
- if (update_lighting) {
- // Update lighting
- u8 light = 0;
- bool pos_ok;
-
- // Get node at head
- v3s16 p = cao->getLightPosition();
- MapNode n = this->m_map->getNode(p, &pos_ok);
- if (pos_ok)
- light = n.getLightBlend(day_night_ratio, m_client->ndef());
- else
- light = blend_light(day_night_ratio, LIGHT_SUN, 0);
- cao->updateLight(light);
- }
+ if (update_lighting)
+ cao->updateLight(day_night_ratio);
};
m_ao_manager.step(dtime, cb_state);
@@ -401,18 +392,7 @@ u16 ClientEnvironment::addActiveObject(ClientActiveObject *object)
object->addToScene(m_texturesource);
// Update lighting immediately
- u8 light = 0;
- bool pos_ok;
-
- // Get node at head
- v3s16 p = object->getLightPosition();
- MapNode n = m_map->getNode(p, &pos_ok);
- if (pos_ok)
- light = n.getLightBlend(getDayNightRatio(), m_client->ndef());
- else
- light = blend_light(getDayNightRatio(), LIGHT_SUN, 0);
-
- object->updateLight(light);
+ object->updateLight(getDayNightRatio());
return object->getId();
}
@@ -449,7 +429,7 @@ void ClientEnvironment::addActiveObject(u16 id, u8 type,
// Object initialized:
if ((obj = getActiveObject(new_id))) {
// Final step is to update all children which are already known
- // Data provided by GENERIC_CMD_SPAWN_INFANT
+ // Data provided by AO_CMD_SPAWN_INFANT
const auto &children = obj->getAttachmentChildIds();
for (auto c_id : children) {
if (auto *o = getActiveObject(c_id))
diff --git a/src/client/clientevent.h b/src/client/clientevent.h
index f5689c25b..9bd31efce 100644
--- a/src/client/clientevent.h
+++ b/src/client/clientevent.h
@@ -21,8 +21,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
#include "irrlichttypes_bloated.h"
-#include "hud.h"
-#include "skyparams.h"
+
+struct ParticleParameters;
+struct ParticleSpawnerParameters;
+struct SkyboxParams;
+struct SunParams;
+struct MoonParams;
+struct StarParams;
enum ClientEventType : u8
{
@@ -77,44 +82,12 @@ struct ClientEvent
} show_formspec;
// struct{
//} textures_updated;
+ ParticleParameters *spawn_particle;
struct
{
- v3f *pos;
- v3f *vel;
- v3f *acc;
- f32 expirationtime;
- f32 size;
- bool collisiondetection;
- bool collision_removal;
- bool object_collision;
- bool vertical;
- std::string *texture;
- struct TileAnimationParams animation;
- u8 glow;
- } spawn_particle;
- struct
- {
- u16 amount;
- f32 spawntime;
- v3f *minpos;
- v3f *maxpos;
- v3f *minvel;
- v3f *maxvel;
- v3f *minacc;
- v3f *maxacc;
- f32 minexptime;
- f32 maxexptime;
- f32 minsize;
- f32 maxsize;
- bool collisiondetection;
- bool collision_removal;
- bool object_collision;
+ ParticleSpawnerParameters *p;
u16 attached_id;
- bool vertical;
- std::string *texture;
u64 id;
- struct TileAnimationParams animation;
- u8 glow;
} add_particlespawner;
struct
{
@@ -136,6 +109,7 @@ struct ClientEvent
v3f *world_pos;
v2s32 *size;
s16 z_index;
+ std::string *text2;
} hudadd;
struct
{
diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp
index f0553dd96..ce16797e6 100644
--- a/src/client/clientlauncher.cpp
+++ b/src/client/clientlauncher.cpp
@@ -56,6 +56,20 @@ bool isMenuActive()
// Passed to menus to allow disconnecting and exiting
MainGameCallback *g_gamecallback = nullptr;
+#if 0
+// This can be helpful for the next code cleanup
+static void dump_start_data(const GameStartData &data)
+{
+ std::cout <<
+ "\ndedicated " << (int)data.is_dedicated_server <<
+ "\nport " << data.socket_port <<
+ "\nworld_path " << data.world_spec.path <<
+ "\nworld game " << data.world_spec.gameid <<
+ "\ngame path " << data.game_spec.path <<
+ "\nplayer name " << data.name <<
+ "\naddress " << data.address << std::endl;
+}
+#endif
ClientLauncher::~ClientLauncher()
{
@@ -74,9 +88,16 @@ ClientLauncher::~ClientLauncher()
}
-bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
+bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
{
- init_args(game_params, cmd_args);
+ /* This function is called when a client must be started.
+ * Covered cases:
+ * - Singleplayer (address but map provided)
+ * - Join server (no map but address provided)
+ * - Local server (for main menu only)
+ */
+
+ init_args(start_data, cmd_args);
// List video modes if requested
if (list_video_modes)
@@ -105,7 +126,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
}
RenderingEngine::get_instance()->setupTopLevelWindow(PROJECT_NAME_C);
-
+
/*
This changes the minimum allowed number of vertices in a VBO.
Default is 500.
@@ -216,7 +237,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
core::rect<s32>(0, 0, 10000, 10000));
bool game_has_run = launch_game(error_message, reconnect_requested,
- game_params, cmd_args);
+ start_data, cmd_args);
// Reset the reconnect_requested flag
reconnect_requested = false;
@@ -240,15 +261,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
g_settings->updateConfigFile(g_settings_path.c_str());
break;
}
-
-
- if (current_playername.length() > PLAYERNAME_SIZE-1) {
- error_message = gettext("Player name too long.");
- playername = current_playername.substr(0, PLAYERNAME_SIZE-1);
- g_settings->set("name", playername);
- continue;
- }
-
+
RenderingEngine::get_video_driver()->setTextureCreationFlag(
video::ETCF_CREATE_MIP_MAPS, g_settings->getBool("mip_map"));
@@ -259,18 +272,11 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
the_game(
kill,
- random_input,
input,
- worldspec.path,
- current_playername,
- current_password,
- current_address,
- current_port,
+ start_data,
error_message,
chat_backend,
- &reconnect_requested,
- gamespec,
- simple_singleplayer_mode
+ &reconnect_requested
);
RenderingEngine::get_scene_manager()->clear();
@@ -312,31 +318,27 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
return retval;
}
-void ClientLauncher::init_args(GameParams &game_params, const Settings &cmd_args)
+void ClientLauncher::init_args(GameStartData &start_data, const Settings &cmd_args)
{
-
skip_main_menu = cmd_args.getFlag("go");
- // FIXME: This is confusing (but correct)
-
- /* If world_path is set then override it unless skipping the main menu using
- * the --go command line param. Else, give preference to the address
- * supplied on the command line
- */
- address = g_settings->get("address");
- if (!game_params.world_path.empty() && !skip_main_menu)
- address = "";
- else if (cmd_args.exists("address"))
- address = cmd_args.get("address");
+ start_data.address = g_settings->get("address");
+ if (cmd_args.exists("address")) {
+ // Join a remote server
+ start_data.address = cmd_args.get("address");
+ start_data.world_path.clear();
+ }
+ if (!start_data.world_path.empty()) {
+ // Start a singleplayer instance
+ start_data.address = "";
+ }
- playername = g_settings->get("name");
+ start_data.name = g_settings->get("name");
if (cmd_args.exists("name"))
- playername = cmd_args.get("name");
+ start_data.name = cmd_args.get("name");
list_video_modes = cmd_args.getFlag("videomodes");
- use_freetype = g_settings->getBool("freetype");
-
random_input = g_settings->getBool("random_input")
|| cmd_args.getFlag("random-input");
}
@@ -376,28 +378,20 @@ void ClientLauncher::init_input()
}
bool ClientLauncher::launch_game(std::string &error_message,
- bool reconnect_requested, GameParams &game_params,
+ bool reconnect_requested, GameStartData &start_data,
const Settings &cmd_args)
{
- // Initialize menu data
- MainMenuData menudata;
- menudata.address = address;
- menudata.name = playername;
- menudata.password = password;
- menudata.port = itos(game_params.socket_port);
- menudata.script_data.errormessage = error_message;
- menudata.script_data.reconnect_requested = reconnect_requested;
-
+ // Prepare and check the start data to launch a game
+ std::string error_message_lua = error_message;
error_message.clear();
if (cmd_args.exists("password"))
- menudata.password = cmd_args.get("password");
-
+ start_data.password = cmd_args.get("password");
if (cmd_args.exists("password-file")) {
std::ifstream passfile(cmd_args.get("password-file"));
if (passfile.good()) {
- getline(passfile, menudata.password);
+ getline(passfile, start_data.password);
} else {
error_message = gettext("Provided password file "
"failed to open: ")
@@ -408,88 +402,112 @@ bool ClientLauncher::launch_game(std::string &error_message,
}
// If a world was commanded, append and select it
- if (!game_params.world_path.empty()) {
- worldspec.gameid = getWorldGameId(game_params.world_path, true);
- worldspec.name = _("[--world parameter]");
+ // This is provieded by "get_world_from_cmdline()", main.cpp
+ if (!start_data.world_path.empty()) {
+ auto &spec = start_data.world_spec;
- if (worldspec.gameid.empty()) { // Create new
- worldspec.gameid = g_settings->get("default_game");
- worldspec.name += " [new]";
+ spec.path = start_data.world_path;
+ spec.gameid = getWorldGameId(spec.path, true);
+ spec.name = _("[--world parameter]");
+
+ if (spec.gameid.empty()) { // Create new
+ spec.gameid = g_settings->get("default_game");
+ spec.name += " [new]";
}
- worldspec.path = game_params.world_path;
}
/* Show the GUI menu
*/
+ std::string server_name, server_description;
+ start_data.local_server = false;
if (!skip_main_menu) {
+ // Initialize menu data
+ // TODO: Re-use existing structs (GameStartData)
+ MainMenuData menudata;
+ menudata.address = start_data.address;
+ menudata.name = start_data.name;
+ menudata.password = start_data.password;
+ menudata.port = itos(start_data.socket_port);
+ menudata.script_data.errormessage = error_message_lua;
+ menudata.script_data.reconnect_requested = reconnect_requested;
+
main_menu(&menudata);
// Skip further loading if there was an exit signal.
if (*porting::signal_handler_killstatus())
return false;
- address = menudata.address;
+ if (!menudata.script_data.errormessage.empty()) {
+ /* The calling function will pass this back into this function upon the
+ * next iteration (if any) causing it to be displayed by the GUI
+ */
+ error_message = menudata.script_data.errormessage;
+ return false;
+ }
+
int newport = stoi(menudata.port);
if (newport != 0)
- game_params.socket_port = newport;
-
- simple_singleplayer_mode = menudata.simple_singleplayer_mode;
+ start_data.socket_port = newport;
+ // Update world information using main menu data
std::vector<WorldSpec> worldspecs = getAvailableWorlds();
- if (menudata.selected_world >= 0
- && menudata.selected_world < (int)worldspecs.size()) {
+ int world_index = menudata.selected_world;
+ if (world_index >= 0 && world_index < (int)worldspecs.size()) {
g_settings->set("selected_world_path",
- worldspecs[menudata.selected_world].path);
- worldspec = worldspecs[menudata.selected_world];
+ worldspecs[world_index].path);
+ start_data.world_spec = worldspecs[world_index];
}
+
+ start_data.name = menudata.name;
+ start_data.password = menudata.password;
+ start_data.address = std::move(menudata.address);
+ server_name = menudata.servername;
+ server_description = menudata.serverdescription;
+
+ start_data.local_server = !menudata.simple_singleplayer_mode &&
+ start_data.address.empty();
}
- if (!menudata.script_data.errormessage.empty()) {
- /* The calling function will pass this back into this function upon the
- * next iteration (if any) causing it to be displayed by the GUI
- */
- error_message = menudata.script_data.errormessage;
+ if (!RenderingEngine::run())
return false;
- }
- if (menudata.name.empty() && !simple_singleplayer_mode) {
+ if (!start_data.isSinglePlayer() && start_data.name.empty()) {
error_message = gettext("Please choose a name!");
errorstream << error_message << std::endl;
return false;
}
- playername = menudata.name;
- password = menudata.password;
-
- current_playername = playername;
- current_password = password;
- current_address = address;
- current_port = game_params.socket_port;
-
// If using simple singleplayer mode, override
- if (simple_singleplayer_mode) {
- assert(!skip_main_menu);
- current_playername = "singleplayer";
- current_password = "";
- current_address = "";
- current_port = myrand_range(49152, 65535);
+ if (start_data.isSinglePlayer()) {
+ start_data.name = "singleplayer";
+ start_data.password = "";
+ start_data.socket_port = myrand_range(49152, 65535);
} else {
- g_settings->set("name", playername);
- if (!address.empty()) {
+ g_settings->set("name", start_data.name);
+ if (!start_data.address.empty()) {
ServerListSpec server;
- server["name"] = menudata.servername;
- server["address"] = menudata.address;
- server["port"] = menudata.port;
- server["description"] = menudata.serverdescription;
+ server["name"] = server_name;
+ server["address"] = start_data.address;
+ server["port"] = itos(start_data.socket_port);
+ server["description"] = server_description;
ServerList::insert(server);
}
}
+ if (start_data.name.length() > PLAYERNAME_SIZE - 1) {
+ error_message = gettext("Player name too long.");
+ start_data.name.resize(PLAYERNAME_SIZE);
+ g_settings->set("name", start_data.name);
+ return false;
+ }
+
+ auto &worldspec = start_data.world_spec;
infostream << "Selected world: " << worldspec.name
<< " [" << worldspec.path << "]" << std::endl;
- if (current_address.empty()) { // If local game
+ if (start_data.address.empty()) {
+ // For singleplayer and local server
if (worldspec.path.empty()) {
error_message = gettext("No world selected and no address "
"provided. Nothing to do.");
@@ -505,8 +523,8 @@ bool ClientLauncher::launch_game(std::string &error_message,
}
// Load gamespec for required game
- gamespec = findWorldSubgame(worldspec.path);
- if (!gamespec.isValid() && !game_params.game_spec.isValid()) {
+ start_data.game_spec = findWorldSubgame(worldspec.path);
+ if (!start_data.game_spec.isValid()) {
error_message = gettext("Could not find or load game \"")
+ worldspec.gameid + "\"";
errorstream << error_message << std::endl;
@@ -516,15 +534,7 @@ bool ClientLauncher::launch_game(std::string &error_message,
if (porting::signal_handler_killstatus())
return true;
- if (game_params.game_spec.isValid() &&
- game_params.game_spec.id != worldspec.gameid) {
- warningstream << "Overriding gamespec from \""
- << worldspec.gameid << "\" to \""
- << game_params.game_spec.id << "\"" << std::endl;
- gamespec = game_params.game_spec;
- }
-
- if (!gamespec.isValid()) {
+ if (!start_data.game_spec.isValid()) {
error_message = gettext("Invalid gamespec.");
error_message += " (world.gameid=" + worldspec.gameid + ")";
errorstream << error_message << std::endl;
@@ -532,6 +542,7 @@ bool ClientLauncher::launch_game(std::string &error_message,
}
}
+ start_data.world_path = start_data.world_spec.path;
return true;
}
diff --git a/src/client/clientlauncher.h b/src/client/clientlauncher.h
index 2702895d6..b280d8e6b 100644
--- a/src/client/clientlauncher.h
+++ b/src/client/clientlauncher.h
@@ -32,15 +32,15 @@ public:
~ClientLauncher();
- bool run(GameParams &game_params, const Settings &cmd_args);
+ bool run(GameStartData &start_data, const Settings &cmd_args);
-protected:
- void init_args(GameParams &game_params, const Settings &cmd_args);
+private:
+ void init_args(GameStartData &start_data, const Settings &cmd_args);
bool init_engine();
void init_input();
bool launch_game(std::string &error_message, bool reconnect_requested,
- GameParams &game_params, const Settings &cmd_args);
+ GameStartData &start_data, const Settings &cmd_args);
void main_menu(MainMenuData *menudata);
@@ -48,23 +48,8 @@ protected:
bool list_video_modes = false;
bool skip_main_menu = false;
- bool use_freetype = false;
bool random_input = false;
- std::string address = "";
- std::string playername = "";
- std::string password = "";
InputHandler *input = nullptr;
MyEventReceiver *receiver = nullptr;
gui::IGUISkin *skin = nullptr;
- gui::IGUIFont *font = nullptr;
- SubgameSpec gamespec;
- WorldSpec worldspec;
- bool simple_singleplayer_mode = false;
-
- // These are set up based on the menu and other things
- // TODO: Are these required since there's already playername, password, etc
- std::string current_playername = "inv£lid";
- std::string current_password = "";
- std::string current_address = "does-not-exist";
- int current_port = 0;
};
diff --git a/src/client/clientmedia.cpp b/src/client/clientmedia.cpp
index 6da99bbbf..8cd3b6bcc 100644
--- a/src/client/clientmedia.cpp
+++ b/src/client/clientmedia.cpp
@@ -35,6 +35,15 @@ static std::string getMediaCacheDir()
return porting::path_cache + DIR_DELIM + "media";
}
+bool clientMediaUpdateCache(const std::string &raw_hash, const std::string &filedata)
+{
+ FileCache media_cache(getMediaCacheDir());
+ std::string sha1_hex = hex_encode(raw_hash);
+ if (!media_cache.exists(sha1_hex))
+ return media_cache.update(sha1_hex, filedata);
+ return true;
+}
+
/*
ClientMediaDownloader
*/
@@ -559,7 +568,6 @@ bool ClientMediaDownloader::checkAndLoad(
return true;
}
-
/*
Minetest Hashset File Format
diff --git a/src/client/clientmedia.h b/src/client/clientmedia.h
index 92831082c..5a918535b 100644
--- a/src/client/clientmedia.h
+++ b/src/client/clientmedia.h
@@ -33,6 +33,11 @@ struct HTTPFetchResult;
#define MTHASHSET_FILE_SIGNATURE 0x4d544853 // 'MTHS'
#define MTHASHSET_FILE_NAME "index.mth"
+// Store file into media cache (unless it exists already)
+// Validating the hash is responsibility of the caller
+bool clientMediaUpdateCache(const std::string &raw_hash,
+ const std::string &filedata);
+
class ClientMediaDownloader
{
public:
diff --git a/src/client/clientobject.h b/src/client/clientobject.h
index 12e0db35b..ecd8059ef 100644
--- a/src/client/clientobject.h
+++ b/src/client/clientobject.h
@@ -41,10 +41,9 @@ public:
virtual void addToScene(ITextureSource *tsrc) {}
virtual void removeFromScene(bool permanent) {}
- // 0 <= light_at_pos <= LIGHT_SUN
- virtual void updateLight(u8 light_at_pos) {}
- virtual void updateLightNoCheck(u8 light_at_pos) {}
- virtual v3s16 getLightPosition() { return v3s16(0, 0, 0); }
+
+ virtual void updateLight(u32 day_night_ratio) {}
+
virtual bool getCollisionBox(aabb3f *toset) const { return false; }
virtual bool getSelectionBox(aabb3f *toset) const { return false; }
virtual bool collideWithObjects() const { return false; }
diff --git a/src/clientsimpleobject.h b/src/client/clientsimpleobject.h
index f4a40bcd3..f4a40bcd3 100644
--- a/src/clientsimpleobject.h
+++ b/src/client/clientsimpleobject.h
diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp
index fa2ed43c9..db78f7a65 100644
--- a/src/client/content_cao.cpp
+++ b/src/client/content_cao.cpp
@@ -162,6 +162,15 @@ static void setBillboardTextureMatrix(scene::IBillboardSceneNode *bill,
matrix.setTextureScale(txs, tys);
}
+// Evaluate transform chain recursively; irrlicht does not do this for us
+static void updatePositionRecursive(scene::ISceneNode *node)
+{
+ scene::ISceneNode *parent = node->getParent();
+ if (parent)
+ updatePositionRecursive(parent);
+ node->updateAbsolutePosition();
+}
+
/*
TestCAO
*/
@@ -181,8 +190,7 @@ public:
void addToScene(ITextureSource *tsrc);
void removeFromScene(bool permanent);
- void updateLight(u8 light_at_pos);
- v3s16 getLightPosition();
+ void updateLight(u32 day_night_ratio);
void updateNodePos();
void step(float dtime, ClientEnvironment *env);
@@ -254,13 +262,8 @@ void TestCAO::removeFromScene(bool permanent)
m_node = NULL;
}
-void TestCAO::updateLight(u8 light_at_pos)
-{
-}
-
-v3s16 TestCAO::getLightPosition()
+void TestCAO::updateLight(u32 day_night_ratio)
{
- return floatToInt(m_position, BS);
}
void TestCAO::updateNodePos()
@@ -304,7 +307,6 @@ void TestCAO::processMessage(const std::string &data)
GenericCAO
*/
-#include "genericobject.h"
#include "clientobject.h"
GenericCAO::GenericCAO(Client *client, ClientEnvironment *env):
@@ -476,6 +478,7 @@ void GenericCAO::setAttachment(int parent_id, const std::string &bone, v3f posit
parent->addAttachmentChild(m_id);
}
+
updateAttachments();
}
@@ -576,16 +579,23 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
m_visuals_expired = false;
- if (!m_prop.is_visible) {
+ if (!m_prop.is_visible)
return;
- }
+
+ infostream << "GenericCAO::addToScene(): " << m_prop.visual << std::endl;
if (m_enable_shaders) {
IShaderSource *shader_source = m_client->getShaderSource();
- u32 shader_id = shader_source->getShader(
- "object_shader",
- TILE_MATERIAL_BASIC,
- NDT_NORMAL);
+ MaterialType material_type;
+
+ if (m_prop.shaded && m_prop.glow == 0)
+ material_type = (m_prop.use_texture_alpha) ?
+ TILE_MATERIAL_ALPHA : TILE_MATERIAL_BASIC;
+ else
+ material_type = (m_prop.use_texture_alpha) ?
+ TILE_MATERIAL_PLAIN_ALPHA : TILE_MATERIAL_PLAIN;
+
+ u32 shader_id = shader_source->getShader("object_shader", material_type, NDT_NORMAL);
m_material_type = shader_source->getShaderInfo(shader_id).material;
} else {
m_material_type = (m_prop.use_texture_alpha) ?
@@ -593,7 +603,6 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
}
auto grabMatrixNode = [this] {
- infostream << "GenericCAO::addToScene(): " << m_prop.visual << std::endl;
m_matrixnode = RenderingEngine::get_scene_manager()->
addDummyTransformationSceneNode();
m_matrixnode->grab();
@@ -714,6 +723,8 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
mesh->drop();
m_meshnode->setScale(m_prop.visual_size);
+ m_meshnode->setMaterialFlag(video::EMF_BACK_FACE_CULLING,
+ m_prop.backface_culling);
setSceneNodeMaterial(m_meshnode);
} else if (m_prop.visual == "mesh") {
@@ -724,6 +735,14 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
addAnimatedMeshSceneNode(mesh, m_matrixnode);
m_animated_meshnode->grab();
mesh->drop(); // The scene node took hold of it
+
+ if (!checkMeshNormals(mesh)) {
+ infostream << "GenericCAO: recalculating normals for mesh "
+ << m_prop.mesh << std::endl;
+ m_smgr->getMeshManipulator()->
+ recalculateNormals(mesh, true, false);
+ }
+
m_animated_meshnode->animateJoints(); // Needed for some animations
m_animated_meshnode->setScale(m_prop.visual_size);
@@ -775,15 +794,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
if (node && m_matrixnode)
node->setParent(m_matrixnode);
- if (node && !m_prop.nametag.empty() && !m_is_local_player) {
- // Add nametag
- v3f pos;
- pos.Y = m_prop.selectionbox.MaxEdge.Y + 0.3f;
- m_nametag = m_client->getCamera()->addNametag(node,
- m_prop.nametag, m_prop.nametag_color,
- pos);
- }
-
+ updateNametag();
updateNodePos();
updateAnimation();
updateBonePosition();
@@ -791,37 +802,35 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
setNodeLight(m_last_light);
}
-void GenericCAO::updateLight(u8 light_at_pos)
-{
- if (g_settings->getBool("fullbright"))
- light_at_pos = 255;
-
- // Don't update light of attached one
- if (getParent() != NULL) {
+void GenericCAO::updateLight(u32 day_night_ratio)
+{
+ if (m_glow < 0)
return;
- }
- updateLightNoCheck(light_at_pos);
+ u8 light_at_pos = 0;
+ bool pos_ok = false;
- // Update light of all children
- for (u16 i : m_attachment_child_ids) {
- ClientActiveObject *obj = m_env->getActiveObject(i);
- if (obj) {
- obj->updateLightNoCheck(light_at_pos);
+ if (g_settings->getBool("fullbright"))
+ light_at_pos = 255;
+
+ v3s16 pos[3];
+ u16 npos = getLightPosition(pos);
+ for (u16 i = 0; i < npos; i++) {
+ bool this_ok;
+ MapNode n = m_env->getMap().getNode(pos[i], &this_ok);
+ if (this_ok) {
+ u8 this_light = n.getLightBlend(day_night_ratio, m_client->ndef());
+ light_at_pos = MYMAX(light_at_pos, this_light);
+ pos_ok = true;
}
}
-}
+ if (!pos_ok)
+ light_at_pos = blend_light(day_night_ratio, LIGHT_SUN, 0);
-void GenericCAO::updateLightNoCheck(u8 light_at_pos)
-{
- if (m_glow < 0)
- return;
-
- u8 li = decode_light(light_at_pos + m_glow);
-
- if (li != m_last_light) {
- m_last_light = li;
- setNodeLight(li);
+ u8 light = decode_light(light_at_pos + m_glow);
+ if (light != m_last_light) {
+ m_last_light = light;
+ setNodeLight(light);
}
}
@@ -830,24 +839,26 @@ void GenericCAO::setNodeLight(u8 light)
video::SColor color(255, light, light, light);
if (m_prop.visual == "wielditem" || m_prop.visual == "item") {
- // Since these types of visuals are using their own shader
- // they should be handled separately
if (m_wield_meshnode)
- m_wield_meshnode->setColor(color);
- } else if (m_enable_shaders) {
- scene::ISceneNode *node = getSceneNode();
-
- if (node == nullptr)
- return;
+ m_wield_meshnode->setNodeLightColor(color);
+ return;
+ }
+ if (m_enable_shaders) {
if (m_prop.visual == "upright_sprite") {
+ if (!m_meshnode)
+ return;
+
scene::IMesh *mesh = m_meshnode->getMesh();
for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) {
scene::IMeshBuffer *buf = mesh->getMeshBuffer(i);
- video::SMaterial &material = buf->getMaterial();
- material.EmissiveColor = color;
+ buf->getMaterial().EmissiveColor = color;
}
} else {
+ scene::ISceneNode *node = getSceneNode();
+ if (!node)
+ return;
+
for (u32 i = 0; i < node->getMaterialCount(); ++i) {
video::SMaterial &material = node->getMaterial(i);
material.EmissiveColor = color;
@@ -864,12 +875,49 @@ void GenericCAO::setNodeLight(u8 light)
}
}
-v3s16 GenericCAO::getLightPosition()
+u16 GenericCAO::getLightPosition(v3s16 *pos)
{
- if (m_is_player)
- return floatToInt(m_position + v3f(0, 0.5 * BS, 0), BS);
+ const auto &box = m_prop.collisionbox;
+ pos[0] = floatToInt(m_position + box.MinEdge * BS, BS);
+ pos[1] = floatToInt(m_position + box.MaxEdge * BS, BS);
+
+ // Skip center pos if it falls into the same node as Min or MaxEdge
+ if ((box.MaxEdge - box.MinEdge).getLengthSQ() < 3.0f)
+ return 2;
+ pos[2] = floatToInt(m_position + box.getCenter() * BS, BS);
+ return 3;
+}
+
+void GenericCAO::updateNametag()
+{
+ if (m_is_local_player) // No nametag for local player
+ return;
+
+ if (m_prop.nametag.empty()) {
+ // Delete nametag
+ if (m_nametag) {
+ m_client->getCamera()->removeNametag(m_nametag);
+ m_nametag = nullptr;
+ }
+ return;
+ }
+
+ scene::ISceneNode *node = getSceneNode();
+ if (!node)
+ return;
- return floatToInt(m_position, BS);
+ v3f pos;
+ pos.Y = m_prop.selectionbox.MaxEdge.Y + 0.3f;
+ if (!m_nametag) {
+ // Add nametag
+ m_nametag = m_client->getCamera()->addNametag(node,
+ m_prop.nametag, m_prop.nametag_color, pos);
+ } else {
+ // Update nametag
+ m_nametag->nametag_text = m_prop.nametag;
+ m_nametag->nametag_color = m_prop.nametag_color;
+ m_nametag->nametag_pos = pos;
+ }
}
void GenericCAO::updateNodePos()
@@ -1075,10 +1123,13 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
updateTextures(m_previous_texture_modifier);
}
}
+
if (!getParent() && std::fabs(m_prop.automatic_rotate) > 0.001) {
- m_rotation.Y += dtime * m_prop.automatic_rotate * 180 / M_PI;
- rot_translator.val_current = m_rotation;
- updateNodePos();
+ // This is the child node's rotation. It is only used for automatic_rotate.
+ v3f local_rot = node->getRotation();
+ local_rot.Y = modulo360f(local_rot.Y - dtime * core::RADTODEG *
+ m_prop.automatic_rotate);
+ node->setRotation(local_rot);
}
if (!getParent() && m_prop.automatic_face_movement_dir &&
@@ -1099,6 +1150,18 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
rot_translator.val_current = m_rotation;
updateNodePos();
}
+
+ if (m_animated_meshnode) {
+ // Everything must be updated; the whole transform
+ // chain as well as the animated mesh node.
+ // Otherwise, bone attachments would be relative to
+ // a position that's one frame old.
+ if (m_matrixnode)
+ updatePositionRecursive(m_matrixnode);
+ m_animated_meshnode->updateAbsolutePosition();
+ m_animated_meshnode->animateJoints();
+ updateBonePosition();
+ }
}
void GenericCAO::updateTexturePos()
@@ -1363,16 +1426,53 @@ void GenericCAO::updateBonePosition()
return;
m_animated_meshnode->setJointMode(irr::scene::EJUOR_CONTROL); // To write positions to the mesh on render
- for(std::unordered_map<std::string, core::vector2d<v3f>>::const_iterator
- ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) {
- std::string bone_name = (*ii).first;
- v3f bone_pos = (*ii).second.X;
- v3f bone_rot = (*ii).second.Y;
+ for (auto &it : m_bone_position) {
+ std::string bone_name = it.first;
irr::scene::IBoneSceneNode* bone = m_animated_meshnode->getJointNode(bone_name.c_str());
- if(bone)
- {
- bone->setPosition(bone_pos);
+ if (bone) {
+ bone->setPosition(it.second.X);
+ bone->setRotation(it.second.Y);
+ }
+ }
+
+ // search through bones to find mistakenly rotated bones due to bug in Irrlicht
+ for (u32 i = 0; i < m_animated_meshnode->getJointCount(); ++i) {
+ irr::scene::IBoneSceneNode *bone = m_animated_meshnode->getJointNode(i);
+ if (!bone)
+ continue;
+
+ //If bone is manually positioned there is no need to perform the bug check
+ bool skip = false;
+ for (auto &it : m_bone_position) {
+ if (it.first == bone->getName()) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip)
+ continue;
+
+ // Workaround for Irrlicht bug
+ // We check each bone to see if it has been rotated ~180deg from its expected position due to a bug in Irricht
+ // when using EJUOR_CONTROL joint control. If the bug is detected we update the bone to the proper position
+ // and update the bones transformation.
+ v3f bone_rot = bone->getRelativeTransformation().getRotationDegrees();
+ float offset = fabsf(bone_rot.X - bone->getRotation().X);
+ if (offset > 179.9f && offset < 180.1f) {
bone->setRotation(bone_rot);
+ bone->updateAbsolutePosition();
+ }
+ }
+ // The following is needed for set_bone_pos to propagate to
+ // attached objects correctly.
+ // Irrlicht ought to do this, but doesn't when using EJUOR_CONTROL.
+ for (u32 i = 0; i < m_animated_meshnode->getJointCount(); ++i) {
+ auto bone = m_animated_meshnode->getJointNode(i);
+ // Look for the root bone.
+ if (bone && bone->getParent() == m_animated_meshnode) {
+ // Update entire skeleton.
+ bone->updateAbsolutePositionOfAllChildren();
+ break;
}
}
}
@@ -1397,15 +1497,17 @@ void GenericCAO::updateAttachments()
if (!parent) { // Detach or don't attach
if (m_matrixnode) {
+ v3s16 camera_offset = m_env->getCameraOffset();
v3f old_pos = getPosition();
m_matrixnode->setParent(m_smgr->getRootSceneNode());
- getPosRotMatrix().setTranslation(old_pos);
+ getPosRotMatrix().setTranslation(old_pos - intToFloat(camera_offset, BS));
m_matrixnode->updateAbsolutePosition();
}
}
else // Attach
{
+ parent->updateAttachments();
scene::ISceneNode *parent_node = parent->getSceneNode();
scene::IAnimatedMeshSceneNode *parent_animated_mesh_node =
parent->getAnimatedMeshSceneNode();
@@ -1415,6 +1517,7 @@ void GenericCAO::updateAttachments()
if (m_matrixnode && parent_node) {
m_matrixnode->setParent(parent_node);
+ parent_node->updateAbsolutePosition();
getPosRotMatrix().setTranslation(m_attachment_position);
//setPitchYawRoll(getPosRotMatrix(), m_attachment_rotation);
// use Irrlicht eulers instead
@@ -1424,21 +1527,55 @@ void GenericCAO::updateAttachments()
}
}
+bool GenericCAO::visualExpiryRequired(const ObjectProperties &new_) const
+{
+ const ObjectProperties &old = m_prop;
+ /* Visuals do not need to be expired for:
+ * - nametag props: handled by updateNametag()
+ * - textures: handled by updateTextures()
+ * - sprite props: handled by updateTexturePos()
+ * - glow: handled by updateLight()
+ * - any other properties that do not change appearance
+ */
+
+ bool uses_legacy_texture = new_.wield_item.empty() &&
+ (new_.visual == "wielditem" || new_.visual == "item");
+ // Ordered to compare primitive types before std::vectors
+ return old.backface_culling != new_.backface_culling ||
+ old.is_visible != new_.is_visible ||
+ old.mesh != new_.mesh ||
+ old.shaded != new_.shaded ||
+ old.use_texture_alpha != new_.use_texture_alpha ||
+ old.visual != new_.visual ||
+ old.visual_size != new_.visual_size ||
+ old.wield_item != new_.wield_item ||
+ old.colors != new_.colors ||
+ (uses_legacy_texture && old.textures != new_.textures);
+}
+
void GenericCAO::processMessage(const std::string &data)
{
//infostream<<"GenericCAO: Got message"<<std::endl;
std::istringstream is(data, std::ios::binary);
// command
u8 cmd = readU8(is);
- if (cmd == GENERIC_CMD_SET_PROPERTIES) {
- m_prop = gob_read_set_properties(is);
+ if (cmd == AO_CMD_SET_PROPERTIES) {
+ ObjectProperties newprops;
+ newprops.deSerialize(is);
+
+ // Check what exactly changed
+ bool expire_visuals = visualExpiryRequired(newprops);
+ bool textures_changed = m_prop.textures != newprops.textures;
+
+ // Apply changes
+ m_prop = std::move(newprops);
m_selection_box = m_prop.selectionbox;
m_selection_box.MinEdge *= BS;
m_selection_box.MaxEdge *= BS;
- m_tx_size.X = 1.0 / m_prop.spritediv.X;
- m_tx_size.Y = 1.0 / m_prop.spritediv.Y;
+ m_tx_size.X = 1.0f / m_prop.spritediv.X;
+ m_tx_size.Y = 1.0f / m_prop.spritediv.Y;
if(!m_initial_tx_basepos_set){
m_initial_tx_basepos_set = true;
@@ -1458,18 +1595,25 @@ void GenericCAO::processMessage(const std::string &data)
if ((m_is_player && !m_is_local_player) && m_prop.nametag.empty())
m_prop.nametag = m_name;
- expireVisuals();
- } else if (cmd == GENERIC_CMD_UPDATE_POSITION) {
+ if (expire_visuals) {
+ expireVisuals();
+ } else {
+ infostream << "GenericCAO: properties updated but expiring visuals"
+ << " not necessary" << std::endl;
+ if (textures_changed) {
+ // don't update while punch texture modifier is active
+ if (m_reset_textures_timer < 0)
+ updateTextures(m_current_texture_modifier);
+ }
+ updateNametag();
+ }
+ } else if (cmd == AO_CMD_UPDATE_POSITION) {
// Not sent by the server if this object is an attachment.
// We might however get here if the server notices the object being detached before the client.
m_position = readV3F32(is);
m_velocity = readV3F32(is);
m_acceleration = readV3F32(is);
-
- if (std::fabs(m_prop.automatic_rotate) < 0.001f)
- m_rotation = readV3F32(is);
- else
- readV3F32(is);
+ m_rotation = readV3F32(is);
m_rotation = wrapDegrees_0_360_v3f(m_rotation);
bool do_interpolate = readU8(is);
@@ -1493,16 +1637,16 @@ void GenericCAO::processMessage(const std::string &data)
}
rot_translator.update(m_rotation, false, update_interval);
updateNodePos();
- } else if (cmd == GENERIC_CMD_SET_TEXTURE_MOD) {
+ } else if (cmd == AO_CMD_SET_TEXTURE_MOD) {
std::string mod = deSerializeString(is);
- // immediatly reset a engine issued texture modifier if a mod sends a different one
+ // immediately reset a engine issued texture modifier if a mod sends a different one
if (m_reset_textures_timer > 0) {
m_reset_textures_timer = -1;
updateTextures(m_previous_texture_modifier);
}
updateTextures(mod);
- } else if (cmd == GENERIC_CMD_SET_SPRITE) {
+ } else if (cmd == AO_CMD_SET_SPRITE) {
v2s16 p = readV2S16(is);
int num_frames = readU16(is);
float framelength = readF32(is);
@@ -1514,7 +1658,7 @@ void GenericCAO::processMessage(const std::string &data)
m_tx_select_horiz_by_yawpitch = select_horiz_by_yawpitch;
updateTexturePos();
- } else if (cmd == GENERIC_CMD_SET_PHYSICS_OVERRIDE) {
+ } else if (cmd == AO_CMD_SET_PHYSICS_OVERRIDE) {
float override_speed = readF32(is);
float override_jump = readF32(is);
float override_gravity = readF32(is);
@@ -1534,7 +1678,7 @@ void GenericCAO::processMessage(const std::string &data)
player->physics_override_sneak_glitch = sneak_glitch;
player->physics_override_new_move = new_move;
}
- } else if (cmd == GENERIC_CMD_SET_ANIMATION) {
+ } else if (cmd == AO_CMD_SET_ANIMATION) {
// TODO: change frames send as v2s32 value
v2f range = readV2F32(is);
if (!m_is_local_player) {
@@ -1568,17 +1712,17 @@ void GenericCAO::processMessage(const std::string &data)
updateAnimation();
}
}
- } else if (cmd == GENERIC_CMD_SET_ANIMATION_SPEED) {
+ } else if (cmd == AO_CMD_SET_ANIMATION_SPEED) {
m_animation_speed = readF32(is);
updateAnimationSpeed();
- } else if (cmd == GENERIC_CMD_SET_BONE_POSITION) {
+ } else if (cmd == AO_CMD_SET_BONE_POSITION) {
std::string bone = deSerializeString(is);
v3f position = readV3F32(is);
v3f rotation = readV3F32(is);
m_bone_position[bone] = core::vector2d<v3f>(position, rotation);
- updateBonePosition();
- } else if (cmd == GENERIC_CMD_ATTACH_TO) {
+ // updateBonePosition(); now called every step
+ } else if (cmd == AO_CMD_ATTACH_TO) {
u16 parent_id = readS16(is);
std::string bone = deSerializeString(is);
v3f position = readV3F32(is);
@@ -1589,7 +1733,7 @@ void GenericCAO::processMessage(const std::string &data)
// localplayer itself can't be attached to localplayer
if (!m_is_local_player)
m_is_visible = !m_attached_to_local;
- } else if (cmd == GENERIC_CMD_PUNCHED) {
+ } else if (cmd == AO_CMD_PUNCHED) {
u16 result_hp = readU16(is);
// Use this instead of the send damage to not interfere with prediction
@@ -1610,13 +1754,11 @@ void GenericCAO::processMessage(const std::string &data)
m_smgr, m_env, m_position,
v2f(m_prop.visual_size.X, m_prop.visual_size.Y) * BS);
m_env->addSimpleObject(simple);
- } else if (m_reset_textures_timer < 0) {
- // TODO: Execute defined fast response
- // Flashing shall suffice as there is no definition
+ } else if (m_reset_textures_timer < 0 && !m_prop.damage_texture_modifier.empty()) {
m_reset_textures_timer = 0.05;
if(damage >= 2)
m_reset_textures_timer += 0.05 * damage;
- updateTextures(m_current_texture_modifier + "^[brighten");
+ updateTextures(m_current_texture_modifier + m_prop.damage_texture_modifier);
}
}
@@ -1627,7 +1769,7 @@ void GenericCAO::processMessage(const std::string &data)
if (!m_is_player)
clearChildAttachments();
}
- } else if (cmd == GENERIC_CMD_UPDATE_ARMOR_GROUPS) {
+ } else if (cmd == AO_CMD_UPDATE_ARMOR_GROUPS) {
m_armor_groups.clear();
int armor_groups_size = readU16(is);
for(int i=0; i<armor_groups_size; i++)
@@ -1636,22 +1778,14 @@ void GenericCAO::processMessage(const std::string &data)
int rating = readS16(is);
m_armor_groups[name] = rating;
}
- } else if (cmd == GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) {
- // Deprecated, for backwards compatibility only.
- readU8(is); // version
- m_prop.nametag_color = readARGB8(is);
- if (m_nametag != NULL) {
- m_nametag->nametag_color = m_prop.nametag_color;
- v3f pos;
- pos.Y = m_prop.collisionbox.MaxEdge.Y + 0.3f;
- m_nametag->nametag_pos = pos;
- }
- } else if (cmd == GENERIC_CMD_SPAWN_INFANT) {
+ } else if (cmd == AO_CMD_SPAWN_INFANT) {
u16 child_id = readU16(is);
u8 type = readU8(is); // maybe this will be useful later
(void)type;
addAttachmentChild(child_id);
+ } else if (cmd == AO_CMD_OBSOLETE1) {
+ // Don't do anything and also don't log a warning
} else {
warningstream << FUNCTION_NAME
<< ": unknown command or outdated client \""
@@ -1687,13 +1821,11 @@ bool GenericCAO::directReportPunch(v3f dir, const ItemStack *punchitem,
v2f(m_prop.visual_size.X, m_prop.visual_size.Y) * BS);
m_env->addSimpleObject(simple);
}
- // TODO: Execute defined fast response
- // Flashing shall suffice as there is no definition
- if (m_reset_textures_timer < 0) {
+ if (m_reset_textures_timer < 0 && !m_prop.damage_texture_modifier.empty()) {
m_reset_textures_timer = 0.05;
if (result.damage >= 2)
m_reset_textures_timer += 0.05 * result.damage;
- updateTextures(m_current_texture_modifier + "^[brighten");
+ updateTextures(m_current_texture_modifier + m_prop.damage_texture_modifier);
}
}
diff --git a/src/client/content_cao.h b/src/client/content_cao.h
index 7c29cbf17..974ff9a1e 100644
--- a/src/client/content_cao.h
+++ b/src/client/content_cao.h
@@ -130,6 +130,8 @@ private:
// Settings
bool m_enable_shaders = false;
+ bool visualExpiryRequired(const ObjectProperties &newprops) const;
+
public:
GenericCAO(Client *client, ClientEnvironment *env);
@@ -186,10 +188,11 @@ public:
return m_matrixnode->getRelativeTransformationMatrix();
}
- inline const core::matrix4 &getAbsolutePosRotMatrix() const
+ inline const core::matrix4 *getAbsolutePosRotMatrix() const
{
- assert(m_matrixnode);
- return m_matrixnode->getAbsoluteTransformation();
+ if (!m_matrixnode)
+ return nullptr;
+ return &m_matrixnode->getAbsoluteTransformation();
}
inline f32 getStepHeight() const
@@ -234,13 +237,16 @@ public:
m_visuals_expired = true;
}
- void updateLight(u8 light_at_pos);
-
- void updateLightNoCheck(u8 light_at_pos);
+ void updateLight(u32 day_night_ratio);
void setNodeLight(u8 light);
- v3s16 getLightPosition();
+ /* Get light position(s).
+ * returns number of positions written into pos[], which must have space
+ * for at least 3 vectors. */
+ u16 getLightPosition(v3s16 *pos);
+
+ void updateNametag();
void updateNodePos();
diff --git a/src/client/content_mapblock.cpp b/src/client/content_mapblock.cpp
index 5be0caf19..3d06584c4 100644
--- a/src/client/content_mapblock.cpp
+++ b/src/client/content_mapblock.cpp
@@ -17,6 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include <cmath>
#include "content_mapblock.h"
#include "util/numeric.h"
#include "util/directiontables.h"
@@ -366,6 +367,7 @@ void MapblockMeshGenerator::generateCuboidTextureCoords(const aabb3f &box, f32 *
void MapblockMeshGenerator::drawAutoLightedCuboid(aabb3f box, const f32 *txc,
TileSpec *tiles, int tile_count)
{
+ bool scale = std::fabs(f->visual_scale - 1.0f) > 1e-3f;
f32 texture_coord_buf[24];
f32 dx1 = box.MinEdge.X;
f32 dy1 = box.MinEdge.Y;
@@ -373,6 +375,14 @@ void MapblockMeshGenerator::drawAutoLightedCuboid(aabb3f box, const f32 *txc,
f32 dx2 = box.MaxEdge.X;
f32 dy2 = box.MaxEdge.Y;
f32 dz2 = box.MaxEdge.Z;
+ if (scale) {
+ if (!txc) { // generate texture coords before scaling
+ generateCuboidTextureCoords(box, texture_coord_buf);
+ txc = texture_coord_buf;
+ }
+ box.MinEdge *= f->visual_scale;
+ box.MaxEdge *= f->visual_scale;
+ }
box.MinEdge += origin;
box.MaxEdge += origin;
if (!txc) {
@@ -405,8 +415,8 @@ void MapblockMeshGenerator::prepareLiquidNodeDrawing()
MapNode ntop = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(p.X, p.Y + 1, p.Z));
MapNode nbottom = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(p.X, p.Y - 1, p.Z));
- c_flowing = nodedef->getId(f->liquid_alternative_flowing);
- c_source = nodedef->getId(f->liquid_alternative_source);
+ c_flowing = f->liquid_alternative_flowing_id;
+ c_source = f->liquid_alternative_source_id;
top_is_same_liquid = (ntop.getContent() == c_flowing) || (ntop.getContent() == c_source);
draw_liquid_bottom = (nbottom.getContent() != c_flowing) && (nbottom.getContent() != c_source);
if (draw_liquid_bottom) {
@@ -512,8 +522,7 @@ f32 MapblockMeshGenerator::getCornerLevel(int i, int k)
return 0;
}
-void MapblockMeshGenerator::drawLiquidSides()
-{
+namespace {
struct LiquidFaceDesc {
v3s16 dir; // XZ
v3s16 p[2]; // XZ only; 1 means +, 0 means -
@@ -521,20 +530,23 @@ void MapblockMeshGenerator::drawLiquidSides()
struct UV {
int u, v;
};
- static const LiquidFaceDesc base_faces[4] = {
+ static const LiquidFaceDesc liquid_base_faces[4] = {
{v3s16( 1, 0, 0), {v3s16(1, 0, 1), v3s16(1, 0, 0)}},
{v3s16(-1, 0, 0), {v3s16(0, 0, 0), v3s16(0, 0, 1)}},
{v3s16( 0, 0, 1), {v3s16(0, 0, 1), v3s16(1, 0, 1)}},
{v3s16( 0, 0, -1), {v3s16(1, 0, 0), v3s16(0, 0, 0)}},
};
- static const UV base_vertices[4] = {
+ static const UV liquid_base_vertices[4] = {
{0, 1},
{1, 1},
{1, 0},
{0, 0}
};
+}
- for (const auto &face : base_faces) {
+void MapblockMeshGenerator::drawLiquidSides()
+{
+ for (const auto &face : liquid_base_faces) {
const NeighborData &neighbor = liquid_neighbors[face.dir.Z + 1][face.dir.X + 1];
// No face between nodes of the same liquid, unless there is node
@@ -554,19 +566,26 @@ void MapblockMeshGenerator::drawLiquidSides()
video::S3DVertex vertices[4];
for (int j = 0; j < 4; j++) {
- const UV &vertex = base_vertices[j];
+ const UV &vertex = liquid_base_vertices[j];
const v3s16 &base = face.p[vertex.u];
+ float v = vertex.v;
+
v3f pos;
- pos.X = (base.X - 0.5) * BS;
- pos.Z = (base.Z - 0.5) * BS;
- if (vertex.v)
- pos.Y = neighbor.is_same_liquid ? corner_levels[base.Z][base.X] : -0.5 * BS;
- else
- pos.Y = !top_is_same_liquid ? corner_levels[base.Z][base.X] : 0.5 * BS;
+ pos.X = (base.X - 0.5f) * BS;
+ pos.Z = (base.Z - 0.5f) * BS;
+ if (vertex.v) {
+ pos.Y = neighbor.is_same_liquid ? corner_levels[base.Z][base.X] : -0.5f * BS;
+ } else if (top_is_same_liquid) {
+ pos.Y = 0.5f * BS;
+ } else {
+ pos.Y = corner_levels[base.Z][base.X];
+ v += (0.5f * BS - corner_levels[base.Z][base.X]) / BS;
+ }
+
if (data->m_smooth_lighting)
color = blendLightColor(pos);
pos += origin;
- vertices[j] = video::S3DVertex(pos.X, pos.Y, pos.Z, 0, 0, 0, color, vertex.u, vertex.v);
+ vertices[j] = video::S3DVertex(pos.X, pos.Y, pos.Z, 0, 0, 0, color, vertex.u, v);
};
collector->append(tile_liquid, vertices, 4, quad_indices, 6);
}
@@ -1186,15 +1205,14 @@ bool MapblockMeshGenerator::isSameRail(v3s16 dir)
(def2.getGroup(raillike_groupname) == raillike_group));
}
-void MapblockMeshGenerator::drawRaillikeNode()
-{
- static const v3s16 direction[4] = {
+namespace {
+ static const v3s16 rail_direction[4] = {
v3s16( 0, 0, 1),
v3s16( 0, 0, -1),
v3s16(-1, 0, 0),
v3s16( 1, 0, 0),
};
- static const int slope_angle[4] = {0, 180, 90, -90};
+ static const int rail_slope_angle[4] = {0, 180, 90, -90};
enum RailTile {
straight,
@@ -1207,8 +1225,8 @@ void MapblockMeshGenerator::drawRaillikeNode()
int angle;
};
static const RailDesc rail_kinds[16] = {
- // +x -x -z +z
- //-------------
+ // +x -x -z +z
+ //-------------
{straight, 0}, // . . . .
{straight, 0}, // . . . +Z
{straight, 0}, // . . -Z .
@@ -1226,7 +1244,10 @@ void MapblockMeshGenerator::drawRaillikeNode()
{junction, 270}, // +X -X -Z .
{ cross, 0}, // +X -X -Z +Z
};
+}
+void MapblockMeshGenerator::drawRaillikeNode()
+{
raillike_group = nodedef->get(n).getGroup(raillike_groupname);
int code = 0;
@@ -1234,14 +1255,14 @@ void MapblockMeshGenerator::drawRaillikeNode()
int tile_index;
bool sloped = false;
for (int dir = 0; dir < 4; dir++) {
- bool rail_above = isSameRail(direction[dir] + v3s16(0, 1, 0));
+ bool rail_above = isSameRail(rail_direction[dir] + v3s16(0, 1, 0));
if (rail_above) {
sloped = true;
- angle = slope_angle[dir];
+ angle = rail_slope_angle[dir];
}
if (rail_above ||
- isSameRail(direction[dir]) ||
- isSameRail(direction[dir] + v3s16(0, -1, 0)))
+ isSameRail(rail_direction[dir]) ||
+ isSameRail(rail_direction[dir] + v3s16(0, -1, 0)))
code |= 1 << dir;
}
@@ -1269,9 +1290,8 @@ void MapblockMeshGenerator::drawRaillikeNode()
drawQuad(vertices);
}
-void MapblockMeshGenerator::drawNodeboxNode()
-{
- static const v3s16 tile_dirs[6] = {
+namespace {
+ static const v3s16 nodebox_tile_dirs[6] = {
v3s16(0, 1, 0),
v3s16(0, -1, 0),
v3s16(1, 0, 0),
@@ -1281,7 +1301,7 @@ void MapblockMeshGenerator::drawNodeboxNode()
};
// we have this order for some reason...
- static const v3s16 connection_dirs[6] = {
+ static const v3s16 nodebox_connection_dirs[6] = {
v3s16( 0, 1, 0), // top
v3s16( 0, -1, 0), // bottom
v3s16( 0, 0, -1), // front
@@ -1289,19 +1309,22 @@ void MapblockMeshGenerator::drawNodeboxNode()
v3s16( 0, 0, 1), // back
v3s16( 1, 0, 0), // right
};
+}
+void MapblockMeshGenerator::drawNodeboxNode()
+{
TileSpec tiles[6];
for (int face = 0; face < 6; face++) {
// Handles facedir rotation for textures
- getTile(tile_dirs[face], &tiles[face]);
+ getTile(nodebox_tile_dirs[face], &tiles[face]);
}
// locate possible neighboring nodes to connect to
- int neighbors_set = 0;
+ u8 neighbors_set = 0;
if (f->node_box.type == NODEBOX_CONNECTED) {
for (int dir = 0; dir != 6; dir++) {
- int flag = 1 << dir;
- v3s16 p2 = blockpos_nodes + p + connection_dirs[dir];
+ u8 flag = 1 << dir;
+ v3s16 p2 = blockpos_nodes + p + nodebox_connection_dirs[dir];
MapNode n2 = data->m_vmanip.getNodeNoEx(p2);
if (nodedef->nodeboxConnects(n, n2, flag))
neighbors_set |= flag;
@@ -1310,7 +1333,7 @@ void MapblockMeshGenerator::drawNodeboxNode()
std::vector<aabb3f> boxes;
n.getNodeBoxes(nodedef, &boxes, neighbors_set);
- for (const auto &box : boxes)
+ for (auto &box : boxes)
drawAutoLightedCuboid(box, nullptr, tiles, 6);
}
diff --git a/src/client/filecache.cpp b/src/client/filecache.cpp
index 3d1b302a8..46bbe4059 100644
--- a/src/client/filecache.cpp
+++ b/src/client/filecache.cpp
@@ -82,8 +82,16 @@ bool FileCache::update(const std::string &name, const std::string &data)
std::string path = m_dir + DIR_DELIM + name;
return updateByPath(path, data);
}
+
bool FileCache::load(const std::string &name, std::ostream &os)
{
std::string path = m_dir + DIR_DELIM + name;
return loadByPath(path, os);
}
+
+bool FileCache::exists(const std::string &name)
+{
+ std::string path = m_dir + DIR_DELIM + name;
+ std::ifstream fis(path.c_str(), std::ios_base::binary);
+ return fis.good();
+}
diff --git a/src/client/filecache.h b/src/client/filecache.h
index 96e4c8ba1..ea6afc4b2 100644
--- a/src/client/filecache.h
+++ b/src/client/filecache.h
@@ -33,6 +33,7 @@ public:
bool update(const std::string &name, const std::string &data);
bool load(const std::string &name, std::ostream &os);
+ bool exists(const std::string &name);
private:
std::string m_dir;
diff --git a/src/client/fontengine.cpp b/src/client/fontengine.cpp
index 2b5841cd8..a55420846 100644
--- a/src/client/fontengine.cpp
+++ b/src/client/fontengine.cpp
@@ -186,6 +186,21 @@ unsigned int FontEngine::getDefaultFontSize()
return m_default_size[m_currentMode];
}
+unsigned int FontEngine::getFontSize(FontMode mode)
+{
+ if (m_currentMode == FM_Simple) {
+ if (mode == FM_Mono || mode == FM_SimpleMono)
+ return m_default_size[FM_SimpleMono];
+ else
+ return m_default_size[FM_Simple];
+ }
+
+ if (mode == FM_Unspecified)
+ return m_default_size[FM_Standard];
+
+ return m_default_size[mode];
+}
+
/******************************************************************************/
void FontEngine::readSettings()
{
@@ -239,7 +254,7 @@ void FontEngine::updateSkin()
FATAL_ERROR_IF(font == NULL, "Could not create/get font");
u32 text_height = font->getDimension(L"Hello, world!").Height;
- infostream << "text_height=" << text_height << std::endl;
+ infostream << "FontEngine: measured text_height=" << text_height << std::endl;
}
/******************************************************************************/
diff --git a/src/client/fontengine.h b/src/client/fontengine.h
index 53f14c45f..865b2d3ff 100644
--- a/src/client/fontengine.h
+++ b/src/client/fontengine.h
@@ -124,6 +124,9 @@ public:
/** get default font size */
unsigned int getDefaultFontSize();
+ /** get font size for a specific mode */
+ unsigned int getFontSize(FontMode mode);
+
/** initialize font engine */
void initialize(Settings* main_settings, gui::IGUIEnvironment* env);
diff --git a/src/client/game.cpp b/src/client/game.cpp
index adb870994..6db20d39b 100644
--- a/src/client/game.cpp
+++ b/src/client/game.cpp
@@ -34,11 +34,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "clouds.h"
#include "config.h"
#include "content_cao.h"
+#include "content/subgames.h"
#include "client/event_manager.h"
#include "fontengine.h"
#include "itemdef.h"
#include "log.h"
#include "filesys.h"
+#include "gameparams.h"
#include "gettext.h"
#include "gui/guiChatConsole.h"
#include "gui/guiConfirmRegistration.h"
@@ -77,6 +79,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#endif
Game::Game() :
+ m_chat_log_buf(g_logger),
m_game_ui(new GameUI())
{
g_settings->registerChangedCallback("doubletap_jump",
@@ -166,28 +169,21 @@ Game::~Game()
}
bool Game::startup(bool *kill,
- bool random_input,
InputHandler *input,
- const std::string &map_dir,
- const std::string &playername,
- const std::string &password,
- std::string *address, // can change if simple_singleplayer_mode
- u16 port,
+ const GameStartData &start_data,
std::string &error_message,
bool *reconnect,
- ChatBackend *chat_backend,
- const SubgameSpec &gamespec,
- bool simple_singleplayer_mode)
+ ChatBackend *chat_backend)
{
+
// "cache"
this->device = RenderingEngine::get_raw_device();
this->kill = kill;
this->error_message = &error_message;
this->reconnect_requested = reconnect;
- this->random_input = random_input;
this->input = input;
this->chat_backend = chat_backend;
- this->simple_singleplayer_mode = simple_singleplayer_mode;
+ this->simple_singleplayer_mode = start_data.isSinglePlayer();
input->keycache.populate();
@@ -206,12 +202,14 @@ bool Game::startup(bool *kill,
m_invert_mouse = g_settings->getBool("invert_mouse");
m_first_loop_after_window_activation = true;
- g_translations->clear();
+ g_client_translations->clear();
- if (!init(map_dir, address, port, gamespec))
+ // address can change if simple_singleplayer_mode
+ if (!init(start_data.world_spec.path, start_data.address,
+ start_data.socket_port, start_data.game_spec))
return false;
- if (!createClient(playername, password, address, port))
+ if (!createClient(start_data))
return false;
RenderingEngine::initialize(client, hud);
@@ -322,6 +320,10 @@ void Game::shutdown()
if (formspec)
formspec->quitMenu();
+#ifdef HAVE_TOUCHSCREENGUI
+ g_touchscreengui->hide();
+#endif
+
showOverlayMessage(N_("Shutting down..."), 0, 0, false);
if (clouds)
@@ -343,6 +345,7 @@ void Game::shutdown()
chat_backend->addMessage(L"", L"# Disconnected.");
chat_backend->addMessage(L"", L"");
+ m_chat_log_buf.clear();
if (client) {
client->Stop();
@@ -365,7 +368,7 @@ void Game::shutdown()
bool Game::init(
const std::string &map_dir,
- std::string *address,
+ const std::string &address,
u16 port,
const SubgameSpec &gamespec)
{
@@ -389,8 +392,8 @@ bool Game::init(
return false;
// Create a server if not connecting to an existing one
- if (address->empty()) {
- if (!createSingleplayerServer(map_dir, gamespec, port, address))
+ if (address.empty()) {
+ if (!createSingleplayerServer(map_dir, gamespec, port))
return false;
}
@@ -400,7 +403,7 @@ bool Game::init(
bool Game::initSound()
{
#if USE_SOUND
- if (g_settings->getBool("enable_sound")) {
+ if (g_settings->getBool("enable_sound") && g_sound_manager_singleton.get()) {
infostream << "Attempting to use OpenAL audio" << std::endl;
sound = createOpenALSoundManager(g_sound_manager_singleton.get(), &soundfetcher);
if (!sound)
@@ -425,7 +428,7 @@ bool Game::initSound()
}
bool Game::createSingleplayerServer(const std::string &map_dir,
- const SubgameSpec &gamespec, u16 port, std::string *address)
+ const SubgameSpec &gamespec, u16 port)
{
showOverlayMessage(N_("Creating server..."), 0, 5);
@@ -453,14 +456,12 @@ bool Game::createSingleplayerServer(const std::string &map_dir,
}
server = new Server(map_dir, gamespec, simple_singleplayer_mode, bind_addr, false);
- server->init();
server->start();
return true;
}
-bool Game::createClient(const std::string &playername,
- const std::string &password, std::string *address, u16 port)
+bool Game::createClient(const GameStartData &start_data)
{
showOverlayMessage(N_("Creating client..."), 0, 10);
@@ -475,8 +476,7 @@ bool Game::createClient(const std::string &playername,
g_touchscreengui->hide();
}
#endif
- if (!connectToServer(playername, password, address, port,
- &could_connect, &connect_aborted))
+ if (!connectToServer(start_data, &could_connect, &connect_aborted))
return false;
if (!could_connect) {
@@ -570,8 +570,11 @@ bool Game::createClient(const std::string &playername,
}
mapper = client->getMinimap();
- if (mapper)
+ if (mapper) {
mapper->setMinimapMode(MINIMAP_MODE_OFF);
+ if (client->modsLoaded())
+ client->getScript()->on_minimap_ready(mapper);
+ }
return true;
}
@@ -605,8 +608,7 @@ bool Game::initGui()
return true;
}
-bool Game::connectToServer(const std::string &playername,
- const std::string &password, std::string *address, u16 port,
+bool Game::connectToServer(const GameStartData &start_data,
bool *connect_ok, bool *connection_aborted)
{
*connect_ok = false; // Let's not be overly optimistic
@@ -615,10 +617,10 @@ bool Game::connectToServer(const std::string &playername,
showOverlayMessage(N_("Resolving address..."), 0, 15);
- Address connect_address(0, 0, 0, 0, port);
+ Address connect_address(0, 0, 0, 0, start_data.socket_port);
try {
- connect_address.Resolve(address->c_str());
+ connect_address.Resolve(start_data.address.c_str());
if (connect_address.isZero()) { // i.e. INADDR_ANY, IN6ADDR_ANY
//connect_address.Resolve("localhost");
@@ -645,7 +647,8 @@ bool Game::connectToServer(const std::string &playername,
return false;
}
- client = new Client(playername.c_str(), password, *address,
+ client = new Client(start_data.name.c_str(),
+ start_data.password, start_data.address,
*draw_control, texture_src, shader_src,
itemdef_manager, nodedef_manager, sound, eventmgr,
connect_address.isIPv6(), m_game_ui.get());
@@ -716,12 +719,13 @@ bool Game::connectToServer(const std::string &playername,
} else {
registration_confirmation_shown = true;
(new GUIConfirmRegistration(guienv, guienv->getRootGUIElement(), -1,
- &g_menumgr, client, playername, password, connection_aborted))->drop();
+ &g_menumgr, client, start_data.name, start_data.password,
+ connection_aborted, texture_src))->drop();
}
} else {
wait_time += dtime;
// Only time out if we aren't waiting for the server we started
- if (!address->empty() && wait_time > 10) {
+ if (!start_data.isSinglePlayer() && wait_time > 10) {
*error_message = "Connection timed out.";
errorstream << *error_message << std::endl;
break;
@@ -871,19 +875,19 @@ inline bool Game::handleCallbacks()
if (g_gamecallback->changepassword_requested) {
(new GUIPasswordChange(guienv, guiroot, -1,
- &g_menumgr, client))->drop();
+ &g_menumgr, client, texture_src))->drop();
g_gamecallback->changepassword_requested = false;
}
if (g_gamecallback->changevolume_requested) {
(new GUIVolumeChange(guienv, guiroot, -1,
- &g_menumgr))->drop();
+ &g_menumgr, texture_src))->drop();
g_gamecallback->changevolume_requested = false;
}
if (g_gamecallback->keyconfig_requested) {
(new GUIKeyChangeMenu(guienv, guiroot, -1,
- &g_menumgr))->drop();
+ &g_menumgr, texture_src))->drop();
g_gamecallback->keyconfig_requested = false;
}
@@ -1075,29 +1079,47 @@ void Game::processKeyInput()
toggleFullbright();
} else if (wasKeyDown(KeyType::KILLAURA)) {
toggleKillaura();
+#if USE_SOUND
} else if (wasKeyDown(KeyType::MUTE)) {
- bool new_mute_sound = !g_settings->getBool("mute_sound");
- g_settings->setBool("mute_sound", new_mute_sound);
- if (new_mute_sound)
- m_game_ui->showTranslatedStatusText("Sound muted");
- else
- m_game_ui->showTranslatedStatusText("Sound unmuted");
+ if (g_settings->getBool("enable_sound")) {
+ bool new_mute_sound = !g_settings->getBool("mute_sound");
+ g_settings->setBool("mute_sound", new_mute_sound);
+ if (new_mute_sound)
+ m_game_ui->showTranslatedStatusText("Sound muted");
+ else
+ m_game_ui->showTranslatedStatusText("Sound unmuted");
+ } else {
+ m_game_ui->showTranslatedStatusText("Sound system is disabled");
+ }
} else if (wasKeyDown(KeyType::INC_VOLUME)) {
- float new_volume = rangelim(g_settings->getFloat("sound_volume") + 0.1f, 0.0f, 1.0f);
- wchar_t buf[100];
- g_settings->setFloat("sound_volume", new_volume);
- const wchar_t *str = wgettext("Volume changed to %d%%");
- swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100));
- delete[] str;
- m_game_ui->showStatusText(buf);
+ if (g_settings->getBool("enable_sound")) {
+ float new_volume = rangelim(g_settings->getFloat("sound_volume") + 0.1f, 0.0f, 1.0f);
+ wchar_t buf[100];
+ g_settings->setFloat("sound_volume", new_volume);
+ const wchar_t *str = wgettext("Volume changed to %d%%");
+ swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100));
+ delete[] str;
+ m_game_ui->showStatusText(buf);
+ } else {
+ m_game_ui->showTranslatedStatusText("Sound system is disabled");
+ }
} else if (wasKeyDown(KeyType::DEC_VOLUME)) {
- float new_volume = rangelim(g_settings->getFloat("sound_volume") - 0.1f, 0.0f, 1.0f);
- wchar_t buf[100];
- g_settings->setFloat("sound_volume", new_volume);
- const wchar_t *str = wgettext("Volume changed to %d%%");
- swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100));
- delete[] str;
- m_game_ui->showStatusText(buf);
+ if (g_settings->getBool("enable_sound")) {
+ float new_volume = rangelim(g_settings->getFloat("sound_volume") - 0.1f, 0.0f, 1.0f);
+ wchar_t buf[100];
+ g_settings->setFloat("sound_volume", new_volume);
+ const wchar_t *str = wgettext("Volume changed to %d%%");
+ swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100));
+ delete[] str;
+ m_game_ui->showStatusText(buf);
+ } else {
+ m_game_ui->showTranslatedStatusText("Sound system is disabled");
+ }
+#else
+ } else if (wasKeyDown(KeyType::MUTE) || wasKeyDown(KeyType::INC_VOLUME)
+ || wasKeyDown(KeyType::DEC_VOLUME)) {
+ m_game_ui->showTranslatedStatusText("Sound system is not supported on this build");
+#endif
} else if (wasKeyDown(KeyType::CINEMATIC)) {
toggleCinematic();
} else if (wasKeyDown(KeyType::SCREENSHOT)) {
@@ -1179,7 +1201,6 @@ void Game::processItemSelection(u16 *new_playeritem)
for (u16 i = 0; i <= max_item; i++) {
if (wasKeyDown((GameKeyType) (KeyType::SLOT_1 + i))) {
*new_playeritem = i;
- infostream << "Selected item: " << new_playeritem << std::endl;
break;
}
}
@@ -1208,7 +1229,7 @@ void Game::openInventory()
if (!player || !player->getCAO())
return;
- infostream << "the_game: " << "Launching inventory" << std::endl;
+ infostream << "Game: Launching inventory" << std::endl;
PlayerInventoryFormSource *fs_src = new PlayerInventoryFormSource(client);
@@ -1567,10 +1588,10 @@ void Game::checkZoomEnabled()
void Game::updateCameraDirection(CameraOrientation *cam, float dtime)
{
if ((device->isWindowActive() && device->isWindowFocused()
- && !isMenuActive()) || random_input) {
+ && !isMenuActive()) || input->isRandom()) {
#ifndef __ANDROID__
- if (!random_input) {
+ if (!input->isRandom()) {
// Mac OSX gets upset if this is set every frame
if (device->getCursorControl()->isVisible())
device->getCursorControl()->setVisible(false);
@@ -1658,7 +1679,7 @@ void Game::updatePlayerControl(const CameraOrientation &cam)
input->joystick.getAxisWithoutDead(JA_FORWARD_MOVE)
);
- u32 keypress_bits =
+ u32 keypress_bits = (
( (u32)(isKeyDown(KeyType::FORWARD) & 0x1) << 0) |
( (u32)(isKeyDown(KeyType::BACKWARD) & 0x1) << 1) |
( (u32)(isKeyDown(KeyType::LEFT) & 0x1) << 2) |
@@ -1667,7 +1688,8 @@ void Game::updatePlayerControl(const CameraOrientation &cam)
( (u32)(isKeyDown(KeyType::SPECIAL1) & 0x1) << 5) |
( (u32)(isKeyDown(KeyType::SNEAK) & 0x1) << 6) |
( (u32)(input->getLeftState() & 0x1) << 7) |
- ( (u32)(input->getRightState() & 0x1) << 8
+ ( (u32)(input->getRightState() & 0x1) << 8) |
+ ( (u32)(isKeyDown(KeyType::ZOOM) & 0x1) << 9)
);
#ifdef ANDROID
@@ -1847,6 +1869,7 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
delete event->hudadd.offset;
delete event->hudadd.world_pos;
delete event->hudadd.size;
+ delete event->hudadd.text2;
return;
}
@@ -1864,6 +1887,7 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
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;
@@ -1874,6 +1898,7 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
delete event->hudadd.offset;
delete event->hudadd.world_pos;
delete event->hudadd.size;
+ delete event->hudadd.text2;
}
void Game::handleClientEvent_HudRemove(ClientEvent *event, CameraOrientation *cam)
@@ -1946,6 +1971,10 @@ void Game::handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *ca
case HUD_STAT_Z_INDEX:
e->z_index = event->hudchange.data;
break;
+
+ case HUD_STAT_TEXT2:
+ e->text2 = *event->hudchange.sdata;
+ break;
}
delete event->hudchange.v3fdata;
@@ -1971,11 +2000,11 @@ void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam)
// Shows the mesh skybox
sky->setVisible(true);
// Update mesh based skybox colours if applicable.
- sky->setSkyColors(*event->set_sky);
+ sky->setSkyColors(event->set_sky->sky_color);
sky->setHorizonTint(
- event->set_sky->sun_tint,
- event->set_sky->moon_tint,
- event->set_sky->tint_type
+ event->set_sky->fog_sun_tint,
+ event->set_sky->fog_moon_tint,
+ event->set_sky->fog_tint_type
);
} else if (event->set_sky->type == "skybox" &&
event->set_sky->textures.size() == 6) {
@@ -1985,9 +2014,9 @@ void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam)
sky->setFallbackBgColor(event->set_sky->bgcolor);
// Set sunrise and sunset fog tinting:
sky->setHorizonTint(
- event->set_sky->sun_tint,
- event->set_sky->moon_tint,
- event->set_sky->tint_type
+ event->set_sky->fog_sun_tint,
+ event->set_sky->fog_moon_tint,
+ event->set_sky->fog_tint_type
);
// Add textures to skybox.
for (int i = 0; i < 6; i++)
@@ -2071,18 +2100,9 @@ void Game::processClientEvents(CameraOrientation *cam)
void Game::updateChat(f32 dtime, const v2u32 &screensize)
{
- // Add chat log output for errors to be shown in chat
- static LogOutputBuffer chat_log_error_buf(g_logger, LL_ERROR);
-
// Get new messages from error log buffer
- while (!chat_log_error_buf.empty()) {
- std::wstring error_message = utf8_to_wide(chat_log_error_buf.get());
- if (!g_settings->getBool("disable_escape_sequences")) {
- error_message.insert(0, L"\x1b(c@red)");
- error_message.append(L"\x1b(c@white)");
- }
- chat_backend->addMessage(L"", error_message);
- }
+ while (!m_chat_log_buf.empty())
+ chat_backend->addMessage(L"", utf8_to_wide(m_chat_log_buf.get()));
// Get new messages from client
std::wstring message;
@@ -2203,16 +2223,8 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
- v3f player_position = player->getPosition();
- v3f player_eye_position = player->getEyePosition();
- v3f camera_position = camera->getPosition();
- v3f camera_direction = camera->getDirection();
- v3s16 camera_offset = camera->getOffset();
-
- if (camera->getCameraMode() == CAMERA_MODE_FIRST)
- player_eye_position += player->eye_offset_first;
- else
- player_eye_position += player->eye_offset_third;
+ const v3f camera_direction = camera->getDirection();
+ const v3s16 camera_offset = camera->getOffset();
/*
Calculate what block is the crosshair pointing to
@@ -2229,13 +2241,22 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
core::line3d<f32> shootline;
- if (camera->getCameraMode() != CAMERA_MODE_THIRD_FRONT) {
- shootline = core::line3d<f32>(player_eye_position,
- player_eye_position + camera_direction * BS * d);
- } else {
+ switch (camera->getCameraMode()) {
+ case CAMERA_MODE_FIRST:
+ // Shoot from camera position, with bobbing
+ shootline.start = camera->getPosition();
+ break;
+ case CAMERA_MODE_THIRD:
+ // Shoot from player head, no bobbing
+ shootline.start = camera->getHeadPosition();
+ break;
+ case CAMERA_MODE_THIRD_FRONT:
+ shootline.start = camera->getHeadPosition();
// prevent player pointing anything in front-view
- shootline = core::line3d<f32>(camera_position, camera_position);
+ d = 0;
+ break;
}
+ shootline.end = shootline.start + camera_direction * BS * d;
#ifdef HAVE_TOUCHSCREENGUI
@@ -2322,6 +2343,7 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
} else if (pointed.type == POINTEDTHING_NODE) {
handlePointingAtNode(pointed, selected_item, hand_item, dtime);
} else if (pointed.type == POINTEDTHING_OBJECT) {
+ v3f player_position = player->getPosition();
handlePointingAtObject(pointed, tool_item, player_position, show_debug);
} else if (input->getLeftState()) {
// When button is held down in air, show continuous animation
@@ -2384,11 +2406,13 @@ PointedThing Game::updatePointedThing(
}
runData.selected_object = NULL;
-
+ hud->pointing_at_object = false;
RaycastState s(shootline, look_for_object, liquids_pointable);
PointedThing result;
env.continueRaycast(&s, &result);
if (result.type == POINTEDTHING_OBJECT) {
+ hud->pointing_at_object = true;
+
runData.selected_object = client->getEnv().getActiveObject(result.object_id);
aabb3f selection_box;
if (show_entity_selectionbox && runData.selected_object->doShowSelectionBox() &&
@@ -2540,7 +2564,7 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
}
// formspec in meta
- if (meta && !meta->getString("formspec").empty() && !random_input
+ if (meta && !meta->getString("formspec").empty() && !input->isRandom()
&& !isKeyDown(KeyType::SNEAK)) {
// on_rightclick callbacks are called anyway
if (nodedef_manager->get(map.getNode(nodepos)).rightclickable)
@@ -3383,8 +3407,12 @@ void Game::showPauseMenu()
}
#ifndef __ANDROID__
- os << "button_exit[4," << (ypos++) << ";3,0.5;btn_sound;"
- << strgettext("Sound Volume") << "]";
+#if USE_SOUND
+ if (g_settings->getBool("enable_sound")) {
+ os << "button_exit[4," << (ypos++) << ";3,0.5;btn_sound;"
+ << strgettext("Sound Volume") << "]";
+ }
+#endif
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_key_config;"
<< strgettext("Change Keys") << "]";
#endif
@@ -3454,19 +3482,11 @@ void Game::showPauseMenu()
Game *g_game;
void the_game(bool *kill,
- bool random_input,
InputHandler *input,
- const std::string &map_dir,
- const std::string &playername,
- const std::string &password,
- const std::string &address, // If empty local server is created
- u16 port,
-
+ const GameStartData &start_data,
std::string &error_message,
ChatBackend &chat_backend,
- bool *reconnect_requested,
- const SubgameSpec &gamespec, // Used for local game
- bool simple_singleplayer_mode)
+ bool *reconnect_requested) // Used for local game
{
Game game;
@@ -3476,16 +3496,12 @@ void the_game(bool *kill,
* is created then this is updated and we don't want to change the value
* passed to us by the calling function
*/
- std::string server_address = address;
try {
- if (game.startup(kill, random_input, input, map_dir,
- playername, password, &server_address, port, error_message,
- reconnect_requested, &chat_backend, gamespec,
- simple_singleplayer_mode)) {
+ if (game.startup(kill, input, start_data, error_message,
+ reconnect_requested, &chat_backend)) {
game.run();
- game.shutdown();
}
} catch (SerializationError &e) {
@@ -3501,4 +3517,5 @@ void the_game(bool *kill,
strgettext("\nCheck debug.txt for details.");
errorstream << error_message << std::endl;
}
+ game.shutdown();
}
diff --git a/src/client/game.h b/src/client/game.h
index 43b366057..cba52e6b4 100644
--- a/src/client/game.h
+++ b/src/client/game.h
@@ -76,6 +76,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class InputHandler;
class ChatBackend; /* to avoid having to include chat.h */
struct SubgameSpec;
+struct GameStartData;
struct Jitter {
f32 max, min, avg, counter, max_sample, min_sample, max_fraction;
@@ -92,19 +93,10 @@ struct CameraOrientation {
f32 camera_pitch; // "up/down"
};
-void the_game(bool *kill,
- bool random_input,
- InputHandler *input,
- const std::string &map_dir,
- const std::string &playername,
- const std::string &password,
- const std::string &address, // If "", local server is used
- u16 port,
- std::string &error_message,
- ChatBackend &chat_backend,
- bool *reconnect_requested,
- const SubgameSpec &gamespec, // Used for local game
- bool simple_singleplayer_mode);
+/*
+ Text input system
+*/
+
struct TextDestNodeMetadata : public TextDest
{
TextDestNodeMetadata(v3s16 p, Client *client)
@@ -292,6 +284,7 @@ class SoundMaker
public:
bool makes_footstep_sound;
float m_player_step_timer;
+ float m_player_jump_timer;
SimpleSoundSpec m_player_step_sound;
SimpleSoundSpec m_player_leftpunch_sound;
@@ -301,7 +294,8 @@ public:
m_sound(sound),
m_ndef(ndef),
makes_footstep_sound(true),
- m_player_step_timer(0)
+ m_player_step_timer(0),
+ m_player_jump_timer(0.0f)
{
}
@@ -314,6 +308,14 @@ public:
}
}
+ void playPlayerJump()
+ {
+ if (m_player_jump_timer <= 0.0f) {
+ m_player_jump_timer = 0.2f;
+ m_sound->playSound(SimpleSoundSpec("player_jump", 0.5f), false);
+ }
+ }
+
static void viewBobbingStep(MtEvent *e, void *data)
{
SoundMaker *sm = (SoundMaker *)data;
@@ -328,7 +330,8 @@ public:
static void playerJump(MtEvent *e, void *data)
{
- //SoundMaker *sm = (SoundMaker*)data;
+ SoundMaker *sm = (SoundMaker *)data;
+ sm->playPlayerJump();
}
static void cameraPunchLeft(MtEvent *e, void *data)
@@ -377,6 +380,7 @@ public:
void step(float dtime)
{
m_player_step_timer -= dtime;
+ m_player_jump_timer -= dtime;
}
};
@@ -674,24 +678,16 @@ public:
~Game();
bool startup(bool *kill,
- bool random_input,
InputHandler *input,
- const std::string &map_dir,
- const std::string &playername,
- const std::string &password,
- // If address is "", local server is used and address is updated
- std::string *address,
- u16 port,
+ const GameStartData &game_params,
std::string &error_message,
bool *reconnect,
- ChatBackend *chat_backend,
- const SubgameSpec &gamespec, // Used for local game
- bool simple_singleplayer_mode);
+ ChatBackend *chat_backend);
+
void run();
void shutdown();
-
void extendedResourceCleanup();
// Basic initialisation
@@ -931,3 +927,10 @@ public:
#endif
};
extern Game *g_game;
+
+void the_game(bool *kill,
+ InputHandler *input,
+ const GameStartData &start_data,
+ std::string &error_message,
+ ChatBackend &chat_backend,
+ bool *reconnect_requested);
diff --git a/src/client/gameui.cpp b/src/client/gameui.cpp
index 138dfb4da..c216f405d 100644
--- a/src/client/gameui.cpp
+++ b/src/client/gameui.cpp
@@ -76,6 +76,11 @@ void GameUI::init()
m_guitext_chat = gui::StaticText::add(guienv, L"", core::rect<s32>(0, 0, 0, 0),
//false, false); // Disable word wrap as of now
false, true, guiroot);
+ u16 chat_font_size = g_settings->getU16("chat_font_size");
+ if (chat_font_size != 0) {
+ m_guitext_chat->setOverrideFont(g_fontengine->getFont(
+ chat_font_size, FM_Unspecified));
+ }
// Profiler text (size is updated when text is updated)
m_guitext_profiler = gui::StaticText::add(guienv, L"<Profiler>",
@@ -128,9 +133,9 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_
<< "pos: (" << (player_position.X / BS)
<< ", " << (player_position.Y / BS)
<< ", " << (player_position.Z / BS)
- << ") | yaw: " << (wrapDegrees_0_360(cam.camera_yaw)) << "° "
+ << ") | yaw: " << (wrapDegrees_0_360(cam.camera_yaw)) << "\xC2\xB0 "
<< yawToDirectionString(cam.camera_yaw)
- << " | pitch: " << (-wrapDegrees_180(cam.camera_pitch)) << "°"
+ << " | pitch: " << (-wrapDegrees_180(cam.camera_pitch)) << "\xC2\xB0"
<< " | seed: " << ((u64)client->getMapSeed());
if (pointed_old.type == POINTEDTHING_NODE) {
@@ -213,7 +218,6 @@ void GameUI::showTranslatedStatusText(const char *str)
void GameUI::setChatText(const EnrichedString &chat_text, u32 recent_chat_count)
{
- setStaticText(m_guitext_chat, chat_text);
// Update gui element size and position
s32 chat_y = 5;
@@ -221,16 +225,15 @@ void GameUI::setChatText(const EnrichedString &chat_text, u32 recent_chat_count)
if (m_flags.show_debug)
chat_y += 2 * g_fontengine->getLineHeight();
- // first pass to calculate height of text to be set
const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize();
- s32 width = std::min(g_fontengine->getTextWidth(chat_text.c_str()) + 10,
- window_size.X - 20);
- m_guitext_chat->setRelativePosition(core::rect<s32>(10, chat_y, width,
- chat_y + window_size.Y));
-
- // now use real height of text and adjust rect according to this size
- m_guitext_chat->setRelativePosition(core::rect<s32>(10, chat_y, width,
- chat_y + m_guitext_chat->getTextHeight()));
+
+ core::rect<s32> chat_size(10, chat_y,
+ window_size.X - 20, 0);
+ chat_size.LowerRightCorner.Y = std::min((s32)window_size.Y,
+ m_guitext_chat->getTextHeight() + chat_y);
+
+ m_guitext_chat->setRelativePosition(chat_size);
+ setStaticText(m_guitext_chat, chat_text);
m_recent_chat_count = recent_chat_count;
}
diff --git a/src/client/hud.cpp b/src/client/hud.cpp
index 37de6640b..2b347c1e0 100644
--- a/src/client/hud.cpp
+++ b/src/client/hud.cpp
@@ -41,6 +41,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "gui/touchscreengui.h"
#endif
+#define OBJECT_CROSSHAIR_LINE_SIZE 8
+#define CROSSHAIR_LINE_SIZE 10
+
Hud::Hud(gui::IGUIEnvironment *guienv, Client *client, LocalPlayer *player,
Inventory *inventory)
{
@@ -51,6 +54,7 @@ Hud::Hud(gui::IGUIEnvironment *guienv, Client *client, LocalPlayer *player,
this->inventory = inventory;
m_hud_scaling = g_settings->getFloat("hud_scaling");
+ m_scale_factor = m_hud_scaling * RenderingEngine::getDisplayDensity();
m_hotbar_imagesize = std::floor(HOTBAR_IMAGE_SIZE *
RenderingEngine::getDisplayDensity() + 0.5f);
m_hotbar_imagesize *= m_hud_scaling;
@@ -75,6 +79,7 @@ Hud::Hud(gui::IGUIEnvironment *guienv, Client *client, LocalPlayer *player,
selectionbox_argb = video::SColor(255, sbox_r, sbox_g, sbox_b);
use_crosshair_image = tsrc->isKnownSourceImage("crosshair.png");
+ use_object_crosshair_image = tsrc->isKnownSourceImage("object_crosshair.png");
m_selection_boxes.clear();
m_halo_boxes.clear();
@@ -213,9 +218,7 @@ void Hud::drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount,
}
// Position of upper left corner of bar
- v2s32 pos = screen_offset;
- pos.X *= m_hud_scaling * RenderingEngine::getDisplayDensity();
- pos.Y *= m_hud_scaling * RenderingEngine::getDisplayDensity();
+ v2s32 pos = screen_offset * m_scale_factor;
pos += upperleftpos;
// Store hotbar_image in member variable, used by drawItem()
@@ -272,6 +275,25 @@ void Hud::drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount,
}
}
+// Calculates screen position of waypoint. Returns true if waypoint is visible (in front of the player), else false.
+bool Hud::calculateScreenPos(const v3s16 &camera_offset, HudElement *e, v2s32 *pos)
+{
+ v3f w_pos = e->world_pos * BS;
+ scene::ICameraSceneNode* camera =
+ RenderingEngine::get_scene_manager()->getActiveCamera();
+ w_pos -= intToFloat(camera_offset, BS);
+ core::matrix4 trans = camera->getProjectionMatrix();
+ trans *= camera->getViewMatrix();
+ f32 transformed_pos[4] = { w_pos.X, w_pos.Y, w_pos.Z, 1.0f };
+ trans.multiplyWith1x4Matrix(transformed_pos);
+ if (transformed_pos[3] < 0)
+ return false;
+ f32 zDiv = transformed_pos[3] == 0.0f ? 1.0f :
+ core::reciprocal(transformed_pos[3]);
+ pos->X = m_screensize.X * (0.5 * transformed_pos[0] * zDiv + 0.5);
+ pos->Y = m_screensize.Y * (0.5 - transformed_pos[1] * zDiv * 0.5);
+ return true;
+}
void Hud::drawLuaElements(const v3s16 &camera_offset)
{
@@ -299,43 +321,47 @@ void Hud::drawLuaElements(const v3s16 &camera_offset)
v2s32 pos(floor(e->pos.X * (float) m_screensize.X + 0.5),
floor(e->pos.Y * (float) m_screensize.Y + 0.5));
switch (e->type) {
- case HUD_ELEM_IMAGE: {
- video::ITexture *texture = tsrc->getTexture(e->text);
- if (!texture)
- continue;
-
- const video::SColor color(255, 255, 255, 255);
- const video::SColor colors[] = {color, color, color, color};
- core::dimension2di imgsize(texture->getOriginalSize());
- v2s32 dstsize(imgsize.Width * e->scale.X,
- imgsize.Height * e->scale.Y);
- if (e->scale.X < 0)
- dstsize.X = m_screensize.X * (e->scale.X * -0.01);
- if (e->scale.Y < 0)
- dstsize.Y = m_screensize.Y * (e->scale.Y * -0.01);
- v2s32 offset((e->align.X - 1.0) * dstsize.X / 2,
- (e->align.Y - 1.0) * dstsize.Y / 2);
- core::rect<s32> rect(0, 0, dstsize.X, dstsize.Y);
- rect += pos + offset + v2s32(e->offset.X, e->offset.Y);
- draw2DImageFilterScaled(driver, texture, rect,
- core::rect<s32>(core::position2d<s32>(0,0), imgsize),
- NULL, colors, true);
- break; }
case HUD_ELEM_TEXT: {
+ irr::gui::IGUIFont *textfont = font;
+ unsigned int font_size = g_fontengine->getDefaultFontSize();
+
+ if (e->size.X > 0)
+ font_size *= e->size.X;
+
+ if (font_size != g_fontengine->getDefaultFontSize())
+ textfont = g_fontengine->getFont(font_size);
+
video::SColor color(255, (e->number >> 16) & 0xFF,
(e->number >> 8) & 0xFF,
(e->number >> 0) & 0xFF);
- core::rect<s32> size(0, 0, e->scale.X, text_height * e->scale.Y);
std::wstring text = unescape_translate(utf8_to_wide(e->text));
- core::dimension2d<u32> textsize = font->getDimension(text.c_str());
+ core::dimension2d<u32> textsize = textfont->getDimension(text.c_str());
+#ifdef __ANDROID__
+ // The text size on Android is not proportional with the actual scaling
+ irr::gui::IGUIFont *font_scaled = font_size <= 3 ?
+ textfont : g_fontengine->getFont(font_size - 3);
+ if (e->offset.X < -20)
+ textsize = font_scaled->getDimension(text.c_str());
+#endif
v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2),
(e->align.Y - 1.0) * (textsize.Height / 2));
- v2s32 offs(e->offset.X, e->offset.Y);
- font->draw(text.c_str(), size + pos + offset + offs, color);
+ core::rect<s32> size(0, 0, e->scale.X * m_scale_factor,
+ text_height * e->scale.Y * m_scale_factor);
+ v2s32 offs(e->offset.X * m_scale_factor,
+ e->offset.Y * m_scale_factor);
+#ifdef __ANDROID__
+ if (e->offset.X < -20)
+ font_scaled->draw(text.c_str(), size + pos + offset + offs, color);
+ else
+#endif
+ {
+ textfont->draw(text.c_str(), size + pos + offset + offs, color);
+ }
break; }
case HUD_ELEM_STATBAR: {
v2s32 offs(e->offset.X, e->offset.Y);
- drawStatbar(pos, HUD_CORNER_UPPER, e->dir, e->text, e->number, offs, e->size);
+ drawStatbar(pos, HUD_CORNER_UPPER, e->dir, e->text, e->text2,
+ e->number, e->item, offs, e->size);
break; }
case HUD_ELEM_INVENTORY: {
InventoryList *inv = inventory->getList(e->text);
@@ -343,34 +369,59 @@ void Hud::drawLuaElements(const v3s16 &camera_offset)
inv, e->item, e->dir);
break; }
case HUD_ELEM_WAYPOINT: {
- v3f p_pos = player->getPosition() / BS;
- v3f w_pos = e->world_pos * BS;
- float distance = std::floor(10 * p_pos.getDistanceFrom(e->world_pos)) /
- 10.0f;
- scene::ICameraSceneNode* camera =
- RenderingEngine::get_scene_manager()->getActiveCamera();
- w_pos -= intToFloat(camera_offset, BS);
- core::matrix4 trans = camera->getProjectionMatrix();
- trans *= camera->getViewMatrix();
- f32 transformed_pos[4] = { w_pos.X, w_pos.Y, w_pos.Z, 1.0f };
- trans.multiplyWith1x4Matrix(transformed_pos);
- if (transformed_pos[3] < 0)
+ if (!calculateScreenPos(camera_offset, e, &pos))
break;
- f32 zDiv = transformed_pos[3] == 0.0f ? 1.0f :
- core::reciprocal(transformed_pos[3]);
- pos.X = m_screensize.X * (0.5 * transformed_pos[0] * zDiv + 0.5);
- pos.Y = m_screensize.Y * (0.5 - transformed_pos[1] * zDiv * 0.5);
+ v3f p_pos = player->getPosition() / BS;
+ pos += v2s32(e->offset.X, e->offset.Y);
video::SColor color(255, (e->number >> 16) & 0xFF,
(e->number >> 8) & 0xFF,
(e->number >> 0) & 0xFF);
- core::rect<s32> size(0, 0, 200, 2 * text_height);
std::wstring text = unescape_translate(utf8_to_wide(e->name));
- font->draw(text.c_str(), size + pos, color);
- std::ostringstream os;
- os << distance << e->text;
- text = unescape_translate(utf8_to_wide(os.str()));
- pos.Y += text_height;
- font->draw(text.c_str(), size + pos, color);
+ const std::string &unit = e->text;
+ // waypoints reuse the item field to store precision, item = precision + 1
+ u32 item = e->item;
+ float precision = (item == 0) ? 10.0f : (item - 1.f);
+ bool draw_precision = precision > 0;
+
+ core::rect<s32> bounds(0, 0, font->getDimension(text.c_str()).Width, (draw_precision ? 2:1) * text_height);
+ pos.Y += (e->align.Y - 1.0) * bounds.getHeight() / 2;
+ bounds += pos;
+ font->draw(text.c_str(), bounds + v2s32((e->align.X - 1.0) * bounds.getWidth() / 2, 0), color);
+ if (draw_precision) {
+ std::ostringstream os;
+ float distance = std::floor(precision * p_pos.getDistanceFrom(e->world_pos)) / precision;
+ os << distance << unit;
+ text = unescape_translate(utf8_to_wide(os.str()));
+ bounds.LowerRightCorner.X = bounds.UpperLeftCorner.X + font->getDimension(text.c_str()).Width;
+ font->draw(text.c_str(), bounds + v2s32((e->align.X - 1.0f) * bounds.getWidth() / 2, text_height), color);
+ }
+ break; }
+ case HUD_ELEM_IMAGE_WAYPOINT: {
+ if (!calculateScreenPos(camera_offset, e, &pos))
+ break;
+ }
+ case HUD_ELEM_IMAGE: {
+ video::ITexture *texture = tsrc->getTexture(e->text);
+ if (!texture)
+ continue;
+
+ const video::SColor color(255, 255, 255, 255);
+ const video::SColor colors[] = {color, color, color, color};
+ core::dimension2di imgsize(texture->getOriginalSize());
+ v2s32 dstsize(imgsize.Width * e->scale.X * m_scale_factor,
+ imgsize.Height * e->scale.Y * m_scale_factor);
+ if (e->scale.X < 0)
+ dstsize.X = m_screensize.X * (e->scale.X * -0.01);
+ if (e->scale.Y < 0)
+ dstsize.Y = m_screensize.Y * (e->scale.Y * -0.01);
+ v2s32 offset((e->align.X - 1.0) * dstsize.X / 2,
+ (e->align.Y - 1.0) * dstsize.Y / 2);
+ core::rect<s32> rect(0, 0, dstsize.X, dstsize.Y);
+ rect += pos + offset + v2s32(e->offset.X * m_scale_factor,
+ e->offset.Y * m_scale_factor);
+ draw2DImageFilterScaled(driver, texture, rect,
+ core::rect<s32>(core::position2d<s32>(0,0), imgsize),
+ NULL, colors, true);
break; }
default:
infostream << "Hud::drawLuaElements: ignoring drawform " << e->type <<
@@ -380,8 +431,9 @@ void Hud::drawLuaElements(const v3s16 &camera_offset)
}
-void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, const std::string &texture,
- s32 count, v2s32 offset, v2s32 size)
+void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir,
+ const std::string &texture, const std::string &bgtexture,
+ s32 count, s32 maxcount, v2s32 offset, v2s32 size)
{
const video::SColor color(255, 255, 255, 255);
const video::SColor colors[] = {color, color, color, color};
@@ -390,16 +442,24 @@ void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, const std::string &tex
if (!stat_texture)
return;
+ video::ITexture *stat_texture_bg = nullptr;
+ if (!bgtexture.empty()) {
+ stat_texture_bg = tsrc->getTexture(bgtexture);
+ }
+
core::dimension2di srcd(stat_texture->getOriginalSize());
core::dimension2di dstd;
if (size == v2s32()) {
dstd = srcd;
+ dstd.Height *= m_scale_factor;
+ dstd.Width *= m_scale_factor;
+ offset.X *= m_scale_factor;
+ offset.Y *= m_scale_factor;
} else {
- float size_factor = m_hud_scaling * RenderingEngine::getDisplayDensity();
- dstd.Height = size.Y * size_factor;
- dstd.Width = size.X * size_factor;
- offset.X *= size_factor;
- offset.Y *= size_factor;
+ dstd.Height = size.Y * m_scale_factor;
+ dstd.Width = size.X * m_scale_factor;
+ offset.X *= m_scale_factor;
+ offset.Y *= m_scale_factor;
}
v2s32 p = pos;
@@ -409,43 +469,100 @@ void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, const std::string &tex
p += offset;
v2s32 steppos;
- core::rect<s32> srchalfrect, dsthalfrect;
switch (drawdir) {
case HUD_DIR_RIGHT_LEFT:
steppos = v2s32(-1, 0);
- srchalfrect = core::rect<s32>(srcd.Width / 2, 0, srcd.Width, srcd.Height);
- dsthalfrect = core::rect<s32>(dstd.Width / 2, 0, dstd.Width, dstd.Height);
break;
case HUD_DIR_TOP_BOTTOM:
steppos = v2s32(0, 1);
- srchalfrect = core::rect<s32>(0, 0, srcd.Width, srcd.Height / 2);
- dsthalfrect = core::rect<s32>(0, 0, dstd.Width, dstd.Height / 2);
break;
case HUD_DIR_BOTTOM_TOP:
steppos = v2s32(0, -1);
- srchalfrect = core::rect<s32>(0, srcd.Height / 2, srcd.Width, srcd.Height);
- dsthalfrect = core::rect<s32>(0, dstd.Height / 2, dstd.Width, dstd.Height);
break;
default:
+ // From left to right
steppos = v2s32(1, 0);
- srchalfrect = core::rect<s32>(0, 0, srcd.Width / 2, srcd.Height);
- dsthalfrect = core::rect<s32>(0, 0, dstd.Width / 2, dstd.Height);
+ break;
+ }
+
+ auto calculate_clipping_rect = [] (core::dimension2di src,
+ v2s32 steppos) -> core::rect<s32> {
+
+ // Create basic rectangle
+ core::rect<s32> rect(0, 0,
+ src.Width - std::abs(steppos.X) * src.Width / 2,
+ src.Height - std::abs(steppos.Y) * src.Height / 2
+ );
+ // Move rectangle left or down
+ if (steppos.X == -1)
+ rect += v2s32(src.Width / 2, 0);
+ if (steppos.Y == -1)
+ rect += v2s32(0, src.Height / 2);
+ return rect;
+ };
+ // Rectangles for 1/2 the actual value to display
+ core::rect<s32> srchalfrect, dsthalfrect;
+ // Rectangles for 1/2 the "off state" texture
+ core::rect<s32> srchalfrect2, dsthalfrect2;
+
+ if (count % 2 == 1) {
+ // Need to draw halves: Calculate rectangles
+ srchalfrect = calculate_clipping_rect(srcd, steppos);
+ dsthalfrect = calculate_clipping_rect(dstd, steppos);
+ srchalfrect2 = calculate_clipping_rect(srcd, steppos * -1);
+ dsthalfrect2 = calculate_clipping_rect(dstd, steppos * -1);
}
+
steppos.X *= dstd.Width;
steppos.Y *= dstd.Height;
+ // Draw full textures
for (s32 i = 0; i < count / 2; i++) {
core::rect<s32> srcrect(0, 0, srcd.Width, srcd.Height);
- core::rect<s32> dstrect(0,0, dstd.Width, dstd.Height);
+ core::rect<s32> dstrect(0, 0, dstd.Width, dstd.Height);
dstrect += p;
- draw2DImageFilterScaled(driver, stat_texture, dstrect, srcrect, NULL, colors, true);
+ draw2DImageFilterScaled(driver, stat_texture,
+ dstrect, srcrect, NULL, colors, true);
p += steppos;
}
if (count % 2 == 1) {
- dsthalfrect += p;
- draw2DImageFilterScaled(driver, stat_texture, dsthalfrect, srchalfrect, NULL, colors, true);
+ // Draw half a texture
+ draw2DImageFilterScaled(driver, stat_texture,
+ dsthalfrect + p, srchalfrect, NULL, colors, true);
+
+ if (stat_texture_bg && maxcount > count) {
+ draw2DImageFilterScaled(driver, stat_texture_bg,
+ dsthalfrect2 + p, srchalfrect2,
+ NULL, colors, true);
+ p += steppos;
+ }
+ }
+
+ if (stat_texture_bg && maxcount > count / 2) {
+ // Draw "off state" textures
+ s32 start_offset;
+ if (count % 2 == 1)
+ start_offset = count / 2 + 1;
+ else
+ start_offset = count / 2;
+ for (s32 i = start_offset; i < maxcount / 2; i++) {
+ core::rect<s32> srcrect(0, 0, srcd.Width, srcd.Height);
+ core::rect<s32> dstrect(0, 0, dstd.Width, dstd.Height);
+
+ dstrect += p;
+ draw2DImageFilterScaled(driver, stat_texture_bg,
+ dstrect, srcrect,
+ NULL, colors, true);
+ p += steppos;
+ }
+
+ if (maxcount % 2 == 1) {
+ draw2DImageFilterScaled(driver, stat_texture_bg,
+ dsthalfrect + p, srchalfrect,
+ NULL, colors, true);
+ }
}
}
@@ -465,7 +582,7 @@ void Hud::drawHotbar(u16 playeritem) {
v2s32 pos = centerlowerpos - v2s32(width / 2, m_hotbar_imagesize + m_padding * 3);
const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize();
- if ( (float) width / (float) window_size.X <=
+ if ((float) width / (float) window_size.X <=
g_settings->getFloat("hud_hotbar_max_width")) {
if (player->hud_flags & HUD_FLAG_HOTBAR_VISIBLE) {
drawItems(pos, v2s32(0, 0), hotbar_itemcount, 0, mainlist, playeritem + 1, 0);
@@ -488,6 +605,31 @@ void Hud::drawHotbar(u16 playeritem) {
void Hud::drawCrosshair()
{
+ if (pointing_at_object) {
+ if (use_object_crosshair_image) {
+ video::ITexture *object_crosshair = tsrc->getTexture("object_crosshair.png");
+ v2u32 size = object_crosshair->getOriginalSize();
+ v2s32 lsize = v2s32(m_displaycenter.X - (size.X / 2),
+ m_displaycenter.Y - (size.Y / 2));
+ driver->draw2DImage(object_crosshair, lsize,
+ core::rect<s32>(0, 0, size.X, size.Y),
+ nullptr, crosshair_argb, true);
+ } else {
+ driver->draw2DLine(
+ m_displaycenter - v2s32(OBJECT_CROSSHAIR_LINE_SIZE,
+ OBJECT_CROSSHAIR_LINE_SIZE),
+ m_displaycenter + v2s32(OBJECT_CROSSHAIR_LINE_SIZE,
+ OBJECT_CROSSHAIR_LINE_SIZE), crosshair_argb);
+ driver->draw2DLine(
+ m_displaycenter + v2s32(OBJECT_CROSSHAIR_LINE_SIZE,
+ -OBJECT_CROSSHAIR_LINE_SIZE),
+ m_displaycenter + v2s32(-OBJECT_CROSSHAIR_LINE_SIZE,
+ OBJECT_CROSSHAIR_LINE_SIZE), crosshair_argb);
+ }
+
+ return;
+ }
+
if (use_crosshair_image) {
video::ITexture *crosshair = tsrc->getTexture("crosshair.png");
v2u32 size = crosshair->getOriginalSize();
@@ -495,12 +637,12 @@ void Hud::drawCrosshair()
m_displaycenter.Y - (size.Y / 2));
driver->draw2DImage(crosshair, lsize,
core::rect<s32>(0, 0, size.X, size.Y),
- 0, crosshair_argb, true);
+ nullptr, crosshair_argb, true);
} else {
- driver->draw2DLine(m_displaycenter - v2s32(10, 0),
- m_displaycenter + v2s32(10, 0), crosshair_argb);
- driver->draw2DLine(m_displaycenter - v2s32(0, 10),
- m_displaycenter + v2s32(0, 10), crosshair_argb);
+ driver->draw2DLine(m_displaycenter - v2s32(CROSSHAIR_LINE_SIZE, 0),
+ m_displaycenter + v2s32(CROSSHAIR_LINE_SIZE, 0), crosshair_argb);
+ driver->draw2DLine(m_displaycenter - v2s32(0, CROSSHAIR_LINE_SIZE),
+ m_displaycenter + v2s32(0, CROSSHAIR_LINE_SIZE), crosshair_argb);
}
}
@@ -517,12 +659,10 @@ void Hud::drawSelectionMesh()
// Draw 3D selection boxes
video::SMaterial oldmaterial = driver->getMaterial2D();
driver->setMaterial(m_selection_material);
- for (std::vector<aabb3f>::const_iterator
- i = m_selection_boxes.begin();
- i != m_selection_boxes.end(); ++i) {
+ for (auto & selection_box : m_selection_boxes) {
aabb3f box = aabb3f(
- i->MinEdge + m_selection_pos_with_offset,
- i->MaxEdge + m_selection_pos_with_offset);
+ selection_box.MinEdge + m_selection_pos_with_offset,
+ selection_box.MaxEdge + m_selection_pos_with_offset);
u32 r = (selectionbox_argb.getRed() *
m_selection_mesh_color.getRed() / 255);
diff --git a/src/client/hud.h b/src/client/hud.h
index d9b5e0686..ba34d479d 100644
--- a/src/client/hud.h
+++ b/src/client/hud.h
@@ -18,8 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef CLIENT_HUD_HEADER
-#define CLIENT_HUD_HEADER
+#pragma once
#include <vector>
#include <IGUIFont.h>
@@ -46,12 +45,16 @@ public:
video::SColor crosshair_argb;
video::SColor selectionbox_argb;
+
bool use_crosshair_image = false;
+ bool use_object_crosshair_image = false;
std::string hotbar_image = "";
bool use_hotbar_image = false;
std::string hotbar_selected_image = "";
bool use_hotbar_selected_image = false;
+ bool pointing_at_object = false;
+
Hud(gui::IGUIEnvironment *guienv, Client *client, LocalPlayer *player,
Inventory *inventory);
~Hud();
@@ -81,8 +84,10 @@ public:
void drawLuaElements(const v3s16 &camera_offset);
private:
- void drawStatbar(v2s32 pos, u16 corner, u16 drawdir, const std::string &texture,
- s32 count, v2s32 offset, v2s32 size = v2s32());
+ bool calculateScreenPos(const v3s16 &camera_offset, HudElement *e, v2s32 *pos);
+ void drawStatbar(v2s32 pos, u16 corner, u16 drawdir,
+ const std::string &texture, const std::string& bgtexture,
+ s32 count, s32 maxcount, v2s32 offset, v2s32 size = v2s32());
void drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount,
s32 inv_offset, InventoryList *mainlist, u16 selectitem,
@@ -91,6 +96,7 @@ private:
void drawItem(const ItemStack &item, const core::rect<s32> &rect, bool selected);
float m_hud_scaling; // cached minetest setting
+ float m_scale_factor;
v3s16 m_camera_offset;
v2u32 m_screensize;
v2s32 m_displaycenter;
@@ -145,4 +151,3 @@ void drawItemStack(
const v3s16 &angle,
const v3s16 &rotation_speed);
-#endif
diff --git a/src/client/imagefilters.cpp b/src/client/imagefilters.cpp
index dd029628f..0fa501410 100644
--- a/src/client/imagefilters.cpp
+++ b/src/client/imagefilters.cpp
@@ -91,7 +91,7 @@ void imageScaleNNAA(video::IImage *src, const core::rect<s32> &srcrect, video::I
u32 dy, dx;
video::SColor pxl;
- // Cache rectsngle boundaries.
+ // Cache rectangle boundaries.
double sox = srcrect.UpperLeftCorner.X * 1.0;
double soy = srcrect.UpperLeftCorner.Y * 1.0;
double sw = srcrect.getWidth() * 1.0;
@@ -107,15 +107,15 @@ void imageScaleNNAA(video::IImage *src, const core::rect<s32> &srcrect, video::I
// Do some basic clipping, and for mirrored/flipped rects,
// make sure min/max are in the right order.
minsx = sox + (dx * sw / dim.Width);
- minsx = rangelim(minsx, 0, sw);
+ minsx = rangelim(minsx, 0, sox + sw);
maxsx = minsx + sw / dim.Width;
- maxsx = rangelim(maxsx, 0, sw);
+ maxsx = rangelim(maxsx, 0, sox + sw);
if (minsx > maxsx)
SWAP(double, minsx, maxsx);
minsy = soy + (dy * sh / dim.Height);
- minsy = rangelim(minsy, 0, sh);
+ minsy = rangelim(minsy, 0, soy + sh);
maxsy = minsy + sh / dim.Height;
- maxsy = rangelim(maxsy, 0, sh);
+ maxsy = rangelim(maxsy, 0, soy + sh);
if (minsy > maxsy)
SWAP(double, minsy, maxsy);
diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h
index 9be2a2ed4..fc7998f20 100644
--- a/src/client/inputhandler.h
+++ b/src/client/inputhandler.h
@@ -219,6 +219,11 @@ public:
virtual ~InputHandler() = default;
+ virtual bool isRandom() const
+ {
+ return false;
+ }
+
virtual bool isKeyDown(GameKeyType k) = 0;
virtual bool wasKeyDown(GameKeyType k) = 0;
virtual bool cancelPressed() = 0;
@@ -372,6 +377,11 @@ class RandomInputHandler : public InputHandler
public:
RandomInputHandler() = default;
+ bool isRandom() const
+ {
+ return true;
+ }
+
virtual bool isKeyDown(GameKeyType k) { return keydown[keycache.key[k]]; }
virtual bool wasKeyDown(GameKeyType k) { return false; }
virtual bool cancelPressed() { return false; }
diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp
index c20c3619f..1e7040d57 100644
--- a/src/client/localplayer.cpp
+++ b/src/client/localplayer.cpp
@@ -200,6 +200,8 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
if (noclip && free_move) {
position += m_speed * dtime;
setPosition(position);
+
+ touching_ground = false;
added_velocity = v3f(0.0f); // ignored
return;
}
@@ -436,9 +438,11 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
Check properties of the node on which the player is standing
*/
const ContentFeatures &f = nodemgr->get(map->getNode(m_standing_node));
+ const ContentFeatures &f1 = nodemgr->get(map->getNode(m_standing_node + v3s16(0, 1, 0)));
// Determine if jumping is possible
- m_disable_jump = itemgroup_get(f.groups, "disable_jump");
+ m_disable_jump = itemgroup_get(f.groups, "disable_jump") ||
+ itemgroup_get(f1.groups, "disable_jump");
m_can_jump = ((touching_ground && !is_climbing) || sneak_can_jump) && !m_disable_jump;
// Jump key pressed while jumping off from a bouncy block
@@ -785,6 +789,8 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d,
if (free_move) {
position += m_speed * dtime;
setPosition(position);
+
+ touching_ground = false;
m_sneak_node_exists = false;
added_velocity = v3f(0.0f);
return;
diff --git a/src/client/localplayer.h b/src/client/localplayer.h
index 95dceb1f4..345aec9d9 100644
--- a/src/client/localplayer.h
+++ b/src/client/localplayer.h
@@ -135,12 +135,17 @@ public:
}
v3f getPosition() const { return m_position; }
+
+ // Non-transformed eye offset getters
+ // For accurate positions, use the Camera functions
v3f getEyePosition() const { return m_position + getEyeOffset(); }
v3f getEyeOffset() const;
void setEyeHeight(float eye_height) { m_eye_height = eye_height; }
void setCollisionbox(const aabb3f &box) { m_collisionbox = box; }
+ const aabb3f& getCollisionbox() const { return m_collisionbox; }
+
float getZoomFOV() const { return m_zoom_fov; }
void setZoomFOV(float zoom_fov) { m_zoom_fov = zoom_fov; }
diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp
index c65f5492a..6efdb5f2e 100644
--- a/src/client/mapblock_mesh.cpp
+++ b/src/client/mapblock_mesh.cpp
@@ -228,7 +228,7 @@ static u16 getSmoothLightCombined(const v3s16 &p,
return f.light_propagates;
};
- std::array<bool, 4> obstructed = {{ 1, 1, 1, 1 }};
+ bool obstructed[4] = { true, true, true, true };
add_node(0);
bool opaque1 = !add_node(1);
bool opaque2 = !add_node(2);
@@ -375,6 +375,32 @@ void final_color_blend(video::SColor *result,
Mesh generation helpers
*/
+// This table is moved outside getNodeVertexDirs to avoid the compiler using
+// a mutex to initialize this table at runtime right in the hot path.
+// For details search the internet for "cxa_guard_acquire".
+static const v3s16 vertex_dirs_table[] = {
+ // ( 1, 0, 0)
+ v3s16( 1,-1, 1), v3s16( 1,-1,-1),
+ v3s16( 1, 1,-1), v3s16( 1, 1, 1),
+ // ( 0, 1, 0)
+ v3s16( 1, 1,-1), v3s16(-1, 1,-1),
+ v3s16(-1, 1, 1), v3s16( 1, 1, 1),
+ // ( 0, 0, 1)
+ v3s16(-1,-1, 1), v3s16( 1,-1, 1),
+ v3s16( 1, 1, 1), v3s16(-1, 1, 1),
+ // invalid
+ v3s16(), v3s16(), v3s16(), v3s16(),
+ // ( 0, 0,-1)
+ v3s16( 1,-1,-1), v3s16(-1,-1,-1),
+ v3s16(-1, 1,-1), v3s16( 1, 1,-1),
+ // ( 0,-1, 0)
+ v3s16( 1,-1, 1), v3s16(-1,-1, 1),
+ v3s16(-1,-1,-1), v3s16( 1,-1,-1),
+ // (-1, 0, 0)
+ v3s16(-1,-1,-1), v3s16(-1,-1, 1),
+ v3s16(-1, 1, 1), v3s16(-1, 1,-1)
+};
+
/*
vertex_dirs: v3s16[4]
*/
@@ -387,44 +413,16 @@ static void getNodeVertexDirs(const v3s16 &dir, v3s16 *vertex_dirs)
2: top-left
3: top-right
*/
- if (dir == v3s16(0, 0, 1)) {
- // If looking towards z+, this is the face that is behind
- // the center point, facing towards z+.
- vertex_dirs[0] = v3s16(-1,-1, 1);
- vertex_dirs[1] = v3s16( 1,-1, 1);
- vertex_dirs[2] = v3s16( 1, 1, 1);
- vertex_dirs[3] = v3s16(-1, 1, 1);
- } else if (dir == v3s16(0, 0, -1)) {
- // faces towards Z-
- vertex_dirs[0] = v3s16( 1,-1,-1);
- vertex_dirs[1] = v3s16(-1,-1,-1);
- vertex_dirs[2] = v3s16(-1, 1,-1);
- vertex_dirs[3] = v3s16( 1, 1,-1);
- } else if (dir == v3s16(1, 0, 0)) {
- // faces towards X+
- vertex_dirs[0] = v3s16( 1,-1, 1);
- vertex_dirs[1] = v3s16( 1,-1,-1);
- vertex_dirs[2] = v3s16( 1, 1,-1);
- vertex_dirs[3] = v3s16( 1, 1, 1);
- } else if (dir == v3s16(-1, 0, 0)) {
- // faces towards X-
- vertex_dirs[0] = v3s16(-1,-1,-1);
- vertex_dirs[1] = v3s16(-1,-1, 1);
- vertex_dirs[2] = v3s16(-1, 1, 1);
- vertex_dirs[3] = v3s16(-1, 1,-1);
- } else if (dir == v3s16(0, 1, 0)) {
- // faces towards Y+ (assume Z- as "down" in texture)
- vertex_dirs[0] = v3s16( 1, 1,-1);
- vertex_dirs[1] = v3s16(-1, 1,-1);
- vertex_dirs[2] = v3s16(-1, 1, 1);
- vertex_dirs[3] = v3s16( 1, 1, 1);
- } else if (dir == v3s16(0, -1, 0)) {
- // faces towards Y- (assume Z+ as "down" in texture)
- vertex_dirs[0] = v3s16( 1,-1, 1);
- vertex_dirs[1] = v3s16(-1,-1, 1);
- vertex_dirs[2] = v3s16(-1,-1,-1);
- vertex_dirs[3] = v3s16( 1,-1,-1);
- }
+
+ // Direction must be (1,0,0), (-1,0,0), (0,1,0), (0,-1,0),
+ // (0,0,1), (0,0,-1)
+ assert(dir.X * dir.X + dir.Y * dir.Y + dir.Z * dir.Z == 1);
+
+ // Convert direction to single integer for table lookup
+ u8 idx = (dir.X + 2 * dir.Y + 3 * dir.Z) & 7;
+ idx = (idx - 1) * 4;
+
+ memcpy(vertex_dirs, &vertex_dirs_table[idx], 4 * sizeof(v3s16));
}
static void getNodeTextureCoords(v3f base, const v3f &scale, const v3s16 &dir, float *u, float *v)
@@ -905,8 +903,10 @@ static void updateFastFaceRow(
v3s16 p_corrected;
v3s16 face_dir_corrected;
u16 lights[4] = {0, 0, 0, 0};
- u8 waving;
+ u8 waving = 0;
TileSpec tile;
+
+ // Get info of first tile
getTileInfo(data, p, face_dir,
makes_face, p_corrected, face_dir_corrected,
lights, waving, tile);
@@ -917,8 +917,6 @@ static void updateFastFaceRow(
// If tiling can be done, this is set to false in the next step
bool next_is_different = true;
- v3s16 p_next;
-
bool next_makes_face = false;
v3s16 next_p_corrected;
v3s16 next_face_dir_corrected;
@@ -927,9 +925,9 @@ static void updateFastFaceRow(
// If at last position, there is nothing to compare to and
// the face must be drawn anyway
if (j != MAP_BLOCKSIZE - 1) {
- p_next = p + translate_dir;
+ p += translate_dir;
- getTileInfo(data, p_next, face_dir,
+ getTileInfo(data, p, face_dir,
next_makes_face, next_p_corrected,
next_face_dir_corrected, next_lights,
waving,
@@ -938,7 +936,7 @@ static void updateFastFaceRow(
if (next_makes_face == makes_face
&& next_p_corrected == p_corrected + translate_dir
&& next_face_dir_corrected == face_dir_corrected
- && memcmp(next_lights, lights, ARRLEN(lights) * sizeof(u16)) == 0
+ && memcmp(next_lights, lights, sizeof(lights)) == 0
// Don't apply fast faces to waving water.
&& (waving != 3 || !waving_liquids)
&& next_tile.isTileable(tile)) {
@@ -976,10 +974,9 @@ static void updateFastFaceRow(
makes_face = next_makes_face;
p_corrected = next_p_corrected;
face_dir_corrected = next_face_dir_corrected;
- std::memcpy(lights, next_lights, ARRLEN(lights) * sizeof(u16));
+ memcpy(lights, next_lights, sizeof(lights));
if (next_is_different)
- tile = next_tile;
- p = p_next;
+ tile = std::move(next_tile); // faster than copy
}
}
diff --git a/src/client/mesh.cpp b/src/client/mesh.cpp
index 4d73ead8a..e1ec22068 100644
--- a/src/client/mesh.cpp
+++ b/src/client/mesh.cpp
@@ -328,6 +328,26 @@ void recalculateBoundingBox(scene::IMesh *src_mesh)
src_mesh->setBoundingBox(bbox);
}
+bool checkMeshNormals(scene::IMesh *mesh)
+{
+ u32 buffer_count = mesh->getMeshBufferCount();
+
+ for (u32 i = 0; i < buffer_count; i++) {
+ scene::IMeshBuffer *buffer = mesh->getMeshBuffer(i);
+
+ // Here we intentionally check only first normal, assuming that if buffer
+ // has it valid, then most likely all other ones are fine too. We can
+ // check all of the normals to have length, but it seems like an overkill
+ // hurting the performance and covering only really weird broken models.
+ f32 length = buffer->getNormal(0).getLength();
+
+ if (!std::isfinite(length) || length < 1e-10f)
+ return false;
+ }
+
+ return true;
+}
+
scene::IMeshBuffer* cloneMeshBuffer(scene::IMeshBuffer *mesh_buffer)
{
switch (mesh_buffer->getVertexType()) {
diff --git a/src/client/mesh.h b/src/client/mesh.h
index 0c4094de2..103c61e45 100644
--- a/src/client/mesh.h
+++ b/src/client/mesh.h
@@ -122,6 +122,12 @@ scene::IMesh* convertNodeboxesToMesh(const std::vector<aabb3f> &boxes,
void recalculateBoundingBox(scene::IMesh *src_mesh);
/*
+ Check if mesh has valid normals and return true if it does.
+ We assume normal to be valid when it's 0 < length < Inf. and not NaN
+ */
+bool checkMeshNormals(scene::IMesh *mesh);
+
+/*
Vertex cache optimization according to the Forsyth paper:
http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html
Ported from irrlicht 1.8
diff --git a/src/client/particles.cpp b/src/client/particles.cpp
index a0e4e54eb..7acd996dc 100644
--- a/src/client/particles.cpp
+++ b/src/client/particles.cpp
@@ -37,32 +37,31 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Utility
*/
-v3f random_v3f(v3f min, v3f max)
+static f32 random_f32(f32 min, f32 max)
+{
+ return rand() / (float)RAND_MAX * (max - min) + min;
+}
+
+static v3f random_v3f(v3f min, v3f max)
{
return v3f(
- rand() / (float)RAND_MAX * (max.X - min.X) + min.X,
- rand() / (float)RAND_MAX * (max.Y - min.Y) + min.Y,
- rand() / (float)RAND_MAX * (max.Z - min.Z) + min.Z);
+ random_f32(min.X, max.X),
+ random_f32(min.Y, max.Y),
+ random_f32(min.Z, max.Z));
}
+/*
+ Particle
+*/
+
Particle::Particle(
IGameDef *gamedef,
LocalPlayer *player,
ClientEnvironment *env,
- v3f pos,
- v3f velocity,
- v3f acceleration,
- float expirationtime,
- float size,
- bool collisiondetection,
- bool collision_removal,
- bool object_collision,
- bool vertical,
+ const ParticleParameters &p,
video::ITexture *texture,
v2f texpos,
v2f texsize,
- const struct TileAnimationParams &anim,
- u8 glow,
video::SColor color
):
scene::ISceneNode(RenderingEngine::get_scene_manager()->getRootSceneNode(),
@@ -81,33 +80,28 @@ Particle::Particle(
m_material.setTexture(0, texture);
m_texpos = texpos;
m_texsize = texsize;
- m_animation = anim;
+ m_animation = p.animation;
// Color
m_base_color = color;
m_color = color;
// Particle related
- m_pos = pos;
- m_velocity = velocity;
- m_acceleration = acceleration;
- m_expiration = expirationtime;
+ m_pos = p.pos;
+ m_velocity = p.vel;
+ m_acceleration = p.acc;
+ m_expiration = p.expirationtime;
m_player = player;
- m_size = size;
- m_collisiondetection = collisiondetection;
- m_collision_removal = collision_removal;
- m_object_collision = object_collision;
- m_vertical = vertical;
- m_glow = glow;
+ m_size = p.size;
+ m_collisiondetection = p.collisiondetection;
+ m_collision_removal = p.collision_removal;
+ m_object_collision = p.object_collision;
+ m_vertical = p.vertical;
+ m_glow = p.glow;
// Irrlicht stuff
- m_collisionbox = aabb3f(
- -size / 2,
- -size / 2,
- -size / 2,
- size / 2,
- size / 2,
- size / 2);
+ const float c = p.size / 2;
+ m_collisionbox = aabb3f(-c, -c, -c, c, c, c);
this->setAutomaticCulling(scene::EAC_OFF);
// Init lighting
@@ -255,52 +249,22 @@ void Particle::updateVertices()
ParticleSpawner::ParticleSpawner(
IGameDef *gamedef,
LocalPlayer *player,
- u16 amount,
- float time,
- v3f minpos, v3f maxpos,
- v3f minvel, v3f maxvel,
- v3f minacc, v3f maxacc,
- float minexptime, float maxexptime,
- float minsize, float maxsize,
- bool collisiondetection,
- bool collision_removal,
- bool object_collision,
+ const ParticleSpawnerParameters &p,
u16 attached_id,
- bool vertical,
video::ITexture *texture,
- const struct TileAnimationParams &anim,
- u8 glow,
ParticleManager *p_manager
):
- m_particlemanager(p_manager)
+ m_particlemanager(p_manager), p(p)
{
m_gamedef = gamedef;
m_player = player;
- m_amount = amount;
- m_spawntime = time;
- m_minpos = minpos;
- m_maxpos = maxpos;
- m_minvel = minvel;
- m_maxvel = maxvel;
- m_minacc = minacc;
- m_maxacc = maxacc;
- m_minexptime = minexptime;
- m_maxexptime = maxexptime;
- m_minsize = minsize;
- m_maxsize = maxsize;
- m_collisiondetection = collisiondetection;
- m_collision_removal = collision_removal;
- m_object_collision = object_collision;
m_attached_id = attached_id;
- m_vertical = vertical;
m_texture = texture;
m_time = 0;
- m_animation = anim;
- m_glow = glow;
- for (u16 i = 0; i <= m_amount; i++)
- {
- float spawntime = (float)rand() / (float)RAND_MAX * m_spawntime;
+ m_spawntimes.reserve(p.amount + 1);
+ for (u16 i = 0; i <= p.amount; i++) {
+ float spawntime = rand() / (float)RAND_MAX * p.time;
m_spawntimes.push_back(spawntime);
}
}
@@ -309,7 +273,7 @@ void ParticleSpawner::spawnParticle(ClientEnvironment *env, float radius,
const core::matrix4 *attached_absolute_pos_rot_matrix)
{
v3f ppos = m_player->getPosition() / BS;
- v3f pos = random_v3f(m_minpos, m_maxpos);
+ v3f pos = random_v3f(p.minpos, p.maxpos);
// Need to apply this first or the following check
// will be wrong for attached spawners
@@ -326,41 +290,51 @@ void ParticleSpawner::spawnParticle(ClientEnvironment *env, float radius,
if (pos.getDistanceFrom(ppos) > radius)
return;
- v3f vel = random_v3f(m_minvel, m_maxvel);
- v3f acc = random_v3f(m_minacc, m_maxacc);
+ // Parameters for the single particle we're about to spawn
+ ParticleParameters pp;
+ pp.pos = pos;
+
+ pp.vel = random_v3f(p.minvel, p.maxvel);
+ pp.acc = random_v3f(p.minacc, p.maxacc);
if (attached_absolute_pos_rot_matrix) {
// Apply attachment rotation
- attached_absolute_pos_rot_matrix->rotateVect(vel);
- attached_absolute_pos_rot_matrix->rotateVect(acc);
+ attached_absolute_pos_rot_matrix->rotateVect(pp.vel);
+ attached_absolute_pos_rot_matrix->rotateVect(pp.acc);
}
- float exptime = rand() / (float)RAND_MAX
- * (m_maxexptime - m_minexptime)
- + m_minexptime;
+ pp.expirationtime = random_f32(p.minexptime, p.maxexptime);
+ p.copyCommon(pp);
+
+ video::ITexture *texture;
+ v2f texpos, texsize;
+ video::SColor color(0xFFFFFFFF);
+
+ if (p.node.getContent() != CONTENT_IGNORE) {
+ const ContentFeatures &f =
+ m_particlemanager->m_env->getGameDef()->ndef()->get(p.node);
+ if (!ParticleManager::getNodeParticleParams(p.node, f, pp, &texture,
+ texpos, texsize, &color, p.node_tile))
+ return;
+ } else {
+ texture = m_texture;
+ texpos = v2f(0.0f, 0.0f);
+ texsize = v2f(1.0f, 1.0f);
+ }
- float size = rand() / (float)RAND_MAX
- * (m_maxsize - m_minsize)
- + m_minsize;
+ // Allow keeping default random size
+ if (p.maxsize > 0.0f)
+ pp.size = random_f32(p.minsize, p.maxsize);
m_particlemanager->addParticle(new Particle(
m_gamedef,
m_player,
env,
- pos,
- vel,
- acc,
- exptime,
- size,
- m_collisiondetection,
- m_collision_removal,
- m_object_collision,
- m_vertical,
- m_texture,
- v2f(0.0, 0.0),
- v2f(1.0, 1.0),
- m_animation,
- m_glow
+ pp,
+ texture,
+ texpos,
+ texsize,
+ color
));
}
@@ -375,18 +349,17 @@ void ParticleSpawner::step(float dtime, ClientEnvironment *env)
const core::matrix4 *attached_absolute_pos_rot_matrix = nullptr;
if (m_attached_id) {
if (GenericCAO *attached = dynamic_cast<GenericCAO *>(env->getActiveObject(m_attached_id))) {
- attached_absolute_pos_rot_matrix = &attached->getAbsolutePosRotMatrix();
+ attached_absolute_pos_rot_matrix = attached->getAbsolutePosRotMatrix();
} else {
unloaded = true;
}
}
- if (m_spawntime != 0) {
+ if (p.time != 0) {
// Spawner exists for a predefined timespan
- for (std::vector<float>::iterator i = m_spawntimes.begin();
- i != m_spawntimes.end();) {
- if ((*i) <= m_time && m_amount > 0) {
- --m_amount;
+ for (auto i = m_spawntimes.begin(); i != m_spawntimes.end(); ) {
+ if ((*i) <= m_time && p.amount > 0) {
+ --p.amount;
// Pretend to, but don't actually spawn a particle if it is
// attached to an unloaded object or distant from player.
@@ -405,13 +378,16 @@ void ParticleSpawner::step(float dtime, ClientEnvironment *env)
if (unloaded)
return;
- for (int i = 0; i <= m_amount; i++) {
+ for (int i = 0; i <= p.amount; i++) {
if (rand() / (float)RAND_MAX < dtime)
spawnParticle(env, radius, attached_absolute_pos_rot_matrix);
}
}
}
+/*
+ ParticleManager
+*/
ParticleManager::ParticleManager(ClientEnvironment *env) :
m_env(env)
@@ -479,99 +455,106 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, Client *client,
{
switch (event->type) {
case CE_DELETE_PARTICLESPAWNER: {
- MutexAutoLock lock(m_spawner_list_lock);
- if (m_particle_spawners.find(event->delete_particlespawner.id) !=
- m_particle_spawners.end()) {
- delete m_particle_spawners.find(event->delete_particlespawner.id)->second;
- m_particle_spawners.erase(event->delete_particlespawner.id);
- }
+ deleteParticleSpawner(event->delete_particlespawner.id);
// no allocated memory in delete event
break;
}
case CE_ADD_PARTICLESPAWNER: {
- {
- MutexAutoLock lock(m_spawner_list_lock);
- if (m_particle_spawners.find(event->add_particlespawner.id) !=
- m_particle_spawners.end()) {
- delete m_particle_spawners.find(event->add_particlespawner.id)->second;
- m_particle_spawners.erase(event->add_particlespawner.id);
- }
- }
+ deleteParticleSpawner(event->add_particlespawner.id);
+
+ const ParticleSpawnerParameters &p = *event->add_particlespawner.p;
video::ITexture *texture =
- client->tsrc()->getTextureForMesh(*(event->add_particlespawner.texture));
+ client->tsrc()->getTextureForMesh(p.texture);
auto toadd = new ParticleSpawner(client, player,
- event->add_particlespawner.amount,
- event->add_particlespawner.spawntime,
- *event->add_particlespawner.minpos,
- *event->add_particlespawner.maxpos,
- *event->add_particlespawner.minvel,
- *event->add_particlespawner.maxvel,
- *event->add_particlespawner.minacc,
- *event->add_particlespawner.maxacc,
- event->add_particlespawner.minexptime,
- event->add_particlespawner.maxexptime,
- event->add_particlespawner.minsize,
- event->add_particlespawner.maxsize,
- event->add_particlespawner.collisiondetection,
- event->add_particlespawner.collision_removal,
- event->add_particlespawner.object_collision,
+ p,
event->add_particlespawner.attached_id,
- event->add_particlespawner.vertical,
texture,
- event->add_particlespawner.animation,
- event->add_particlespawner.glow,
this);
- /* delete allocated content of event */
- delete event->add_particlespawner.minpos;
- delete event->add_particlespawner.maxpos;
- delete event->add_particlespawner.minvel;
- delete event->add_particlespawner.maxvel;
- delete event->add_particlespawner.minacc;
- delete event->add_particlespawner.texture;
- delete event->add_particlespawner.maxacc;
-
- {
- MutexAutoLock lock(m_spawner_list_lock);
- m_particle_spawners[event->add_particlespawner.id] = toadd;
- }
+ addParticleSpawner(event->add_particlespawner.id, toadd);
+
+ delete event->add_particlespawner.p;
break;
}
case CE_SPAWN_PARTICLE: {
- video::ITexture *texture =
- client->tsrc()->getTextureForMesh(*(event->spawn_particle.texture));
-
- Particle *toadd = new Particle(client, player, m_env,
- *event->spawn_particle.pos,
- *event->spawn_particle.vel,
- *event->spawn_particle.acc,
- event->spawn_particle.expirationtime,
- event->spawn_particle.size,
- event->spawn_particle.collisiondetection,
- event->spawn_particle.collision_removal,
- event->spawn_particle.object_collision,
- event->spawn_particle.vertical,
- texture,
- v2f(0.0, 0.0),
- v2f(1.0, 1.0),
- event->spawn_particle.animation,
- event->spawn_particle.glow);
+ ParticleParameters &p = *event->spawn_particle;
- addParticle(toadd);
+ video::ITexture *texture;
+ v2f texpos, texsize;
+ video::SColor color(0xFFFFFFFF);
- delete event->spawn_particle.pos;
- delete event->spawn_particle.vel;
- delete event->spawn_particle.acc;
- delete event->spawn_particle.texture;
+ f32 oldsize = p.size;
+
+ if (p.node.getContent() != CONTENT_IGNORE) {
+ const ContentFeatures &f = m_env->getGameDef()->ndef()->get(p.node);
+ if (!getNodeParticleParams(p.node, f, p, &texture, texpos,
+ texsize, &color, p.node_tile))
+ texture = nullptr;
+ } else {
+ texture = client->tsrc()->getTextureForMesh(p.texture);
+ texpos = v2f(0.0f, 0.0f);
+ texsize = v2f(1.0f, 1.0f);
+ }
+ // Allow keeping default random size
+ if (oldsize > 0.0f)
+ p.size = oldsize;
+
+ if (texture) {
+ Particle *toadd = new Particle(client, player, m_env,
+ p, texture, texpos, texsize, color);
+
+ addParticle(toadd);
+ }
+
+ delete event->spawn_particle;
break;
}
default: break;
}
}
+bool ParticleManager::getNodeParticleParams(const MapNode &n,
+ const ContentFeatures &f, ParticleParameters &p, video::ITexture **texture,
+ v2f &texpos, v2f &texsize, video::SColor *color, u8 tilenum)
+{
+ // No particles for "airlike" nodes
+ if (f.drawtype == NDT_AIRLIKE)
+ return false;
+
+ // Texture
+ u8 texid;
+ if (tilenum > 0 && tilenum <= 6)
+ texid = tilenum - 1;
+ else
+ texid = rand() % 6;
+ const TileLayer &tile = f.tiles[texid].layers[0];
+ p.animation.type = TAT_NONE;
+
+ // Only use first frame of animated texture
+ if (tile.material_flags & MATERIAL_FLAG_ANIMATION)
+ *texture = (*tile.frames)[0].texture;
+ else
+ *texture = tile.texture;
+
+ float size = (rand() % 8) / 64.0f;
+ p.size = BS * size;
+ if (tile.scale)
+ size /= tile.scale;
+ texsize = v2f(size * 2.0f, size * 2.0f);
+ texpos.X = (rand() % 64) / 64.0f - texsize.X;
+ texpos.Y = (rand() % 64) / 64.0f - texsize.Y;
+
+ if (tile.has_color)
+ *color = tile.color;
+ else
+ n.getColor(f, color);
+
+ return true;
+}
+
// The final burst of particles when a node is finally dug, *not* particles
// spawned during the digging of a node.
@@ -593,73 +576,41 @@ void ParticleManager::addDiggingParticles(IGameDef *gamedef,
void ParticleManager::addNodeParticle(IGameDef *gamedef,
LocalPlayer *player, v3s16 pos, const MapNode &n, const ContentFeatures &f)
{
- // No particles for "airlike" nodes
- if (f.drawtype == NDT_AIRLIKE)
- return;
-
- // Texture
- u8 texid = myrand_range(0, 5);
- const TileLayer &tile = f.tiles[texid].layers[0];
+ ParticleParameters p;
video::ITexture *texture;
- struct TileAnimationParams anim;
- anim.type = TAT_NONE;
+ v2f texpos, texsize;
+ video::SColor color;
- // Only use first frame of animated texture
- if (tile.material_flags & MATERIAL_FLAG_ANIMATION)
- texture = (*tile.frames)[0].texture;
- else
- texture = tile.texture;
+ if (!getNodeParticleParams(n, f, p, &texture, texpos, texsize, &color))
+ return;
- float size = (rand() % 8) / 64.0f;
- float visual_size = BS * size;
- if (tile.scale)
- size /= tile.scale;
- v2f texsize(size * 2.0f, size * 2.0f);
- v2f texpos;
- texpos.X = (rand() % 64) / 64.0f - texsize.X;
- texpos.Y = (rand() % 64) / 64.0f - texsize.Y;
+ p.expirationtime = (rand() % 100) / 100.0f;
// Physics
- v3f velocity(
+ p.vel = v3f(
(rand() % 150) / 50.0f - 1.5f,
(rand() % 150) / 50.0f,
(rand() % 150) / 50.0f - 1.5f
);
- v3f acceleration(
+ p.acc = v3f(
0.0f,
-player->movement_gravity * player->physics_override_gravity / BS,
0.0f
);
- v3f particlepos = v3f(
+ p.pos = v3f(
(f32)pos.X + (rand() % 100) / 200.0f - 0.25f,
(f32)pos.Y + (rand() % 100) / 200.0f - 0.25f,
(f32)pos.Z + (rand() % 100) / 200.0f - 0.25f
);
- video::SColor color;
- if (tile.has_color)
- color = tile.color;
- else
- n.getColor(f, &color);
-
Particle *toadd = new Particle(
gamedef,
player,
m_env,
- particlepos,
- velocity,
- acceleration,
- (rand() % 100) / 100.0f, // expiration time
- visual_size,
- true,
- false,
- false,
- false,
+ p,
texture,
texpos,
texsize,
- anim,
- 0,
color);
addParticle(toadd);
@@ -670,3 +621,20 @@ void ParticleManager::addParticle(Particle *toadd)
MutexAutoLock lock(m_particle_list_lock);
m_particles.push_back(toadd);
}
+
+
+void ParticleManager::addParticleSpawner(u64 id, ParticleSpawner *toadd)
+{
+ MutexAutoLock lock(m_spawner_list_lock);
+ m_particle_spawners[id] = toadd;
+}
+
+void ParticleManager::deleteParticleSpawner(u64 id)
+{
+ MutexAutoLock lock(m_spawner_list_lock);
+ auto it = m_particle_spawners.find(id);
+ if (it != m_particle_spawners.end()) {
+ delete it->second;
+ m_particle_spawners.erase(it);
+ }
+}
diff --git a/src/client/particles.h b/src/client/particles.h
index e7b8cbe24..2011f0262 100644
--- a/src/client/particles.h
+++ b/src/client/particles.h
@@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_extrabloated.h"
#include "client/tile.h"
#include "localplayer.h"
-#include "tileanimation.h"
+#include "../particles.h"
struct ClientEvent;
class ParticleManager;
@@ -38,21 +38,11 @@ class Particle : public scene::ISceneNode
IGameDef* gamedef,
LocalPlayer *player,
ClientEnvironment *env,
- v3f pos,
- v3f velocity,
- v3f acceleration,
- float expirationtime,
- float size,
- bool collisiondetection,
- bool collision_removal,
- bool object_collision,
- bool vertical,
+ const ParticleParameters &p,
video::ITexture *texture,
v2f texpos,
v2f texsize,
- const struct TileAnimationParams &anim,
- u8 glow,
- video::SColor color = video::SColor(0xFFFFFFFF)
+ video::SColor color
);
~Particle() = default;
@@ -119,20 +109,9 @@ class ParticleSpawner
public:
ParticleSpawner(IGameDef* gamedef,
LocalPlayer *player,
- u16 amount,
- float time,
- v3f minp, v3f maxp,
- v3f minvel, v3f maxvel,
- v3f minacc, v3f maxacc,
- float minexptime, float maxexptime,
- float minsize, float maxsize,
- bool collisiondetection,
- bool collision_removal,
- bool object_collision,
+ const ParticleSpawnerParameters &p,
u16 attached_id,
- bool vertical,
video::ITexture *texture,
- const struct TileAnimationParams &anim, u8 glow,
ParticleManager* p_manager);
~ParticleSpawner() = default;
@@ -140,7 +119,7 @@ public:
void step(float dtime, ClientEnvironment *env);
bool get_expired ()
- { return (m_amount <= 0) && m_spawntime != 0; }
+ { return p.amount <= 0 && p.time != 0; }
private:
void spawnParticle(ClientEnvironment *env, float radius,
@@ -150,27 +129,10 @@ private:
float m_time;
IGameDef *m_gamedef;
LocalPlayer *m_player;
- u16 m_amount;
- float m_spawntime;
- v3f m_minpos;
- v3f m_maxpos;
- v3f m_minvel;
- v3f m_maxvel;
- v3f m_minacc;
- v3f m_maxacc;
- float m_minexptime;
- float m_maxexptime;
- float m_minsize;
- float m_maxsize;
+ ParticleSpawnerParameters p;
video::ITexture *m_texture;
std::vector<float> m_spawntimes;
- bool m_collisiondetection;
- bool m_collision_removal;
- bool m_object_collision;
- bool m_vertical;
u16 m_attached_id;
- struct TileAnimationParams m_animation;
- u8 m_glow;
};
/**
@@ -197,8 +159,8 @@ public:
/**
* This function is only used by client particle spawners
*
- * We don't need to check the particle spawner list because client ID will n
- * ever overlap (u64)
+ * We don't need to check the particle spawner list because client ID will
+ * never overlap (u64)
* @return new id
*/
u64 generateSpawnerId()
@@ -207,9 +169,15 @@ public:
}
protected:
+ static bool getNodeParticleParams(const MapNode &n, const ContentFeatures &f,
+ ParticleParameters &p, video::ITexture **texture, v2f &texpos,
+ v2f &texsize, video::SColor *color, u8 tilenum = 0);
+
void addParticle(Particle* toadd);
private:
+ void addParticleSpawner(u64 id, ParticleSpawner *toadd);
+ void deleteParticleSpawner(u64 id);
void stepParticles(float dtime);
void stepSpawners(float dtime);
diff --git a/src/client/render/core.cpp b/src/client/render/core.cpp
index bf5aa6c2c..92a7137ea 100644
--- a/src/client/render/core.cpp
+++ b/src/client/render/core.cpp
@@ -86,6 +86,7 @@ void RenderingCore::drawHUD()
if (show_hud) {
if (draw_crosshair)
hud->drawCrosshair();
+
hud->drawHotbar(client->getEnv().getLocalPlayer()->getWieldIndex());
hud->drawLuaElements(camera->getOffset());
camera->drawNametags();
diff --git a/src/client/render/factory.h b/src/client/render/factory.h
index 22738404a..e3339a836 100644
--- a/src/client/render/factory.h
+++ b/src/client/render/factory.h
@@ -18,6 +18,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#pragma once
+
#include <string>
#include "core.h"
diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp
index 6e6509eeb..f5aca8f58 100644
--- a/src/client/renderingengine.cpp
+++ b/src/client/renderingengine.cpp
@@ -45,7 +45,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
+#endif
+#ifdef _WIN32
+#include <windows.h>
+#include <winuser.h>
#endif
#if ENABLE_GLES
@@ -126,12 +130,9 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
params.HighPrecisionFPU = g_settings->getBool("high_precision_fpu");
params.ZBufferBits = 24;
#ifdef __ANDROID__
- // clang-format off
params.PrivateData = porting::app_global;
- params.OGLES2ShaderPath = std::string(porting::path_user + DIR_DELIM + "media" +
- DIR_DELIM + "Shaders" + DIR_DELIM).c_str();
- // clang-format on
-#elif ENABLE_GLES
+#endif
+#if ENABLE_GLES
// there is no standardized path for these on desktop
std::string rel_path = std::string("client") + DIR_DELIM
+ "shaders" + DIR_DELIM + "Irrlicht";
@@ -226,27 +227,17 @@ bool RenderingEngine::setupTopLevelWindow(const std::string &name)
{
// FIXME: It would make more sense for there to be a switch of some
// sort here that would call the correct toplevel setup methods for
- // the environment Minetest is running in but for now not deviating
- // from the original pattern.
+ // the environment Minetest is running in.
/* Setting Xorg properties for the top level window */
setupTopLevelXorgWindow(name);
- /* Done with Xorg properties */
/* Setting general properties for the top level window */
verbosestream << "Client: Configuring general top level"
<< " window properties"
<< std::endl;
-
bool result = setWindowIcon();
- verbosestream << "Client: Finished configuring general top level"
- << " window properties"
- << std::endl;
- /* Done with general properties */
-
- // FIXME: setWindowIcon returns a bool result but it is unused.
- // For now continue to return this result.
return result;
}
@@ -262,7 +253,7 @@ void RenderingEngine::setupTopLevelXorgWindow(const std::string &name)
return;
}
- verbosestream << "Client: Configuring Xorg specific top level"
+ verbosestream << "Client: Configuring X11-specific top level"
<< " window properties"
<< std::endl;
@@ -309,8 +300,6 @@ void RenderingEngine::setupTopLevelXorgWindow(const std::string &name)
Atom NET_WM_PID = XInternAtom(x11_dpl, "_NET_WM_PID", false);
pid_t pid = getpid();
- infostream << "Client: PID is '" << static_cast<long>(pid) << "'"
- << std::endl;
XChangeProperty(x11_dpl, x11_win, NET_WM_PID,
XA_CARDINAL, 32, PropModeReplace,
@@ -327,13 +316,31 @@ void RenderingEngine::setupTopLevelXorgWindow(const std::string &name)
XChangeProperty (x11_dpl, x11_win, WM_CLIENT_LEADER,
XA_WINDOW, 32, PropModeReplace,
reinterpret_cast<unsigned char *>(&x11_win), 1);
-
- verbosestream << "Client: Finished configuring Xorg specific top level"
- << " window properties"
- << std::endl;
#endif
}
+#ifdef _WIN32
+static bool getWindowHandle(irr::video::IVideoDriver *driver, HWND &hWnd)
+{
+ const video::SExposedVideoData exposedData = driver->getExposedVideoData();
+
+ switch (driver->getDriverType()) {
+ case video::EDT_DIRECT3D8:
+ hWnd = reinterpret_cast<HWND>(exposedData.D3D8.HWnd);
+ break;
+ case video::EDT_DIRECT3D9:
+ hWnd = reinterpret_cast<HWND>(exposedData.D3D9.HWnd);
+ break;
+ case video::EDT_OPENGL:
+ hWnd = reinterpret_cast<HWND>(exposedData.OpenGLWin32.HWnd);
+ break;
+ default:
+ return false;
+ }
+
+ return true;
+}
+#endif
bool RenderingEngine::setWindowIcon()
{
@@ -351,22 +358,9 @@ bool RenderingEngine::setWindowIcon()
"-xorg-icon-128.png");
#endif
#elif defined(_WIN32)
- const video::SExposedVideoData exposedData = driver->getExposedVideoData();
HWND hWnd; // Window handle
-
- switch (driver->getDriverType()) {
- case video::EDT_DIRECT3D8:
- hWnd = reinterpret_cast<HWND>(exposedData.D3D8.HWnd);
- break;
- case video::EDT_DIRECT3D9:
- hWnd = reinterpret_cast<HWND>(exposedData.D3D9.HWnd);
- break;
- case video::EDT_OPENGL:
- hWnd = reinterpret_cast<HWND>(exposedData.OpenGLWin32.HWnd);
- break;
- default:
+ if (!getWindowHandle(driver, hWnd))
return false;
- }
// Load the ICON from resource file
const HICON hicon = LoadIcon(GetModuleHandle(NULL),
@@ -648,7 +642,7 @@ const char *RenderingEngine::getVideoDriverFriendlyName(irr::video::E_DRIVER_TYP
}
#ifndef __ANDROID__
-#ifdef XORG_USED
+#if defined(XORG_USED)
static float calcDisplayDensity()
{
@@ -683,12 +677,42 @@ float RenderingEngine::getDisplayDensity()
return cached_display_density;
}
-#else // XORG_USED
+#elif defined(_WIN32)
+
+
+static float calcDisplayDensity(irr::video::IVideoDriver *driver)
+{
+ HWND hWnd;
+ if (getWindowHandle(driver, hWnd)) {
+ HDC hdc = GetDC(hWnd);
+ float dpi = GetDeviceCaps(hdc, LOGPIXELSX);
+ ReleaseDC(hWnd, hdc);
+ return dpi / 96.0f;
+ }
+
+ /* return manually specified dpi */
+ return g_settings->getFloat("screen_dpi") / 96.0f;
+}
+
+float RenderingEngine::getDisplayDensity()
+{
+ static bool cached = false;
+ static float display_density;
+ if (!cached) {
+ display_density = calcDisplayDensity(get_video_driver());
+ cached = true;
+ }
+ return display_density;
+}
+
+#else
+
float RenderingEngine::getDisplayDensity()
{
return g_settings->getFloat("screen_dpi") / 96.0;
}
-#endif // XORG_USED
+
+#endif
v2u32 RenderingEngine::getDisplaySize()
{
diff --git a/src/client/shader.cpp b/src/client/shader.cpp
index eda415ce6..ee6079f7a 100644
--- a/src/client/shader.cpp
+++ b/src/client/shader.cpp
@@ -537,11 +537,13 @@ ShaderInfo generate_shader(const std::string &name, u8 material_type, u8 drawtyp
shaderinfo.base_material = video::EMT_SOLID;
break;
case TILE_MATERIAL_ALPHA:
+ case TILE_MATERIAL_PLAIN_ALPHA:
case TILE_MATERIAL_LIQUID_TRANSPARENT:
case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT:
shaderinfo.base_material = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
break;
case TILE_MATERIAL_BASIC:
+ case TILE_MATERIAL_PLAIN:
case TILE_MATERIAL_WAVING_LEAVES:
case TILE_MATERIAL_WAVING_PLANTS:
case TILE_MATERIAL_WAVING_LIQUID_BASIC:
@@ -644,9 +646,11 @@ ShaderInfo generate_shader(const std::string &name, u8 material_type, u8 drawtyp
"TILE_MATERIAL_WAVING_LIQUID_BASIC",
"TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT",
"TILE_MATERIAL_WAVING_LIQUID_OPAQUE",
+ "TILE_MATERIAL_PLAIN",
+ "TILE_MATERIAL_PLAIN_ALPHA",
};
- for (int i = 0; i < 10; i++){
+ for (int i = 0; i < 12; i++){
shaders_header += "#define ";
shaders_header += materialTypes[i];
shaders_header += " ";
diff --git a/src/client/sky.cpp b/src/client/sky.cpp
index 7a7b188ce..2e0cbca86 100644
--- a/src/client/sky.cpp
+++ b/src/client/sky.cpp
@@ -252,35 +252,10 @@ void Sky::render()
if (m_visible) {
driver->setMaterial(m_materials[1]);
for (u32 j = 0; j < 4; j++) {
- video::SColor c = cloudyfogcolor.getInterpolated(m_skycolor, 0.45);
- vertices[0] = video::S3DVertex(-1, 0.08, -1, 0, 0, 1, c, t, t);
- vertices[1] = video::S3DVertex( 1, 0.08, -1, 0, 0, 1, c, o, t);
- vertices[2] = video::S3DVertex( 1, 0.12, -1, 0, 0, 1, c, o, o);
- vertices[3] = video::S3DVertex(-1, 0.12, -1, 0, 0, 1, c, t, o);
- for (video::S3DVertex &vertex : vertices) {
- if (j == 0)
- // Don't switch
- {}
- else if (j == 1)
- // Switch from -Z (south) to +X (east)
- vertex.Pos.rotateXZBy(90);
- else if (j == 2)
- // Switch from -Z (south) to -X (west)
- vertex.Pos.rotateXZBy(-90);
- else
- // Switch from -Z (south) to +Z (north)
- vertex.Pos.rotateXZBy(-180);
- }
- driver->drawIndexedTriangleFan(&vertices[0], 4, indices, 2);
- }
-
- // Draw far cloudy fog thing at and below all horizons
- for (u32 j = 0; j < 4; j++) {
- video::SColor c = cloudyfogcolor;
- vertices[0] = video::S3DVertex(-1, -1.0, -1, 0, 0, 1, c, t, t);
- vertices[1] = video::S3DVertex( 1, -1.0, -1, 0, 0, 1, c, o, t);
- vertices[2] = video::S3DVertex( 1, 0.08, -1, 0, 0, 1, c, o, o);
- vertices[3] = video::S3DVertex(-1, 0.08, -1, 0, 0, 1, c, t, o);
+ vertices[0] = video::S3DVertex(-1, -0.02, -1, 0, 0, 1, m_bgcolor, t, t);
+ vertices[1] = video::S3DVertex( 1, -0.02, -1, 0, 0, 1, m_bgcolor, o, t);
+ vertices[2] = video::S3DVertex( 1, 0.45, -1, 0, 0, 1, m_skycolor, o, o);
+ vertices[3] = video::S3DVertex(-1, 0.45, -1, 0, 0, 1, m_skycolor, t, o);
for (video::S3DVertex &vertex : vertices) {
if (j == 0)
// Don't switch
@@ -529,7 +504,7 @@ void Sky::update(float time_of_day, float time_brightness,
pointcolor_sun_f.g = pointcolor_light *
(float)m_materials[3].EmissiveColor.getGreen() / 255;
} else if (!m_default_tint) {
- pointcolor_sun_f = m_sky_params.sun_tint;
+ pointcolor_sun_f = m_sky_params.fog_sun_tint;
} else {
pointcolor_sun_f.r = pointcolor_light * 1;
pointcolor_sun_f.b = pointcolor_light *
@@ -548,9 +523,9 @@ void Sky::update(float time_of_day, float time_brightness,
);
} else {
pointcolor_moon_f = video::SColorf(
- (m_sky_params.moon_tint.getRed() / 255) * pointcolor_light,
- (m_sky_params.moon_tint.getGreen() / 255) * pointcolor_light,
- (m_sky_params.moon_tint.getBlue() / 255) * pointcolor_light,
+ (m_sky_params.fog_moon_tint.getRed() / 255) * pointcolor_light,
+ (m_sky_params.fog_moon_tint.getGreen() / 255) * pointcolor_light,
+ (m_sky_params.fog_moon_tint.getBlue() / 255) * pointcolor_light,
1
);
}
@@ -932,17 +907,17 @@ void Sky::setStarCount(u16 star_count, bool force_update)
}
}
-void Sky::setSkyColors(const SkyboxParams sky)
+void Sky::setSkyColors(const SkyColor &sky_color)
{
- m_sky_params.sky_color = sky.sky_color;
+ m_sky_params.sky_color = sky_color;
}
void Sky::setHorizonTint(video::SColor sun_tint, video::SColor moon_tint,
std::string use_sun_tint)
{
// Change sun and moon tinting:
- m_sky_params.sun_tint = sun_tint;
- m_sky_params.moon_tint = moon_tint;
+ m_sky_params.fog_sun_tint = sun_tint;
+ m_sky_params.fog_moon_tint = moon_tint;
// Faster than comparing strings every rendering frame
if (use_sun_tint == "default")
m_default_tint = true;
diff --git a/src/client/sky.h b/src/client/sky.h
index 8637f96d4..3227e8f59 100644
--- a/src/client/sky.h
+++ b/src/client/sky.h
@@ -94,7 +94,7 @@ public:
m_bgcolor = bgcolor;
m_skycolor = skycolor;
}
- void setSkyColors(const SkyboxParams sky);
+ void setSkyColors(const SkyColor &sky_color);
void setHorizonTint(video::SColor sun_tint, video::SColor moon_tint,
std::string use_sun_tint);
void setInClouds(bool clouds) { m_in_clouds = clouds; }
diff --git a/src/client/sound_openal.cpp b/src/client/sound_openal.cpp
index 8e696f302..20a651c1d 100644
--- a/src/client/sound_openal.cpp
+++ b/src/client/sound_openal.cpp
@@ -165,8 +165,8 @@ SoundBuffer *load_opened_ogg_file(OggVorbis_File *oggFile,
<< "preparing sound buffer" << std::endl;
}
- infostream << "Audio file "
- << filename_for_logging << " loaded" << std::endl;
+ //infostream << "Audio file "
+ // << filename_for_logging << " loaded" << std::endl;
// Clean up!
ov_clear(oggFile);
@@ -275,25 +275,38 @@ public:
m_device(nullptr, delete_alcdevice),
m_context(nullptr, delete_alccontext)
{
- if (!(m_device = unique_ptr_alcdevice(alcOpenDevice(nullptr), delete_alcdevice)))
- throw std::runtime_error("Audio: Global Initialization: Device Open");
+ }
+
+ bool init()
+ {
+ if (!(m_device = unique_ptr_alcdevice(alcOpenDevice(nullptr), delete_alcdevice))) {
+ errorstream << "Audio: Global Initialization: Failed to open device" << std::endl;
+ return false;
+ }
if (!(m_context = unique_ptr_alccontext(
alcCreateContext(m_device.get(), nullptr), delete_alccontext))) {
- throw std::runtime_error("Audio: Global Initialization: Context Create");
+ errorstream << "Audio: Global Initialization: Failed to create context" << std::endl;
+ return false;
}
- if (!alcMakeContextCurrent(m_context.get()))
- throw std::runtime_error("Audio: Global Initialization: Context Current");
+ if (!alcMakeContextCurrent(m_context.get())) {
+ errorstream << "Audio: Global Initialization: Failed to make current context" << std::endl;
+ return false;
+ }
alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED);
- if (alGetError() != AL_NO_ERROR)
- throw std::runtime_error("Audio: Global Initialization: OpenAL Error");
+ if (alGetError() != AL_NO_ERROR) {
+ errorstream << "Audio: Global Initialization: OpenAL Error " << alGetError() << std::endl;
+ return false;
+ }
infostream << "Audio: Global Initialized: OpenAL " << alGetString(AL_VERSION)
<< ", using " << alcGetString(m_device.get(), ALC_DEVICE_SPECIFIER)
<< std::endl;
+
+ return true;
}
~SoundManagerSingleton()
@@ -498,9 +511,11 @@ public:
// Remove stopped sounds
void maintain()
{
- verbosestream<<"OpenALSoundManager::maintain(): "
- <<m_sounds_playing.size()<<" playing sounds, "
- <<m_buffers.size()<<" sound names loaded"<<std::endl;
+ if (!m_sounds_playing.empty()) {
+ verbosestream << "OpenALSoundManager::maintain(): "
+ << m_sounds_playing.size() <<" playing sounds, "
+ << m_buffers.size() <<" sound names loaded"<<std::endl;
+ }
std::unordered_set<int> del_list;
for (const auto &sp : m_sounds_playing) {
int id = sp.first;
@@ -530,7 +545,7 @@ public:
SoundBuffer *buf = load_ogg_from_file(filepath);
if (buf)
addBuffer(name, buf);
- return false;
+ return !!buf;
}
bool loadSoundData(const std::string &name,
@@ -539,7 +554,7 @@ public:
SoundBuffer *buf = load_ogg_from_buffer(filedata, name);
if (buf)
addBuffer(name, buf);
- return false;
+ return !!buf;
}
void updateListener(const v3f &pos, const v3f &vel, const v3f &at, const v3f &up)
@@ -680,7 +695,11 @@ public:
std::shared_ptr<SoundManagerSingleton> createSoundManagerSingleton()
{
- return std::shared_ptr<SoundManagerSingleton>(new SoundManagerSingleton());
+ auto smg = std::make_shared<SoundManagerSingleton>();
+ if (!smg->init()) {
+ smg.reset();
+ }
+ return smg;
}
ISoundManager *createOpenALSoundManager(SoundManagerSingleton *smg, OnDemandSoundFetcher *fetcher)
diff --git a/src/client/tile.cpp b/src/client/tile.cpp
index 3189ab28c..d03588b2b 100644
--- a/src/client/tile.cpp
+++ b/src/client/tile.cpp
@@ -471,8 +471,8 @@ TextureSource::~TextureSource()
driver->removeTexture(t);
}
- infostream << "~TextureSource() "<< textures_before << "/"
- << driver->getTextureCount() << std::endl;
+ infostream << "~TextureSource() before cleanup: "<< textures_before
+ << " after: " << driver->getTextureCount() << std::endl;
}
u32 TextureSource::getTextureId(const std::string &name)
@@ -668,7 +668,14 @@ video::ITexture* TextureSource::getTexture(const std::string &name, u32 *id)
video::ITexture* TextureSource::getTextureForMesh(const std::string &name, u32 *id)
{
- return getTexture(name + "^[applyfiltersformesh", id);
+ static thread_local bool filter_needed =
+ g_settings->getBool("texture_clean_transparent") ||
+ ((m_setting_trilinear_filter || m_setting_bilinear_filter) &&
+ g_settings->getS32("texture_min_size") > 1);
+ // Avoid duplicating texture if it won't actually change
+ if (filter_needed)
+ return getTexture(name + "^[applyfiltersformesh", id);
+ return getTexture(name, id);
}
Palette* TextureSource::getPalette(const std::string &name)
@@ -763,6 +770,9 @@ void TextureSource::rebuildImagesAndTextures()
video::IVideoDriver *driver = RenderingEngine::get_video_driver();
sanity_check(driver);
+ infostream << "TextureSource: recreating " << m_textureinfo_cache.size()
+ << " textures" << std::endl;
+
// Recreate textures
for (TextureInfo &ti : m_textureinfo_cache) {
video::IImage *img = generateImage(ti.name);
@@ -1270,8 +1280,6 @@ bool TextureSource::generateImagePart(std::string part_of_name,
video::IImage *img = generateImage(filename);
if (img) {
core::dimension2d<u32> dim = img->getDimension();
- infostream<<"Size "<<dim.Width
- <<"x"<<dim.Height<<std::endl;
core::position2d<s32> pos_base(x, y);
video::IImage *img2 =
driver->createImage(video::ECF_A8R8G8B8, dim);
@@ -1622,6 +1630,9 @@ bool TextureSource::generateImagePart(std::string part_of_name,
*/
else if (str_starts_with(part_of_name, "[applyfiltersformesh"))
{
+ /* IMPORTANT: When changing this, getTextureForMesh() needs to be
+ * updated too. */
+
// Apply the "clean transparent" filter, if configured.
if (g_settings->getBool("texture_clean_transparent"))
imageCleanTransparent(baseimg, 127);
diff --git a/src/client/tile.h b/src/client/tile.h
index 533df676e..49c46f749 100644
--- a/src/client/tile.h
+++ b/src/client/tile.h
@@ -25,7 +25,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
#include <vector>
#include <SMaterial.h>
-#include <memory>
#include "util/numeric.h"
#include "config.h"
@@ -150,6 +149,8 @@ enum MaterialType{
TILE_MATERIAL_WAVING_LIQUID_BASIC,
TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT,
TILE_MATERIAL_WAVING_LIQUID_OPAQUE,
+ TILE_MATERIAL_PLAIN,
+ TILE_MATERIAL_PLAIN_ALPHA
};
// Material flags
@@ -270,7 +271,7 @@ struct TileLayer
u32 texture_id = 0;
u16 animation_frame_length_ms = 0;
- u8 animation_frame_count = 1;
+ u16 animation_frame_count = 1;
u8 material_type = TILE_MATERIAL_BASIC;
u8 material_flags =
@@ -282,7 +283,7 @@ struct TileLayer
//! If true, the tile has its own color.
bool has_color = false;
- std::shared_ptr<std::vector<FrameSpec>> frames = nullptr;
+ std::vector<FrameSpec> *frames = nullptr;
/*!
* The color of the tile, or if the tile does not own
diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp
index 2c6807fab..8cd3e29a9 100644
--- a/src/client/wieldmesh.cpp
+++ b/src/client/wieldmesh.cpp
@@ -347,7 +347,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
scene::SMesh *mesh = nullptr;
if (m_enable_shaders) {
- u32 shader_id = shdrsrc->getShader("wielded_shader", TILE_MATERIAL_BASIC, NDT_NORMAL);
+ u32 shader_id = shdrsrc->getShader("object_shader", TILE_MATERIAL_BASIC, NDT_NORMAL);
m_material_type = shdrsrc->getShaderInfo(shader_id).material;
}
@@ -467,10 +467,29 @@ void WieldMeshSceneNode::setColor(video::SColor c)
bc.getGreen() * green / 255,
bc.getBlue() * blue / 255);
scene::IMeshBuffer *buf = mesh->getMeshBuffer(j);
- colorizeMeshBuffer(buf, &buffercolor);
+
+ if (m_enable_shaders)
+ setMeshBufferColor(buf, buffercolor);
+ else
+ colorizeMeshBuffer(buf, &buffercolor);
}
}
+void WieldMeshSceneNode::setNodeLightColor(video::SColor color)
+{
+ if (!m_meshnode)
+ return;
+
+ if (m_enable_shaders) {
+ for (u32 i = 0; i < m_meshnode->getMaterialCount(); ++i) {
+ video::SMaterial &material = m_meshnode->getMaterial(i);
+ material.EmissiveColor = color;
+ }
+ }
+
+ setColor(color);
+}
+
void WieldMeshSceneNode::render()
{
// note: if this method is changed to actually do something,
diff --git a/src/client/wieldmesh.h b/src/client/wieldmesh.h
index 7c80a811b..933097230 100644
--- a/src/client/wieldmesh.h
+++ b/src/client/wieldmesh.h
@@ -87,6 +87,8 @@ public:
// Must only be used if the constructor was called with lighting = false
void setColor(video::SColor color);
+ void setNodeLightColor(video::SColor color);
+
scene::IMesh *getMesh() { return m_meshnode->getMesh(); }
virtual void render();
diff --git a/src/clientiface.cpp b/src/clientiface.cpp
index dceaa64f2..602a44c90 100644
--- a/src/clientiface.cpp
+++ b/src/clientiface.cpp
@@ -27,7 +27,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "serverenvironment.h"
#include "map.h"
#include "emerge.h"
-#include "content_sao.h" // TODO this is used for cleanup of only
+#include "server/luaentity_sao.h"
+#include "server/player_sao.h"
#include "log.h"
#include "util/srp.h"
#include "face_position_cache.h"
@@ -343,10 +344,10 @@ void RemoteClient::GetNextBlocks (
}
/*
- If block has been marked to not exist on disk (dummy)
- and generating new ones is not wanted, skip block.
+ If block has been marked to not exist on disk (dummy) or is
+ not generated and generating new ones is not wanted, skip block.
*/
- if (!generate && surely_not_found_on_disk) {
+ if (!generate && (surely_not_found_on_disk || block_is_invalid)) {
// get next one.
continue;
}
diff --git a/src/clientiface.h b/src/clientiface.h
index bf95df4a8..83fa6fe99 100644
--- a/src/clientiface.h
+++ b/src/clientiface.h
@@ -339,12 +339,18 @@ public:
u8 getMinor() const { return m_version_minor; }
u8 getPatch() const { return m_version_patch; }
const std::string &getFull() const { return m_full_version; }
+
+ void setLangCode(const std::string &code) { m_lang_code = code; }
+ const std::string &getLangCode() const { return m_lang_code; }
private:
// Version is stored in here after INIT before INIT2
u8 m_pending_serialization_version = SER_FMT_VER_INVALID;
/* current state of client */
ClientState m_state = CS_Created;
+
+ // Client sent language code
+ std::string m_lang_code;
/*
Blocks that have been sent to client.
diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in
index cb54cb488..cfcee4b58 100644
--- a/src/cmake_config.h.in
+++ b/src/cmake_config.h.in
@@ -23,6 +23,7 @@
#cmakedefine01 USE_LEVELDB
#cmakedefine01 USE_LUAJIT
#cmakedefine01 USE_POSTGRESQL
+#cmakedefine01 USE_PROMETHEUS
#cmakedefine01 USE_SPATIAL
#cmakedefine01 USE_SYSTEM_GMP
#cmakedefine01 USE_REDIS
@@ -34,3 +35,4 @@
#cmakedefine01 CURSES_HAVE_NCURSES_CURSES_H
#cmakedefine01 CURSES_HAVE_NCURSESW_NCURSES_H
#cmakedefine01 CURSES_HAVE_NCURSESW_CURSES_H
+#cmakedefine01 BUILD_UNITTESTS
diff --git a/src/collision.cpp b/src/collision.cpp
index a4c5454ae..d85a56884 100644
--- a/src/collision.cpp
+++ b/src/collision.cpp
@@ -25,35 +25,63 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "gamedef.h"
#ifndef SERVER
#include "client/clientenvironment.h"
+#include "client/localplayer.h"
#endif
#include "serverenvironment.h"
-#include "serverobject.h"
+#include "server/serveractiveobject.h"
#include "util/timetaker.h"
#include "profiler.h"
-// float error is 10 - 9.96875 = 0.03125
-//#define COLL_ZERO 0.032 // broken unit tests
-#define COLL_ZERO 0
-
+#ifdef __FAST_MATH__
+#warning "-ffast-math is known to cause bugs in collision code, do not use!"
+#endif
struct NearbyCollisionInfo {
- NearbyCollisionInfo(bool is_ul, bool is_obj, int bouncy,
- const v3s16 &pos, const aabb3f &box) :
+ // node
+ NearbyCollisionInfo(bool is_ul, int bouncy, const v3s16 &pos,
+ const aabb3f &box) :
is_unloaded(is_ul),
- is_object(is_obj),
+ obj(nullptr),
bouncy(bouncy),
position(pos),
box(box)
{}
+ // object
+ NearbyCollisionInfo(ActiveObject *obj, int bouncy,
+ const aabb3f &box) :
+ is_unloaded(false),
+ obj(obj),
+ bouncy(bouncy),
+ box(box)
+ {}
+
+ inline bool isObject() const { return obj != nullptr; }
+
bool is_unloaded;
bool is_step_up = false;
- bool is_object;
+ ActiveObject *obj;
int bouncy;
v3s16 position;
aabb3f box;
};
+// Helper functions:
+// Truncate floating point numbers to specified number of decimal places
+// in order to move all the floating point error to one side of the correct value
+static inline f32 truncate(const f32 val, const f32 factor)
+{
+ return truncf(val * factor) / factor;
+}
+
+static inline v3f truncate(const v3f& vec, const f32 factor)
+{
+ return v3f(
+ truncate(vec.X, factor),
+ truncate(vec.Y, factor),
+ truncate(vec.Z, factor)
+ );
+}
// Helper function:
// Checks for collision of a moving aabbox with a static aabbox
@@ -61,118 +89,101 @@ struct NearbyCollisionInfo {
// The time after which the collision occurs is stored in dtime.
CollisionAxis axisAlignedCollision(
const aabb3f &staticbox, const aabb3f &movingbox,
- const v3f &speed, f32 d, f32 *dtime)
+ const v3f &speed, f32 *dtime)
{
//TimeTaker tt("axisAlignedCollision");
- f32 xsize = (staticbox.MaxEdge.X - staticbox.MinEdge.X) - COLL_ZERO; // reduce box size for solve collision stuck (flying sand)
- f32 ysize = (staticbox.MaxEdge.Y - staticbox.MinEdge.Y); // - COLL_ZERO; // Y - no sense for falling, but maybe try later
- f32 zsize = (staticbox.MaxEdge.Z - staticbox.MinEdge.Z) - COLL_ZERO;
-
aabb3f relbox(
- movingbox.MinEdge.X - staticbox.MinEdge.X,
- movingbox.MinEdge.Y - staticbox.MinEdge.Y,
- movingbox.MinEdge.Z - staticbox.MinEdge.Z,
- movingbox.MaxEdge.X - staticbox.MinEdge.X,
- movingbox.MaxEdge.Y - staticbox.MinEdge.Y,
- movingbox.MaxEdge.Z - staticbox.MinEdge.Z
+ (movingbox.MaxEdge.X - movingbox.MinEdge.X) + (staticbox.MaxEdge.X - staticbox.MinEdge.X), // sum of the widths
+ (movingbox.MaxEdge.Y - movingbox.MinEdge.Y) + (staticbox.MaxEdge.Y - staticbox.MinEdge.Y),
+ (movingbox.MaxEdge.Z - movingbox.MinEdge.Z) + (staticbox.MaxEdge.Z - staticbox.MinEdge.Z),
+ std::max(movingbox.MaxEdge.X, staticbox.MaxEdge.X) - std::min(movingbox.MinEdge.X, staticbox.MinEdge.X), //outer bounding 'box' dimensions
+ std::max(movingbox.MaxEdge.Y, staticbox.MaxEdge.Y) - std::min(movingbox.MinEdge.Y, staticbox.MinEdge.Y),
+ std::max(movingbox.MaxEdge.Z, staticbox.MaxEdge.Z) - std::min(movingbox.MinEdge.Z, staticbox.MinEdge.Z)
);
- if(speed.X > 0) // Check for collision with X- plane
- {
- if (relbox.MaxEdge.X <= d) {
- *dtime = -relbox.MaxEdge.X / speed.X;
- if ((relbox.MinEdge.Y + speed.Y * (*dtime) < ysize) &&
- (relbox.MaxEdge.Y + speed.Y * (*dtime) > COLL_ZERO) &&
- (relbox.MinEdge.Z + speed.Z * (*dtime) < zsize) &&
- (relbox.MaxEdge.Z + speed.Z * (*dtime) > COLL_ZERO))
- return COLLISION_AXIS_X;
- }
- else if(relbox.MinEdge.X > xsize)
- {
- return COLLISION_AXIS_NONE;
- }
- }
- else if(speed.X < 0) // Check for collision with X+ plane
- {
- if (relbox.MinEdge.X >= xsize - d) {
- *dtime = (xsize - relbox.MinEdge.X) / speed.X;
- if ((relbox.MinEdge.Y + speed.Y * (*dtime) < ysize) &&
- (relbox.MaxEdge.Y + speed.Y * (*dtime) > COLL_ZERO) &&
- (relbox.MinEdge.Z + speed.Z * (*dtime) < zsize) &&
- (relbox.MaxEdge.Z + speed.Z * (*dtime) > COLL_ZERO))
- return COLLISION_AXIS_X;
+ const f32 dtime_max = *dtime;
+ f32 inner_margin; // the distance of clipping recovery
+ f32 distance;
+ f32 time;
+
+
+ if (speed.Y) {
+ distance = relbox.MaxEdge.Y - relbox.MinEdge.Y;
+ *dtime = distance / std::abs(speed.Y);
+ time = std::max(*dtime, 0.0f);
+
+ if (*dtime <= dtime_max) {
+ inner_margin = std::max(-0.5f * (staticbox.MaxEdge.Y - staticbox.MinEdge.Y), -2.0f);
+
+ if ((speed.Y > 0 && staticbox.MinEdge.Y - movingbox.MaxEdge.Y > inner_margin) ||
+ (speed.Y < 0 && movingbox.MinEdge.Y - staticbox.MaxEdge.Y > inner_margin)) {
+ if (
+ (std::max(movingbox.MaxEdge.X + speed.X * time, staticbox.MaxEdge.X)
+ - std::min(movingbox.MinEdge.X + speed.X * time, staticbox.MinEdge.X)
+ - relbox.MinEdge.X < 0) &&
+ (std::max(movingbox.MaxEdge.Z + speed.Z * time, staticbox.MaxEdge.Z)
+ - std::min(movingbox.MinEdge.Z + speed.Z * time, staticbox.MinEdge.Z)
+ - relbox.MinEdge.Z < 0)
+ )
+ return COLLISION_AXIS_Y;
+ }
}
- else if(relbox.MaxEdge.X < 0)
- {
+ else {
return COLLISION_AXIS_NONE;
}
}
// NO else if here
- if(speed.Y > 0) // Check for collision with Y- plane
- {
- if (relbox.MaxEdge.Y <= d) {
- *dtime = -relbox.MaxEdge.Y / speed.Y;
- if ((relbox.MinEdge.X + speed.X * (*dtime) < xsize) &&
- (relbox.MaxEdge.X + speed.X * (*dtime) > COLL_ZERO) &&
- (relbox.MinEdge.Z + speed.Z * (*dtime) < zsize) &&
- (relbox.MaxEdge.Z + speed.Z * (*dtime) > COLL_ZERO))
- return COLLISION_AXIS_Y;
- }
- else if(relbox.MinEdge.Y > ysize)
- {
- return COLLISION_AXIS_NONE;
- }
- }
- else if(speed.Y < 0) // Check for collision with Y+ plane
- {
- if (relbox.MinEdge.Y >= ysize - d) {
- *dtime = (ysize - relbox.MinEdge.Y) / speed.Y;
- if ((relbox.MinEdge.X + speed.X * (*dtime) < xsize) &&
- (relbox.MaxEdge.X + speed.X * (*dtime) > COLL_ZERO) &&
- (relbox.MinEdge.Z + speed.Z * (*dtime) < zsize) &&
- (relbox.MaxEdge.Z + speed.Z * (*dtime) > COLL_ZERO))
- return COLLISION_AXIS_Y;
- }
- else if(relbox.MaxEdge.Y < 0)
- {
+ if (speed.X) {
+ distance = relbox.MaxEdge.X - relbox.MinEdge.X;
+ *dtime = distance / std::abs(speed.X);
+ time = std::max(*dtime, 0.0f);
+
+ if (*dtime <= dtime_max) {
+ inner_margin = std::max(-0.5f * (staticbox.MaxEdge.X - staticbox.MinEdge.X), -2.0f);
+
+ if ((speed.X > 0 && staticbox.MinEdge.X - movingbox.MaxEdge.X > inner_margin) ||
+ (speed.X < 0 && movingbox.MinEdge.X - staticbox.MaxEdge.X > inner_margin)) {
+ if (
+ (std::max(movingbox.MaxEdge.Y + speed.Y * time, staticbox.MaxEdge.Y)
+ - std::min(movingbox.MinEdge.Y + speed.Y * time, staticbox.MinEdge.Y)
+ - relbox.MinEdge.Y < 0) &&
+ (std::max(movingbox.MaxEdge.Z + speed.Z * time, staticbox.MaxEdge.Z)
+ - std::min(movingbox.MinEdge.Z + speed.Z * time, staticbox.MinEdge.Z)
+ - relbox.MinEdge.Z < 0)
+ )
+ return COLLISION_AXIS_X;
+ }
+ } else {
return COLLISION_AXIS_NONE;
}
}
// NO else if here
- if(speed.Z > 0) // Check for collision with Z- plane
- {
- if (relbox.MaxEdge.Z <= d) {
- *dtime = -relbox.MaxEdge.Z / speed.Z;
- if ((relbox.MinEdge.X + speed.X * (*dtime) < xsize) &&
- (relbox.MaxEdge.X + speed.X * (*dtime) > COLL_ZERO) &&
- (relbox.MinEdge.Y + speed.Y * (*dtime) < ysize) &&
- (relbox.MaxEdge.Y + speed.Y * (*dtime) > COLL_ZERO))
- return COLLISION_AXIS_Z;
- }
- //else if(relbox.MinEdge.Z > zsize)
- //{
- // return COLLISION_AXIS_NONE;
- //}
- }
- else if(speed.Z < 0) // Check for collision with Z+ plane
- {
- if (relbox.MinEdge.Z >= zsize - d) {
- *dtime = (zsize - relbox.MinEdge.Z) / speed.Z;
- if ((relbox.MinEdge.X + speed.X * (*dtime) < xsize) &&
- (relbox.MaxEdge.X + speed.X * (*dtime) > COLL_ZERO) &&
- (relbox.MinEdge.Y + speed.Y * (*dtime) < ysize) &&
- (relbox.MaxEdge.Y + speed.Y * (*dtime) > COLL_ZERO))
- return COLLISION_AXIS_Z;
+ if (speed.Z) {
+ distance = relbox.MaxEdge.Z - relbox.MinEdge.Z;
+ *dtime = distance / std::abs(speed.Z);
+ time = std::max(*dtime, 0.0f);
+
+ if (*dtime <= dtime_max) {
+ inner_margin = std::max(-0.5f * (staticbox.MaxEdge.Z - staticbox.MinEdge.Z), -2.0f);
+
+ if ((speed.Z > 0 && staticbox.MinEdge.Z - movingbox.MaxEdge.Z > inner_margin) ||
+ (speed.Z < 0 && movingbox.MinEdge.Z - staticbox.MaxEdge.Z > inner_margin)) {
+ if (
+ (std::max(movingbox.MaxEdge.X + speed.X * time, staticbox.MaxEdge.X)
+ - std::min(movingbox.MinEdge.X + speed.X * time, staticbox.MinEdge.X)
+ - relbox.MinEdge.X < 0) &&
+ (std::max(movingbox.MaxEdge.Y + speed.Y * time, staticbox.MaxEdge.Y)
+ - std::min(movingbox.MinEdge.Y + speed.Y * time, staticbox.MinEdge.Y)
+ - relbox.MinEdge.Y < 0)
+ )
+ return COLLISION_AXIS_Z;
+ }
}
- //else if(relbox.MaxEdge.Z < 0)
- //{
- // return COLLISION_AXIS_NONE;
- //}
}
return COLLISION_AXIS_NONE;
@@ -249,6 +260,8 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
speed_f->X = rangelim(speed_f->X, -5000, 5000);
speed_f->Z = rangelim(speed_f->Z, -5000, 5000);
+ *speed_f = truncate(*speed_f, 10000.0f);
+
/*
Collect node boxes in movement range
*/
@@ -328,13 +341,13 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
for (auto box : nodeboxes) {
box.MinEdge += posf;
box.MaxEdge += posf;
- cinfo.emplace_back(false, false, n_bouncy_value, p, box);
+ cinfo.emplace_back(false, n_bouncy_value, p, box);
}
} else {
// Collide with unloaded nodes (position invalid) and loaded
// CONTENT_IGNORE nodes (position valid)
aabb3f box = getNodeBox(p, BS);
- cinfo.emplace_back(true, false, 0, p, box);
+ cinfo.emplace_back(true, 0, p, box);
}
}
@@ -379,17 +392,20 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
// Calculate distance by speed, add own extent and 1.5m of tolerance
f32 distance = speed_f->getLength() * dtime +
box_0.getExtent().getLength() + 1.5f * BS;
- std::vector<u16> s_objects;
- s_env->getObjectsInsideRadius(s_objects, *pos_f, distance);
-
- for (u16 obj_id : s_objects) {
- ServerActiveObject *current = s_env->getActiveObject(obj_id);
- if (!self || (self != current &&
- self != current->getParent())) {
- objects.push_back((ActiveObject*)current);
+ // search for objects which are not us, or we are not its parent
+ // we directly use the callback to populate the result to prevent
+ // a useless result loop here
+ auto include_obj_cb = [self, &objects] (ServerActiveObject *obj) {
+ if (!obj->isGone() &&
+ (!self || (self != obj && self != obj->getParent()))) {
+ objects.push_back((ActiveObject *)obj);
}
- }
+ return false;
+ };
+
+ std::vector<ServerActiveObject *> s_objects;
+ s_env->getObjectsInsideRadius(s_objects, *pos_f, distance, include_obj_cb);
}
}
@@ -397,30 +413,32 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
iter != objects.end(); ++iter) {
ActiveObject *object = *iter;
- if (object) {
+ if (object && object->collideWithObjects()) {
aabb3f object_collisionbox;
- if (object->getCollisionBox(&object_collisionbox) &&
- object->collideWithObjects()) {
- cinfo.emplace_back(false, true, 0, v3s16(), object_collisionbox);
- }
+ if (object->getCollisionBox(&object_collisionbox))
+ cinfo.emplace_back(object, 0, object_collisionbox);
}
}
+#ifndef SERVER
+ if (self && c_env) {
+ LocalPlayer *lplayer = c_env->getLocalPlayer();
+ if (lplayer->getParent() == nullptr) {
+ aabb3f lplayer_collisionbox = lplayer->getCollisionbox();
+ v3f lplayer_pos = lplayer->getPosition();
+ lplayer_collisionbox.MinEdge += lplayer_pos;
+ lplayer_collisionbox.MaxEdge += lplayer_pos;
+ ActiveObject *obj = (ActiveObject*) lplayer->getCAO();
+ cinfo.emplace_back(obj, 0, lplayer_collisionbox);
+ }
+ }
+#endif
} //tt3
/*
Collision detection
*/
- /*
- Collision uncertainty radius
- Make it a bit larger than the maximum distance of movement
- */
- //f32 d = pos_max_d * 1.1f;
-
-
- f32 d = 0.3f; // Temporary fix, any nonzero d causes collision glitches, the more the greater it is.
- // ultimately it has to be determined if any uncertainty is involved, and if it is, eliminated
- // and d & pos_max_d params removed from function calls.
+ f32 d = 0.0f;
int loopcount = 0;
@@ -450,9 +468,9 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
continue;
// Find nearest collision of the two boxes (raytracing-like)
- f32 dtime_tmp;
+ f32 dtime_tmp = nearest_dtime;
CollisionAxis collided = axisAlignedCollision(box_info.box,
- movingbox, *speed_f, d, &dtime_tmp);
+ movingbox, *speed_f, &dtime_tmp);
if (collided == -1 || dtime_tmp >= nearest_dtime)
continue;
@@ -464,17 +482,24 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
if (nearest_collided == COLLISION_AXIS_NONE) {
// No collision with any collision box.
- *pos_f += *speed_f * dtime;
+ *pos_f += truncate(*speed_f * dtime, 100.0f);
dtime = 0; // Set to 0 to avoid "infinite" loop due to small FP numbers
} else {
// Otherwise, a collision occurred.
NearbyCollisionInfo &nearest_info = cinfo[nearest_boxindex];
const aabb3f& cbox = nearest_info.box;
+
+ //movingbox except moved to the horizontal position it would be after step up
+ aabb3f stepbox = movingbox;
+ stepbox.MinEdge.X += speed_f->X * dtime;
+ stepbox.MinEdge.Z += speed_f->Z * dtime;
+ stepbox.MaxEdge.X += speed_f->X * dtime;
+ stepbox.MaxEdge.Z += speed_f->Z * dtime;
// Check for stairs.
bool step_up = (nearest_collided != COLLISION_AXIS_Y) && // must not be Y direction
(movingbox.MinEdge.Y < cbox.MaxEdge.Y) &&
(movingbox.MinEdge.Y + stepheight > cbox.MaxEdge.Y) &&
- (!wouldCollideWithCeiling(cinfo, movingbox,
+ (!wouldCollideWithCeiling(cinfo, stepbox,
cbox.MaxEdge.Y - movingbox.MinEdge.Y,
d));
@@ -483,7 +508,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
// Move to the point of collision and reduce dtime by nearest_dtime
if (nearest_dtime < 0) {
- // Handle negative nearest_dtime (can be caused by the d allowance)
+ // Handle negative nearest_dtime
if (!step_up) {
if (nearest_collided == COLLISION_AXIS_X)
pos_f->X += speed_f->X * nearest_dtime;
@@ -493,7 +518,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
pos_f->Z += speed_f->Z * nearest_dtime;
}
} else {
- *pos_f += *speed_f * nearest_dtime;
+ *pos_f += truncate(*speed_f * nearest_dtime, 100.0f);
dtime -= nearest_dtime;
}
@@ -502,12 +527,13 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
is_collision = false;
CollisionInfo info;
- if (nearest_info.is_object)
+ if (nearest_info.isObject())
info.type = COLLISION_OBJECT;
else
info.type = COLLISION_NODE;
info.node_p = nearest_info.position;
+ info.object = nearest_info.obj;
info.old_speed = *speed_f;
info.plane = nearest_collided;
@@ -562,9 +588,8 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
Object touches ground if object's minimum Y is near node's
maximum Y and object's X-Z-area overlaps with the node's
X-Z-area.
-
- Use 0.15*BS so that it is easier to get on a node.
*/
+
if (cbox.MaxEdge.X - d > box.MinEdge.X && cbox.MinEdge.X + d < box.MaxEdge.X &&
cbox.MaxEdge.Z - d > box.MinEdge.Z &&
cbox.MinEdge.Z + d < box.MaxEdge.Z) {
@@ -574,10 +599,10 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
box.MinEdge += *pos_f;
box.MaxEdge += *pos_f;
}
- if (std::fabs(cbox.MaxEdge.Y - box.MinEdge.Y) < 0.15f * BS) {
+ if (std::fabs(cbox.MaxEdge.Y - box.MinEdge.Y) < 0.05f) {
result.touching_ground = true;
- if (box_info.is_object)
+ if (box_info.isObject())
result.standing_on_object = true;
}
}
diff --git a/src/collision.h b/src/collision.h
index 85df02c96..87a502828 100644
--- a/src/collision.h
+++ b/src/collision.h
@@ -48,6 +48,7 @@ struct CollisionInfo
CollisionType type = COLLISION_NODE;
CollisionAxis axis = COLLISION_AXIS_NONE;
v3s16 node_p = v3s16(-32768,-32768,-32768); // COLLISION_NODE
+ ActiveObject *object = nullptr; // COLLISION_OBJECT
v3f old_speed;
v3f new_speed;
int plane = -1;
@@ -77,7 +78,7 @@ collisionMoveResult collisionMoveSimple(Environment *env,IGameDef *gamedef,
// dtime receives time until first collision, invalid if -1 is returned
CollisionAxis axisAlignedCollision(
const aabb3f &staticbox, const aabb3f &movingbox,
- const v3f &speed, f32 d, f32 *dtime);
+ const v3f &speed, f32 *dtime);
// Helper function:
// Checks if moving the movingbox up by the given distance would hit a ceiling.
diff --git a/src/config.h b/src/config.h
index 039100914..5e1164642 100644
--- a/src/config.h
+++ b/src/config.h
@@ -11,12 +11,12 @@
#if defined USE_CMAKE_CONFIG_H
#include "cmake_config.h"
-#elif defined (__ANDROID__) || defined (ANDROID)
+#elif defined (__ANDROID__)
#define PROJECT_NAME "minetest"
#define PROJECT_NAME_C "Minetest"
#define STATIC_SHAREDIR ""
- #include "android_version.h"
- #ifdef NDEBUG
+ #define VERSION_STRING STR(VERSION_MAJOR) "." STR(VERSION_MINOR) "." STR(VERSION_PATCH) STR(VERSION_EXTRA)
+#ifdef NDEBUG
#define BUILD_TYPE "Release"
#else
#define BUILD_TYPE "Debug"
@@ -28,13 +28,3 @@
#define BUILD_TYPE "Debug"
#endif
#endif
-
-#define BUILD_INFO \
- "BUILD_TYPE=" BUILD_TYPE "\n" \
- "RUN_IN_PLACE=" STR(RUN_IN_PLACE) "\n" \
- "USE_GETTEXT=" STR(USE_GETTEXT) "\n" \
- "USE_SOUND=" STR(USE_SOUND) "\n" \
- "USE_CURL=" STR(USE_CURL) "\n" \
- "USE_FREETYPE=" STR(USE_FREETYPE) "\n" \
- "USE_LUAJIT=" STR(USE_LUAJIT) "\n" \
- "STATIC_SHAREDIR=" STR(STATIC_SHAREDIR);
diff --git a/src/constants.h b/src/constants.h
index 7636b38e0..c17f3b6af 100644
--- a/src/constants.h
+++ b/src/constants.h
@@ -93,7 +93,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define PLAYER_MAX_HP_DEFAULT 20
// Default maximal breath of a player
-#define PLAYER_MAX_BREATH_DEFAULT 11
+#define PLAYER_MAX_BREATH_DEFAULT 10
// Number of different files to try to save a player to if the first fails
// (because of a case-insensitive filesystem)
@@ -110,10 +110,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
GUI related things
*/
-// TODO: implement dpi-based scaling for windows and remove this hack
-#if defined(_WIN32)
-#define TTF_DEFAULT_FONT_SIZE (18)
-#else
#define TTF_DEFAULT_FONT_SIZE (16)
-#endif
#define DEFAULT_FONT_SIZE (10)
diff --git a/src/content/mods.cpp b/src/content/mods.cpp
index 676666f78..95ab0290a 100644
--- a/src/content/mods.cpp
+++ b/src/content/mods.cpp
@@ -167,7 +167,7 @@ std::map<std::string, ModSpec> getModsInPath(
return result;
}
-std::vector<ModSpec> flattenMods(std::map<std::string, ModSpec> mods)
+std::vector<ModSpec> flattenMods(const std::map<std::string, ModSpec> &mods)
{
std::vector<ModSpec> result;
for (const auto &it : mods) {
diff --git a/src/content/mods.h b/src/content/mods.h
index 6e2506dbf..b3500fbc8 100644
--- a/src/content/mods.h
+++ b/src/content/mods.h
@@ -68,7 +68,7 @@ std::map<std::string, ModSpec> getModsInPath(
const std::string &path, bool part_of_modpack = false);
// replaces modpack Modspecs with their content
-std::vector<ModSpec> flattenMods(std::map<std::string, ModSpec> mods);
+std::vector<ModSpec> flattenMods(const std::map<std::string, ModSpec> &mods);
// a ModConfiguration is a subset of installed mods, expected to have
// all dependencies fullfilled, so it can be used as a list of mods to
diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp
index bf947cf85..170f54e20 100644
--- a/src/content/subgames.cpp
+++ b/src/content/subgames.cpp
@@ -253,7 +253,7 @@ std::vector<WorldSpec> getAvailableWorlds()
worldspaths.insert(porting::path_user + DIR_DELIM + "worlds");
infostream << "Searching worlds..." << std::endl;
for (const std::string &worldspath : worldspaths) {
- infostream << " In " << worldspath << ": " << std::endl;
+ infostream << " In " << worldspath << ": ";
std::vector<fs::DirListNode> dirvector = fs::GetDirListing(worldspath);
for (const fs::DirListNode &dln : dirvector) {
if (!dln.dir)
diff --git a/src/content_sao.cpp b/src/content_sao.cpp
deleted file mode 100644
index 75c3eaf37..000000000
--- a/src/content_sao.cpp
+++ /dev/null
@@ -1,1535 +0,0 @@
-/*
-Minetest
-Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-#include "content_sao.h"
-#include "util/serialize.h"
-#include "collision.h"
-#include "environment.h"
-#include "tool.h" // For ToolCapabilities
-#include "gamedef.h"
-#include "nodedef.h"
-#include "remoteplayer.h"
-#include "server.h"
-#include "scripting_server.h"
-#include "genericobject.h"
-#include "settings.h"
-#include <algorithm>
-#include <cmath>
-
-std::map<u16, ServerActiveObject::Factory> ServerActiveObject::m_types;
-
-/*
- TestSAO
-*/
-
-class TestSAO : public ServerActiveObject
-{
-public:
- TestSAO(ServerEnvironment *env, v3f pos):
- ServerActiveObject(env, pos),
- m_timer1(0),
- m_age(0)
- {
- ServerActiveObject::registerType(getType(), create);
- }
- ActiveObjectType getType() const
- { return ACTIVEOBJECT_TYPE_TEST; }
-
- static ServerActiveObject* create(ServerEnvironment *env, v3f pos,
- const std::string &data)
- {
- return new TestSAO(env, pos);
- }
-
- void step(float dtime, bool send_recommended)
- {
- m_age += dtime;
- if(m_age > 10)
- {
- m_pending_removal = true;
- return;
- }
-
- m_base_position.Y += dtime * BS * 2;
- if(m_base_position.Y > 8*BS)
- m_base_position.Y = 2*BS;
-
- if (!send_recommended)
- return;
-
- m_timer1 -= dtime;
- if(m_timer1 < 0.0)
- {
- m_timer1 += 0.125;
-
- std::string data;
-
- data += itos(0); // 0 = position
- data += " ";
- data += itos(m_base_position.X);
- data += " ";
- data += itos(m_base_position.Y);
- data += " ";
- data += itos(m_base_position.Z);
-
- ActiveObjectMessage aom(getId(), false, data);
- m_messages_out.push(aom);
- }
- }
-
- bool getCollisionBox(aabb3f *toset) const { return false; }
-
- virtual bool getSelectionBox(aabb3f *toset) const { return false; }
-
- bool collideWithObjects() const { return false; }
-
-private:
- float m_timer1;
- float m_age;
-};
-
-// Prototype (registers item for deserialization)
-TestSAO proto_TestSAO(NULL, v3f(0,0,0));
-
-/*
- UnitSAO
- */
-
-UnitSAO::UnitSAO(ServerEnvironment *env, v3f pos):
- ServerActiveObject(env, pos)
-{
- // Initialize something to armor groups
- m_armor_groups["fleshy"] = 100;
-}
-
-ServerActiveObject *UnitSAO::getParent() const
-{
- if (!m_attachment_parent_id)
- return nullptr;
- // Check if the parent still exists
- ServerActiveObject *obj = m_env->getActiveObject(m_attachment_parent_id);
-
- return obj;
-}
-
-void UnitSAO::setArmorGroups(const ItemGroupList &armor_groups)
-{
- m_armor_groups = armor_groups;
- m_armor_groups_sent = false;
-}
-
-const ItemGroupList &UnitSAO::getArmorGroups() const
-{
- return m_armor_groups;
-}
-
-void UnitSAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop)
-{
- // store these so they can be updated to clients
- m_animation_range = frame_range;
- m_animation_speed = frame_speed;
- m_animation_blend = frame_blend;
- m_animation_loop = frame_loop;
- m_animation_sent = false;
-}
-
-void UnitSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop)
-{
- *frame_range = m_animation_range;
- *frame_speed = m_animation_speed;
- *frame_blend = m_animation_blend;
- *frame_loop = m_animation_loop;
-}
-
-void UnitSAO::setAnimationSpeed(float frame_speed)
-{
- m_animation_speed = frame_speed;
- m_animation_speed_sent = false;
-}
-
-void UnitSAO::setBonePosition(const std::string &bone, v3f position, v3f rotation)
-{
- // store these so they can be updated to clients
- m_bone_position[bone] = core::vector2d<v3f>(position, rotation);
- m_bone_position_sent = false;
-}
-
-void UnitSAO::getBonePosition(const std::string &bone, v3f *position, v3f *rotation)
-{
- *position = m_bone_position[bone].X;
- *rotation = m_bone_position[bone].Y;
-}
-
-void UnitSAO::setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation)
-{
- // Attachments need to be handled on both the server and client.
- // If we just attach on the server, we can only copy the position of the parent. Attachments
- // are still sent to clients at an interval so players might see them lagging, plus we can't
- // read and attach to skeletal bones.
- // If we just attach on the client, the server still sees the child at its original location.
- // This breaks some things so we also give the server the most accurate representation
- // even if players only see the client changes.
-
- int old_parent = m_attachment_parent_id;
- m_attachment_parent_id = parent_id;
- m_attachment_bone = bone;
- m_attachment_position = position;
- m_attachment_rotation = rotation;
- m_attachment_sent = false;
-
- if (parent_id != old_parent) {
- onDetach(old_parent);
- onAttach(parent_id);
- }
-}
-
-void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position,
- v3f *rotation) const
-{
- *parent_id = m_attachment_parent_id;
- *bone = m_attachment_bone;
- *position = m_attachment_position;
- *rotation = m_attachment_rotation;
-}
-
-void UnitSAO::clearChildAttachments()
-{
- for (int child_id : m_attachment_child_ids) {
- // Child can be NULL if it was deleted earlier
- if (ServerActiveObject *child = m_env->getActiveObject(child_id))
- child->setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0));
- }
- m_attachment_child_ids.clear();
-}
-
-void UnitSAO::clearParentAttachment()
-{
- ServerActiveObject *parent = nullptr;
- if (m_attachment_parent_id) {
- parent = m_env->getActiveObject(m_attachment_parent_id);
- setAttachment(0, "", m_attachment_position, m_attachment_rotation);
- } else {
- setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0));
- }
- // Do it
- if (parent)
- parent->removeAttachmentChild(m_id);
-}
-
-void UnitSAO::addAttachmentChild(int child_id)
-{
- m_attachment_child_ids.insert(child_id);
-}
-
-void UnitSAO::removeAttachmentChild(int child_id)
-{
- m_attachment_child_ids.erase(child_id);
-}
-
-const std::unordered_set<int> &UnitSAO::getAttachmentChildIds() const
-{
- return m_attachment_child_ids;
-}
-
-void UnitSAO::onAttach(int parent_id)
-{
- if (!parent_id)
- return;
-
- ServerActiveObject *parent = m_env->getActiveObject(parent_id);
-
- if (!parent || parent->isGone())
- return; // Do not try to notify soon gone parent
-
- if (parent->getType() == ACTIVEOBJECT_TYPE_LUAENTITY) {
- // Call parent's on_attach field
- m_env->getScriptIface()->luaentity_on_attach_child(parent_id, this);
- }
-}
-
-void UnitSAO::onDetach(int parent_id)
-{
- if (!parent_id)
- return;
-
- ServerActiveObject *parent = m_env->getActiveObject(parent_id);
- if (getType() == ACTIVEOBJECT_TYPE_LUAENTITY)
- m_env->getScriptIface()->luaentity_on_detach(m_id, parent);
-
- if (!parent || parent->isGone())
- return; // Do not try to notify soon gone parent
-
- if (parent->getType() == ACTIVEOBJECT_TYPE_LUAENTITY)
- m_env->getScriptIface()->luaentity_on_detach_child(parent_id, this);
-}
-
-ObjectProperties* UnitSAO::accessObjectProperties()
-{
- return &m_prop;
-}
-
-void UnitSAO::notifyObjectPropertiesModified()
-{
- m_properties_sent = false;
-}
-
-/*
- LuaEntitySAO
-*/
-
-// Prototype (registers item for deserialization)
-LuaEntitySAO proto_LuaEntitySAO(NULL, v3f(0,0,0), "_prototype", "");
-
-LuaEntitySAO::LuaEntitySAO(ServerEnvironment *env, v3f pos,
- const std::string &name, const std::string &state):
- UnitSAO(env, pos),
- m_init_name(name),
- m_init_state(state)
-{
- // Only register type if no environment supplied
- if(env == NULL){
- ServerActiveObject::registerType(getType(), create);
- return;
- }
-}
-
-LuaEntitySAO::~LuaEntitySAO()
-{
- if(m_registered){
- m_env->getScriptIface()->luaentity_Remove(m_id);
- }
-
- for (u32 attached_particle_spawner : m_attached_particle_spawners) {
- m_env->deleteParticleSpawner(attached_particle_spawner, false);
- }
-}
-
-void LuaEntitySAO::addedToEnvironment(u32 dtime_s)
-{
- ServerActiveObject::addedToEnvironment(dtime_s);
-
- // Create entity from name
- m_registered = m_env->getScriptIface()->
- luaentity_Add(m_id, m_init_name.c_str());
-
- if(m_registered){
- // Get properties
- m_env->getScriptIface()->
- luaentity_GetProperties(m_id, this, &m_prop);
- // Initialize HP from properties
- m_hp = m_prop.hp_max;
- // Activate entity, supplying serialized state
- m_env->getScriptIface()->
- luaentity_Activate(m_id, m_init_state, dtime_s);
- } else {
- m_prop.infotext = m_init_name;
- }
-}
-
-ServerActiveObject* LuaEntitySAO::create(ServerEnvironment *env, v3f pos,
- const std::string &data)
-{
- std::string name;
- std::string state;
- u16 hp = 1;
- v3f velocity;
- v3f rotation;
-
- while (!data.empty()) { // breakable, run for one iteration
- std::istringstream is(data, std::ios::binary);
- // 'version' does not allow to incrementally extend the parameter list thus
- // we need another variable to build on top of 'version=1'. Ugly hack but worksâ„¢
- u8 version2 = 0;
- u8 version = readU8(is);
-
- name = deSerializeString(is);
- state = deSerializeLongString(is);
-
- if (version < 1)
- break;
-
- hp = readU16(is);
- velocity = readV3F1000(is);
- // yaw must be yaw to be backwards-compatible
- rotation.Y = readF1000(is);
-
- if (is.good()) // EOF for old formats
- version2 = readU8(is);
-
- if (version2 < 1) // PROTOCOL_VERSION < 37
- break;
-
- // version2 >= 1
- rotation.X = readF1000(is);
- rotation.Z = readF1000(is);
-
- // if (version2 < 2)
- // break;
- // <read new values>
- break;
- }
- // create object
- infostream << "LuaEntitySAO::create(name=\"" << name << "\" state=\""
- << state << "\")" << std::endl;
- LuaEntitySAO *sao = new LuaEntitySAO(env, pos, name, state);
- sao->m_hp = hp;
- sao->m_velocity = velocity;
- sao->m_rotation = rotation;
- return sao;
-}
-
-void LuaEntitySAO::step(float dtime, bool send_recommended)
-{
- if(!m_properties_sent)
- {
- m_properties_sent = true;
- std::string str = getPropertyPacket();
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
-
- // If attached, check that our parent is still there. If it isn't, detach.
- if(m_attachment_parent_id && !isAttached())
- {
- m_attachment_parent_id = 0;
- m_attachment_bone = "";
- m_attachment_position = v3f(0,0,0);
- m_attachment_rotation = v3f(0,0,0);
- sendPosition(false, true);
- }
-
- m_last_sent_position_timer += dtime;
-
- // 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;
- m_velocity = v3f(0,0,0);
- m_acceleration = v3f(0,0,0);
- }
- else
- {
- if(m_prop.physical){
- aabb3f box = m_prop.collisionbox;
- box.MinEdge *= BS;
- box.MaxEdge *= BS;
- collisionMoveResult moveresult;
- f32 pos_max_d = BS*0.25; // Distance per iteration
- v3f p_pos = m_base_position;
- v3f p_velocity = m_velocity;
- v3f p_acceleration = m_acceleration;
- moveresult = collisionMoveSimple(m_env, m_env->getGameDef(),
- pos_max_d, box, m_prop.stepheight, dtime,
- &p_pos, &p_velocity, p_acceleration,
- this, m_prop.collideWithObjects);
-
- // Apply results
- m_base_position = p_pos;
- m_velocity = p_velocity;
- m_acceleration = p_acceleration;
- } else {
- m_base_position += dtime * m_velocity + 0.5 * dtime
- * dtime * m_acceleration;
- m_velocity += dtime * m_acceleration;
- }
-
- if (m_prop.automatic_face_movement_dir &&
- (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001)) {
- float target_yaw = atan2(m_velocity.Z, m_velocity.X) * 180 / M_PI
- + m_prop.automatic_face_movement_dir_offset;
- float max_rotation_per_sec =
- m_prop.automatic_face_movement_max_rotation_per_sec;
-
- if (max_rotation_per_sec > 0) {
- m_rotation.Y = wrapDegrees_0_360(m_rotation.Y);
- wrappedApproachShortest(m_rotation.Y, target_yaw,
- dtime * max_rotation_per_sec, 360.f);
- } else {
- // Negative values of max_rotation_per_sec mean disabled.
- m_rotation.Y = target_yaw;
- }
- }
- }
-
- if(m_registered){
- m_env->getScriptIface()->luaentity_Step(m_id, dtime);
- }
-
- if (!send_recommended)
- return;
-
- if(!isAttached())
- {
- // TODO: force send when acceleration changes enough?
- float minchange = 0.2*BS;
- if(m_last_sent_position_timer > 1.0){
- minchange = 0.01*BS;
- } else if(m_last_sent_position_timer > 0.2){
- minchange = 0.05*BS;
- }
- float move_d = m_base_position.getDistanceFrom(m_last_sent_position);
- move_d += m_last_sent_move_precision;
- float vel_d = m_velocity.getDistanceFrom(m_last_sent_velocity);
- if (move_d > minchange || vel_d > minchange ||
- std::fabs(m_rotation.X - m_last_sent_rotation.X) > 1.0f ||
- std::fabs(m_rotation.Y - m_last_sent_rotation.Y) > 1.0f ||
- std::fabs(m_rotation.Z - m_last_sent_rotation.Z) > 1.0f) {
-
- sendPosition(true, false);
- }
- }
-
- if (!m_armor_groups_sent) {
- m_armor_groups_sent = true;
- std::string str = gob_cmd_update_armor_groups(
- m_armor_groups);
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
-
- if (!m_animation_sent) {
- m_animation_sent = true;
- std::string str = gob_cmd_update_animation(
- m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop);
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
-
- if (!m_animation_speed_sent) {
- m_animation_speed_sent = true;
- std::string str = gob_cmd_update_animation_speed(m_animation_speed);
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
-
- if (!m_bone_position_sent) {
- m_bone_position_sent = true;
- for (std::unordered_map<std::string, core::vector2d<v3f>>::const_iterator
- ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){
- std::string str = gob_cmd_update_bone_position((*ii).first,
- (*ii).second.X, (*ii).second.Y);
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
- }
-
- if (!m_attachment_sent) {
- m_attachment_sent = true;
- std::string str = gob_cmd_update_attachment(m_attachment_parent_id, m_attachment_bone, m_attachment_position, m_attachment_rotation);
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
-}
-
-std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
-{
- std::ostringstream os(std::ios::binary);
-
- // PROTOCOL_VERSION >= 37
- writeU8(os, 1); // version
- os << serializeString(""); // name
- writeU8(os, 0); // is_player
- writeU16(os, getId()); //id
- writeV3F32(os, m_base_position);
- writeV3F32(os, m_rotation);
- writeU16(os, m_hp);
-
- std::ostringstream msg_os(std::ios::binary);
- msg_os << serializeLongString(getPropertyPacket()); // message 1
- msg_os << serializeLongString(gob_cmd_update_armor_groups(m_armor_groups)); // 2
- msg_os << serializeLongString(gob_cmd_update_animation(
- m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3
- for (std::unordered_map<std::string, core::vector2d<v3f>>::const_iterator
- ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) {
- msg_os << serializeLongString(gob_cmd_update_bone_position((*ii).first,
- (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
- }
- msg_os << serializeLongString(gob_cmd_update_attachment(m_attachment_parent_id,
- m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
- int message_count = 4 + m_bone_position.size();
- for (std::unordered_set<int>::const_iterator ii = m_attachment_child_ids.begin();
- (ii != m_attachment_child_ids.end()); ++ii) {
- if (ServerActiveObject *obj = m_env->getActiveObject(*ii)) {
- message_count++;
- // TODO after a protocol bump: only send the object initialization data
- // to older clients (superfluous since this message exists)
- msg_os << serializeLongString(gob_cmd_update_infant(*ii, obj->getSendType(),
- obj->getClientInitializationData(protocol_version)));
- }
- }
-
- msg_os << serializeLongString(gob_cmd_set_texture_mod(m_current_texture_modifier));
- message_count++;
-
- writeU8(os, message_count);
- os.write(msg_os.str().c_str(), msg_os.str().size());
-
- // return result
- return os.str();
-}
-
-void LuaEntitySAO::getStaticData(std::string *result) const
-{
- verbosestream<<FUNCTION_NAME<<std::endl;
- std::ostringstream os(std::ios::binary);
- // version must be 1 to keep backwards-compatibility. See version2
- writeU8(os, 1);
- // name
- os<<serializeString(m_init_name);
- // state
- if(m_registered){
- std::string state = m_env->getScriptIface()->
- luaentity_GetStaticdata(m_id);
- os<<serializeLongString(state);
- } else {
- os<<serializeLongString(m_init_state);
- }
- writeU16(os, m_hp);
- writeV3F1000(os, m_velocity);
- // yaw
- writeF1000(os, m_rotation.Y);
-
- // version2. Increase this variable for new values
- writeU8(os, 1); // PROTOCOL_VERSION >= 37
-
- writeF1000(os, m_rotation.X);
- writeF1000(os, m_rotation.Z);
-
- // <write new values>
-
- *result = os.str();
-}
-
-u16 LuaEntitySAO::punch(v3f dir,
- const ToolCapabilities *toolcap,
- ServerActiveObject *puncher,
- float time_from_last_punch)
-{
- if (!m_registered) {
- // Delete unknown LuaEntities when punched
- m_pending_removal = true;
- return 0;
- }
-
- FATAL_ERROR_IF(!puncher, "Punch action called without SAO");
-
- s32 old_hp = getHP();
- ItemStack selected_item, hand_item;
- ItemStack tool_item = puncher->getWieldedItem(&selected_item, &hand_item);
-
- PunchDamageResult result = getPunchDamage(
- m_armor_groups,
- toolcap,
- &tool_item,
- time_from_last_punch);
-
- bool damage_handled = m_env->getScriptIface()->luaentity_Punch(m_id, puncher,
- time_from_last_punch, toolcap, dir, result.did_punch ? result.damage : 0);
-
- if (!damage_handled) {
- if (result.did_punch) {
- setHP((s32)getHP() - result.damage,
- PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, puncher));
-
- std::string str = gob_cmd_punched(getHP());
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
- }
-
- if (getHP() == 0 && !isGone()) {
- clearParentAttachment();
- clearChildAttachments();
- m_env->getScriptIface()->luaentity_on_death(m_id, puncher);
- m_pending_removal = true;
- }
-
- actionstream << puncher->getDescription() << " (id=" << puncher->getId() <<
- ", hp=" << puncher->getHP() << ") punched " <<
- getDescription() << " (id=" << m_id << ", hp=" << m_hp <<
- "), damage=" << (old_hp - (s32)getHP()) <<
- (damage_handled ? " (handled by Lua)" : "") << std::endl;
-
- // TODO: give Lua control over wear
- return result.wear;
-}
-
-void LuaEntitySAO::rightClick(ServerActiveObject *clicker)
-{
- if (!m_registered)
- return;
-
- m_env->getScriptIface()->luaentity_Rightclick(m_id, clicker);
-}
-
-void LuaEntitySAO::setPos(const v3f &pos)
-{
- if(isAttached())
- return;
- m_base_position = pos;
- sendPosition(false, true);
-}
-
-void LuaEntitySAO::moveTo(v3f pos, bool continuous)
-{
- if(isAttached())
- return;
- m_base_position = pos;
- if(!continuous)
- sendPosition(true, true);
-}
-
-float LuaEntitySAO::getMinimumSavedMovement()
-{
- return 0.1 * BS;
-}
-
-std::string LuaEntitySAO::getDescription()
-{
- std::ostringstream os(std::ios::binary);
- os<<"LuaEntitySAO at (";
- os<<(m_base_position.X/BS)<<",";
- os<<(m_base_position.Y/BS)<<",";
- os<<(m_base_position.Z/BS);
- os<<")";
- return os.str();
-}
-
-void LuaEntitySAO::setHP(s32 hp, const PlayerHPChangeReason &reason)
-{
- m_hp = rangelim(hp, 0, U16_MAX);
-}
-
-u16 LuaEntitySAO::getHP() const
-{
- return m_hp;
-}
-
-void LuaEntitySAO::setVelocity(v3f velocity)
-{
- m_velocity = velocity;
-}
-
-v3f LuaEntitySAO::getVelocity()
-{
- return m_velocity;
-}
-
-void LuaEntitySAO::setAcceleration(v3f acceleration)
-{
- m_acceleration = acceleration;
-}
-
-v3f LuaEntitySAO::getAcceleration()
-{
- return m_acceleration;
-}
-
-void LuaEntitySAO::setTextureMod(const std::string &mod)
-{
- std::string str = gob_cmd_set_texture_mod(mod);
- m_current_texture_modifier = mod;
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
-}
-
-std::string LuaEntitySAO::getTextureMod() const
-{
- return m_current_texture_modifier;
-}
-
-void LuaEntitySAO::setSprite(v2s16 p, int num_frames, float framelength,
- bool select_horiz_by_yawpitch)
-{
- std::string str = gob_cmd_set_sprite(
- p,
- num_frames,
- framelength,
- select_horiz_by_yawpitch
- );
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
-}
-
-std::string LuaEntitySAO::getName()
-{
- return m_init_name;
-}
-
-std::string LuaEntitySAO::getPropertyPacket()
-{
- return gob_cmd_set_properties(m_prop);
-}
-
-void LuaEntitySAO::sendPosition(bool do_interpolate, bool is_movement_end)
-{
- // If the object is attached client-side, don't waste bandwidth sending its position to clients
- if(isAttached())
- return;
-
- m_last_sent_move_precision = m_base_position.getDistanceFrom(
- m_last_sent_position);
- m_last_sent_position_timer = 0;
- m_last_sent_position = m_base_position;
- m_last_sent_velocity = m_velocity;
- //m_last_sent_acceleration = m_acceleration;
- m_last_sent_rotation = m_rotation;
-
- float update_interval = m_env->getSendRecommendedInterval();
-
- std::string str = gob_cmd_update_position(
- m_base_position,
- m_velocity,
- m_acceleration,
- m_rotation,
- do_interpolate,
- is_movement_end,
- update_interval
- );
- // create message and add to list
- ActiveObjectMessage aom(getId(), false, str);
- m_messages_out.push(aom);
-}
-
-bool LuaEntitySAO::getCollisionBox(aabb3f *toset) const
-{
- if (m_prop.physical)
- {
- //update collision box
- toset->MinEdge = m_prop.collisionbox.MinEdge * BS;
- toset->MaxEdge = m_prop.collisionbox.MaxEdge * BS;
-
- toset->MinEdge += m_base_position;
- toset->MaxEdge += m_base_position;
-
- return true;
- }
-
- return false;
-}
-
-bool LuaEntitySAO::getSelectionBox(aabb3f *toset) const
-{
- if (!m_prop.is_visible || !m_prop.pointable) {
- return false;
- }
-
- toset->MinEdge = m_prop.selectionbox.MinEdge * BS;
- toset->MaxEdge = m_prop.selectionbox.MaxEdge * BS;
-
- return true;
-}
-
-bool LuaEntitySAO::collideWithObjects() const
-{
- return m_prop.collideWithObjects;
-}
-
-/*
- PlayerSAO
-*/
-
-// No prototype, PlayerSAO does not need to be deserialized
-
-PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t peer_id_,
- bool is_singleplayer):
- UnitSAO(env_, v3f(0,0,0)),
- m_player(player_),
- m_peer_id(peer_id_),
- m_is_singleplayer(is_singleplayer)
-{
- SANITY_CHECK(m_peer_id != PEER_ID_INEXISTENT);
-
- m_prop.hp_max = PLAYER_MAX_HP_DEFAULT;
- m_prop.breath_max = PLAYER_MAX_BREATH_DEFAULT;
- m_prop.physical = false;
- m_prop.collisionbox = aabb3f(-0.3f, 0.0f, -0.3f, 0.3f, 1.77f, 0.3f);
- m_prop.selectionbox = aabb3f(-0.3f, 0.0f, -0.3f, 0.3f, 1.77f, 0.3f);
- m_prop.pointable = true;
- // Start of default appearance, this should be overwritten by Lua
- m_prop.visual = "upright_sprite";
- m_prop.visual_size = v3f(1, 2, 1);
- m_prop.textures.clear();
- m_prop.textures.emplace_back("player.png");
- m_prop.textures.emplace_back("player_back.png");
- m_prop.colors.clear();
- m_prop.colors.emplace_back(255, 255, 255, 255);
- m_prop.spritediv = v2s16(1,1);
- m_prop.eye_height = 1.625f;
- // End of default appearance
- m_prop.is_visible = true;
- m_prop.backface_culling = false;
- m_prop.makes_footstep_sound = true;
- m_prop.stepheight = PLAYER_DEFAULT_STEPHEIGHT * BS;
- m_hp = m_prop.hp_max;
- m_breath = m_prop.breath_max;
- // Disable zoom in survival mode using a value of 0
- m_prop.zoom_fov = g_settings->getBool("creative_mode") ? 15.0f : 0.0f;
-
- if (!g_settings->getBool("enable_damage"))
- m_armor_groups["immortal"] = 1;
-}
-
-void PlayerSAO::finalize(RemotePlayer *player, const std::set<std::string> &privs)
-{
- assert(player);
- m_player = player;
- m_privs = privs;
-}
-
-v3f PlayerSAO::getEyeOffset() const
-{
- return v3f(0, BS * m_prop.eye_height, 0);
-}
-
-std::string PlayerSAO::getDescription()
-{
- return std::string("player ") + m_player->getName();
-}
-
-// Called after id has been set and has been inserted in environment
-void PlayerSAO::addedToEnvironment(u32 dtime_s)
-{
- ServerActiveObject::addedToEnvironment(dtime_s);
- ServerActiveObject::setBasePosition(m_base_position);
- m_player->setPlayerSAO(this);
- m_player->setPeerId(m_peer_id);
- m_last_good_position = m_base_position;
-}
-
-// Called before removing from environment
-void PlayerSAO::removingFromEnvironment()
-{
- ServerActiveObject::removingFromEnvironment();
- if (m_player->getPlayerSAO() == this) {
- unlinkPlayerSessionAndSave();
- for (u32 attached_particle_spawner : m_attached_particle_spawners) {
- m_env->deleteParticleSpawner(attached_particle_spawner, false);
- }
- }
-}
-
-std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
-{
- std::ostringstream os(std::ios::binary);
-
- // Protocol >= 15
- writeU8(os, 1); // version
- os << serializeString(m_player->getName()); // name
- writeU8(os, 1); // is_player
- writeS16(os, getId()); // id
- writeV3F32(os, m_base_position);
- writeV3F32(os, m_rotation);
- writeU16(os, getHP());
-
- std::ostringstream msg_os(std::ios::binary);
- msg_os << serializeLongString(getPropertyPacket()); // message 1
- msg_os << serializeLongString(gob_cmd_update_armor_groups(m_armor_groups)); // 2
- msg_os << serializeLongString(gob_cmd_update_animation(
- m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3
- for (std::unordered_map<std::string, core::vector2d<v3f>>::const_iterator
- ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) {
- msg_os << serializeLongString(gob_cmd_update_bone_position((*ii).first,
- (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
- }
- msg_os << serializeLongString(gob_cmd_update_attachment(m_attachment_parent_id,
- m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
- msg_os << serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed,
- m_physics_override_jump, m_physics_override_gravity, m_physics_override_sneak,
- m_physics_override_sneak_glitch, m_physics_override_new_move)); // 5
- // (GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) : Deprecated, for backwards compatibility only.
- msg_os << serializeLongString(gob_cmd_update_nametag_attributes(m_prop.nametag_color)); // 6
- int message_count = 6 + m_bone_position.size();
- for (std::unordered_set<int>::const_iterator ii = m_attachment_child_ids.begin();
- ii != m_attachment_child_ids.end(); ++ii) {
- if (ServerActiveObject *obj = m_env->getActiveObject(*ii)) {
- message_count++;
- msg_os << serializeLongString(gob_cmd_update_infant(*ii, obj->getSendType(),
- obj->getClientInitializationData(protocol_version)));
- }
- }
-
- writeU8(os, message_count);
- os.write(msg_os.str().c_str(), msg_os.str().size());
-
- // return result
- return os.str();
-}
-
-void PlayerSAO::getStaticData(std::string * result) const
-{
- FATAL_ERROR("Obsolete function");
-}
-
-void PlayerSAO::step(float dtime, bool send_recommended)
-{
- if (!isImmortal() && m_drowning_interval.step(dtime, 2.0f)) {
- // Get nose/mouth position, approximate with eye position
- v3s16 p = floatToInt(getEyePosition(), BS);
- MapNode n = m_env->getMap().getNode(p);
- const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n);
- // If node generates drown
- if (c.drowning > 0 && m_hp > 0) {
- if (m_breath > 0)
- setBreath(m_breath - 1);
-
- // No more breath, damage player
- if (m_breath == 0) {
- PlayerHPChangeReason reason(PlayerHPChangeReason::DROWNING);
- setHP(m_hp - c.drowning, reason);
- m_env->getGameDef()->SendPlayerHPOrDie(this, reason);
- }
- }
- }
-
- if (m_breathing_interval.step(dtime, 0.5f) && !isImmortal()) {
- // Get nose/mouth position, approximate with eye position
- v3s16 p = floatToInt(getEyePosition(), BS);
- MapNode n = m_env->getMap().getNode(p);
- const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n);
- // If player is alive & not drowning & not in ignore & not immortal, breathe
- if (m_breath < m_prop.breath_max && c.drowning == 0 &&
- n.getContent() != CONTENT_IGNORE && m_hp > 0)
- setBreath(m_breath + 1);
- }
-
- if (!isImmortal() && m_node_hurt_interval.step(dtime, 1.0f)) {
- u32 damage_per_second = 0;
- std::string nodename;
- // Lowest and highest damage points are 0.1 within collisionbox
- float dam_top = m_prop.collisionbox.MaxEdge.Y - 0.1f;
-
- // Sequence of damage points, starting 0.1 above feet and progressing
- // upwards in 1 node intervals, stopping below top damage point.
- for (float dam_height = 0.1f; dam_height < dam_top; dam_height++) {
- v3s16 p = floatToInt(m_base_position +
- v3f(0.0f, dam_height * BS, 0.0f), BS);
- MapNode n = m_env->getMap().getNode(p);
- const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n);
- if (c.damage_per_second > damage_per_second) {
- damage_per_second = c.damage_per_second;
- nodename = c.name;
- }
- }
-
- // Top damage point
- v3s16 ptop = floatToInt(m_base_position +
- v3f(0.0f, dam_top * BS, 0.0f), BS);
- MapNode ntop = m_env->getMap().getNode(ptop);
- const ContentFeatures &c = m_env->getGameDef()->ndef()->get(ntop);
- if (c.damage_per_second > damage_per_second) {
- damage_per_second = c.damage_per_second;
- nodename = c.name;
- }
-
- if (damage_per_second != 0 && m_hp > 0) {
- s32 newhp = (s32)m_hp - (s32)damage_per_second;
- PlayerHPChangeReason reason(PlayerHPChangeReason::NODE_DAMAGE, nodename);
- setHP(newhp, reason);
- m_env->getGameDef()->SendPlayerHPOrDie(this, reason);
- }
- }
-
- if (!m_properties_sent) {
- m_properties_sent = true;
- std::string str = getPropertyPacket();
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- m_env->getScriptIface()->player_event(this, "properties_changed");
- }
-
- // If attached, check that our parent is still there. If it isn't, detach.
- if (m_attachment_parent_id && !isAttached()) {
- m_attachment_parent_id = 0;
- m_attachment_bone = "";
- m_attachment_position = v3f(0.0f, 0.0f, 0.0f);
- m_attachment_rotation = v3f(0.0f, 0.0f, 0.0f);
- setBasePosition(m_last_good_position);
- m_env->getGameDef()->SendMovePlayer(m_peer_id);
- }
-
- //dstream<<"PlayerSAO::step: dtime: "<<dtime<<std::endl;
-
- // Set lag pool maximums based on estimated lag
- const float LAG_POOL_MIN = 5.0f;
- float lag_pool_max = m_env->getMaxLagEstimate() * 2.0f;
- if(lag_pool_max < LAG_POOL_MIN)
- lag_pool_max = LAG_POOL_MIN;
- m_dig_pool.setMax(lag_pool_max);
- m_move_pool.setMax(lag_pool_max);
-
- // Increment cheat prevention timers
- m_dig_pool.add(dtime);
- m_move_pool.add(dtime);
- m_time_from_last_teleport += dtime;
- m_time_from_last_punch += dtime;
- m_nocheat_dig_time += dtime;
- m_max_speed_override_time = MYMAX(m_max_speed_override_time - dtime, 0.0f);
-
- // 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_last_good_position = pos;
- setBasePosition(pos);
- }
-
- if (!send_recommended)
- return;
-
- if (m_position_not_sent) {
- m_position_not_sent = false;
- float update_interval = m_env->getSendRecommendedInterval();
- v3f pos;
- // When attached, the position is only sent to clients where the
- // parent isn't known
- if (isAttached())
- pos = m_last_good_position;
- else
- pos = m_base_position;
-
- std::string str = gob_cmd_update_position(
- pos,
- v3f(0.0f, 0.0f, 0.0f),
- v3f(0.0f, 0.0f, 0.0f),
- m_rotation,
- true,
- false,
- update_interval
- );
- // create message and add to list
- ActiveObjectMessage aom(getId(), false, str);
- m_messages_out.push(aom);
- }
-
- if (!m_armor_groups_sent) {
- m_armor_groups_sent = true;
- std::string str = gob_cmd_update_armor_groups(
- m_armor_groups);
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
-
- if (!m_physics_override_sent) {
- m_physics_override_sent = true;
- std::string str = gob_cmd_update_physics_override(m_physics_override_speed,
- m_physics_override_jump, m_physics_override_gravity,
- m_physics_override_sneak, m_physics_override_sneak_glitch,
- m_physics_override_new_move);
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
-
- if (!m_animation_sent) {
- m_animation_sent = true;
- std::string str = gob_cmd_update_animation(
- m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop);
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
-
- if (!m_bone_position_sent) {
- m_bone_position_sent = true;
- for (std::unordered_map<std::string, core::vector2d<v3f>>::const_iterator
- ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) {
- std::string str = gob_cmd_update_bone_position((*ii).first,
- (*ii).second.X, (*ii).second.Y);
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
- }
-
- if (!m_attachment_sent) {
- m_attachment_sent = true;
- std::string str = gob_cmd_update_attachment(m_attachment_parent_id,
- m_attachment_bone, m_attachment_position, m_attachment_rotation);
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
-}
-
-void PlayerSAO::setBasePosition(const v3f &position)
-{
- if (m_player && position != m_base_position)
- m_player->setDirty(true);
-
- // This needs to be ran for attachments too
- ServerActiveObject::setBasePosition(position);
-
- // Updating is not wanted/required for player migration
- if (m_env) {
- m_position_not_sent = true;
- }
-}
-
-void PlayerSAO::setPos(const v3f &pos)
-{
- if(isAttached())
- return;
-
- // Send mapblock of target location
- v3s16 blockpos = v3s16(pos.X / MAP_BLOCKSIZE, pos.Y / MAP_BLOCKSIZE, pos.Z / MAP_BLOCKSIZE);
- m_env->getGameDef()->SendBlock(m_peer_id, blockpos);
-
- setBasePosition(pos);
- // Movement caused by this command is always valid
- m_last_good_position = pos;
- m_move_pool.empty();
- m_time_from_last_teleport = 0.0;
- m_env->getGameDef()->SendMovePlayer(m_peer_id);
-}
-
-void PlayerSAO::moveTo(v3f pos, bool continuous)
-{
- if(isAttached())
- return;
-
- setBasePosition(pos);
- // Movement caused by this command is always valid
- m_last_good_position = pos;
- m_move_pool.empty();
- m_time_from_last_teleport = 0.0;
- m_env->getGameDef()->SendMovePlayer(m_peer_id);
-}
-
-void PlayerSAO::setPlayerYaw(const float yaw)
-{
- v3f rotation(0, yaw, 0);
- if (m_player && yaw != m_rotation.Y)
- m_player->setDirty(true);
-
- // Set player model yaw, not look view
- UnitSAO::setRotation(rotation);
-}
-
-void PlayerSAO::setFov(const float fov)
-{
- if (m_player && fov != m_fov)
- m_player->setDirty(true);
-
- m_fov = fov;
-}
-
-void PlayerSAO::setWantedRange(const s16 range)
-{
- if (m_player && range != m_wanted_range)
- m_player->setDirty(true);
-
- m_wanted_range = range;
-}
-
-void PlayerSAO::setPlayerYawAndSend(const float yaw)
-{
- setPlayerYaw(yaw);
- m_env->getGameDef()->SendMovePlayer(m_peer_id);
-}
-
-void PlayerSAO::setLookPitch(const float pitch)
-{
- if (m_player && pitch != m_pitch)
- m_player->setDirty(true);
-
- m_pitch = pitch;
-}
-
-void PlayerSAO::setLookPitchAndSend(const float pitch)
-{
- setLookPitch(pitch);
- m_env->getGameDef()->SendMovePlayer(m_peer_id);
-}
-
-u16 PlayerSAO::punch(v3f dir,
- const ToolCapabilities *toolcap,
- ServerActiveObject *puncher,
- float time_from_last_punch)
-{
- if (!toolcap)
- return 0;
-
- FATAL_ERROR_IF(!puncher, "Punch action called without SAO");
-
- // No effect if PvP disabled or if immortal
- if (isImmortal() || !g_settings->getBool("enable_pvp")) {
- if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
- std::string str = gob_cmd_punched(getHP());
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- return 0;
- }
- }
-
- s32 old_hp = getHP();
- HitParams hitparams = getHitParams(m_armor_groups, toolcap,
- time_from_last_punch);
-
- PlayerSAO *playersao = m_player->getPlayerSAO();
-
- bool damage_handled = m_env->getScriptIface()->on_punchplayer(playersao,
- puncher, time_from_last_punch, toolcap, dir,
- hitparams.hp);
-
- if (!damage_handled) {
- setHP((s32)getHP() - (s32)hitparams.hp,
- PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, puncher));
- } else { // override client prediction
- if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
- std::string str = gob_cmd_punched(getHP());
- // create message and add to list
- ActiveObjectMessage aom(getId(), true, str);
- m_messages_out.push(aom);
- }
- }
-
- actionstream << puncher->getDescription() << " (id=" << puncher->getId() <<
- ", hp=" << puncher->getHP() << ") punched " <<
- getDescription() << " (id=" << m_id << ", hp=" << m_hp <<
- "), damage=" << (old_hp - (s32)getHP()) <<
- (damage_handled ? " (handled by Lua)" : "") << std::endl;
-
- return hitparams.wear;
-}
-
-void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason)
-{
- s32 oldhp = m_hp;
-
- hp = rangelim(hp, 0, m_prop.hp_max);
-
- if (oldhp != hp) {
- s32 hp_change = m_env->getScriptIface()->on_player_hpchange(this, hp - oldhp, reason);
- if (hp_change == 0)
- return;
-
- hp = rangelim(oldhp + hp_change, 0, m_prop.hp_max);
- }
-
- if (hp < oldhp && isImmortal())
- return;
-
- m_hp = hp;
-
- // Update properties on death
- if ((hp == 0) != (oldhp == 0))
- m_properties_sent = false;
-}
-
-void PlayerSAO::setBreath(const u16 breath, bool send)
-{
- if (m_player && breath != m_breath)
- m_player->setDirty(true);
-
- m_breath = rangelim(breath, 0, m_prop.breath_max);
-
- if (send)
- m_env->getGameDef()->SendPlayerBreath(this);
-}
-
-Inventory *PlayerSAO::getInventory() const
-{
- return m_player ? &m_player->inventory : nullptr;
-}
-
-InventoryLocation PlayerSAO::getInventoryLocation() const
-{
- InventoryLocation loc;
- loc.setPlayer(m_player->getName());
- return loc;
-}
-
-u16 PlayerSAO::getWieldIndex() const
-{
- return m_player->getWieldIndex();
-}
-
-ItemStack PlayerSAO::getWieldedItem(ItemStack *selected, ItemStack *hand) const
-{
- return m_player->getWieldedItem(selected, hand);
-}
-
-bool PlayerSAO::setWieldedItem(const ItemStack &item)
-{
- InventoryList *mlist = m_player->inventory.getList(getWieldList());
- if (mlist) {
- mlist->changeItem(m_player->getWieldIndex(), item);
- return true;
- }
- return false;
-}
-
-void PlayerSAO::disconnected()
-{
- m_peer_id = PEER_ID_INEXISTENT;
- m_pending_removal = true;
-}
-
-void PlayerSAO::unlinkPlayerSessionAndSave()
-{
- assert(m_player->getPlayerSAO() == this);
- m_player->setPeerId(PEER_ID_INEXISTENT);
- m_env->savePlayer(m_player);
- m_player->setPlayerSAO(NULL);
- m_env->removePlayer(m_player);
-}
-
-std::string PlayerSAO::getPropertyPacket()
-{
- m_prop.is_visible = (true);
- return gob_cmd_set_properties(m_prop);
-}
-
-void PlayerSAO::setMaxSpeedOverride(const v3f &vel)
-{
- if (m_max_speed_override_time == 0.0f)
- m_max_speed_override = vel;
- else
- m_max_speed_override += vel;
- if (m_player) {
- float accel = MYMIN(m_player->movement_acceleration_default,
- m_player->movement_acceleration_air);
- m_max_speed_override_time = m_max_speed_override.getLength() / accel / BS;
- }
-}
-
-bool PlayerSAO::checkMovementCheat()
-{
- if (isAttached() || m_is_singleplayer ||
- g_settings->getBool("disable_anticheat")) {
- m_last_good_position = m_base_position;
- return false;
- }
-
- bool cheated = false;
- /*
- Check player movements
-
- NOTE: Actually the server should handle player physics like the
- client does and compare player's position to what is calculated
- on our side. This is required when eg. players fly due to an
- explosion. Altough a node-based alternative might be possible
- too, and much more lightweight.
- */
-
- float override_max_H, override_max_V;
- if (m_max_speed_override_time > 0.0f) {
- override_max_H = MYMAX(fabs(m_max_speed_override.X), fabs(m_max_speed_override.Z));
- override_max_V = fabs(m_max_speed_override.Y);
- } else {
- override_max_H = override_max_V = 0.0f;
- }
-
- float player_max_walk = 0; // horizontal movement
- float player_max_jump = 0; // vertical upwards movement
-
- if (m_privs.count("fast") != 0)
- player_max_walk = m_player->movement_speed_fast; // Fast speed
- else
- player_max_walk = m_player->movement_speed_walk; // Normal speed
- player_max_walk *= m_physics_override_speed;
- player_max_walk = MYMAX(player_max_walk, override_max_H);
-
- player_max_jump = m_player->movement_speed_jump * m_physics_override_jump;
- // FIXME: Bouncy nodes cause practically unbound increase in Y speed,
- // until this can be verified correctly, tolerate higher jumping speeds
- player_max_jump *= 2.0;
- player_max_jump = MYMAX(player_max_jump, override_max_V);
-
- // Don't divide by zero!
- if (player_max_walk < 0.0001f)
- player_max_walk = 0.0001f;
- if (player_max_jump < 0.0001f)
- player_max_jump = 0.0001f;
-
- v3f diff = (m_base_position - m_last_good_position);
- float d_vert = diff.Y;
- diff.Y = 0;
- float d_horiz = diff.getLength();
- float required_time = d_horiz / player_max_walk;
-
- // FIXME: Checking downwards movement is not easily possible currently,
- // the server could calculate speed differences to examine the gravity
- if (d_vert > 0) {
- // In certain cases (water, ladders) walking speed is applied vertically
- float s = MYMAX(player_max_jump, player_max_walk);
- required_time = MYMAX(required_time, d_vert / s);
- }
-
- if (m_move_pool.grab(required_time)) {
- m_last_good_position = m_base_position;
- } else {
- const float LAG_POOL_MIN = 5.0;
- float lag_pool_max = m_env->getMaxLagEstimate() * 2.0;
- lag_pool_max = MYMAX(lag_pool_max, LAG_POOL_MIN);
- if (m_time_from_last_teleport > lag_pool_max) {
- actionstream << "Player " << m_player->getName()
- << " moved too fast; resetting position"
- << std::endl;
- cheated = true;
- }
- setBasePosition(m_last_good_position);
- }
- return cheated;
-}
-
-bool PlayerSAO::getCollisionBox(aabb3f *toset) const
-{
- //update collision box
- toset->MinEdge = m_prop.collisionbox.MinEdge * BS;
- toset->MaxEdge = m_prop.collisionbox.MaxEdge * BS;
-
- toset->MinEdge += m_base_position;
- toset->MaxEdge += m_base_position;
- return true;
-}
-
-bool PlayerSAO::getSelectionBox(aabb3f *toset) const
-{
- if (!m_prop.is_visible || !m_prop.pointable) {
- return false;
- }
-
- toset->MinEdge = m_prop.selectionbox.MinEdge * BS;
- toset->MaxEdge = m_prop.selectionbox.MaxEdge * BS;
-
- return true;
-}
-
-float PlayerSAO::getZoomFOV() const
-{
- return m_prop.zoom_fov;
-}
diff --git a/src/craftdef.cpp b/src/craftdef.cpp
index 0181ceb60..210605198 100644
--- a/src/craftdef.cpp
+++ b/src/craftdef.cpp
@@ -1066,8 +1066,8 @@ public:
}
virtual void registerCraft(CraftDefinition *def, IGameDef *gamedef)
{
- verbosestream << "registerCraft: registering craft definition: "
- << def->dump() << std::endl;
+ TRACESTREAM(<< "registerCraft: registering craft definition: "
+ << def->dump() << std::endl);
m_craft_defs[(int) CRAFT_HASH_TYPE_UNHASHED][0].push_back(def);
CraftInput input;
diff --git a/src/database/database-files.cpp b/src/database/database-files.cpp
index d09f1c074..d2b0b1543 100644
--- a/src/database/database-files.cpp
+++ b/src/database/database-files.cpp
@@ -20,11 +20,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <cassert>
#include <json/json.h>
#include "database-files.h"
-#include "content_sao.h"
#include "remoteplayer.h"
#include "settings.h"
#include "porting.h"
#include "filesys.h"
+#include "server/player_sao.h"
#include "util/string.h"
// !!! WARNING !!!
diff --git a/src/database/database-leveldb.cpp b/src/database/database-leveldb.cpp
index 4a4904c6a..1976ae13d 100644
--- a/src/database/database-leveldb.cpp
+++ b/src/database/database-leveldb.cpp
@@ -26,6 +26,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "filesys.h"
#include "exceptions.h"
+#include "remoteplayer.h"
+#include "server/player_sao.h"
+#include "util/serialize.h"
#include "util/string.h"
#include "leveldb/db.h"
@@ -97,5 +100,210 @@ void Database_LevelDB::listAllLoadableBlocks(std::vector<v3s16> &dst)
delete it;
}
-#endif // USE_LEVELDB
+PlayerDatabaseLevelDB::PlayerDatabaseLevelDB(const std::string &savedir)
+{
+ leveldb::Options options;
+ options.create_if_missing = true;
+ leveldb::Status status = leveldb::DB::Open(options,
+ savedir + DIR_DELIM + "players.db", &m_database);
+ ENSURE_STATUS_OK(status);
+}
+
+PlayerDatabaseLevelDB::~PlayerDatabaseLevelDB()
+{
+ delete m_database;
+}
+
+void PlayerDatabaseLevelDB::savePlayer(RemotePlayer *player)
+{
+ /*
+ u8 version = 1
+ u16 hp
+ v3f position
+ f32 pitch
+ f32 yaw
+ u16 breath
+ u32 attribute_count
+ for each attribute {
+ std::string name
+ std::string (long) value
+ }
+ std::string (long) serialized_inventory
+ */
+
+ std::ostringstream os;
+ writeU8(os, 1);
+
+ PlayerSAO *sao = player->getPlayerSAO();
+ sanity_check(sao);
+ writeU16(os, sao->getHP());
+ writeV3F32(os, sao->getBasePosition());
+ writeF32(os, sao->getLookPitch());
+ writeF32(os, sao->getRotation().Y);
+ writeU16(os, sao->getBreath());
+
+ StringMap stringvars = sao->getMeta().getStrings();
+ writeU32(os, stringvars.size());
+ for (const auto &it : stringvars) {
+ os << serializeString(it.first);
+ os << serializeLongString(it.second);
+ }
+ player->inventory.serialize(os);
+
+ leveldb::Status status = m_database->Put(leveldb::WriteOptions(),
+ player->getName(), os.str());
+ ENSURE_STATUS_OK(status);
+ player->onSuccessfulSave();
+}
+
+bool PlayerDatabaseLevelDB::removePlayer(const std::string &name)
+{
+ leveldb::Status s = m_database->Delete(leveldb::WriteOptions(), name);
+ return s.ok();
+}
+
+bool PlayerDatabaseLevelDB::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
+{
+ std::string raw;
+ leveldb::Status s = m_database->Get(leveldb::ReadOptions(),
+ player->getName(), &raw);
+ if (!s.ok())
+ return false;
+ std::istringstream is(raw);
+
+ if (readU8(is) > 1)
+ return false;
+
+ sao->setHPRaw(readU16(is));
+ sao->setBasePosition(readV3F32(is));
+ sao->setLookPitch(readF32(is));
+ sao->setPlayerYaw(readF32(is));
+ sao->setBreath(readU16(is), false);
+
+ u32 attribute_count = readU32(is);
+ for (u32 i = 0; i < attribute_count; i++) {
+ std::string name = deSerializeString(is);
+ std::string value = deSerializeLongString(is);
+ sao->getMeta().setString(name, value);
+ }
+ sao->getMeta().setModified(false);
+
+ // This should always be last.
+ try {
+ player->inventory.deSerialize(is);
+ } catch (SerializationError &e) {
+ errorstream << "Failed to deserialize player inventory. player_name="
+ << player->getName() << " " << e.what() << std::endl;
+ }
+
+ return true;
+}
+
+void PlayerDatabaseLevelDB::listPlayers(std::vector<std::string> &res)
+{
+ leveldb::Iterator* it = m_database->NewIterator(leveldb::ReadOptions());
+ res.clear();
+ for (it->SeekToFirst(); it->Valid(); it->Next()) {
+ res.push_back(it->key().ToString());
+ }
+ delete it;
+}
+
+AuthDatabaseLevelDB::AuthDatabaseLevelDB(const std::string &savedir)
+{
+ leveldb::Options options;
+ options.create_if_missing = true;
+ leveldb::Status status = leveldb::DB::Open(options,
+ savedir + DIR_DELIM + "auth.db", &m_database);
+ ENSURE_STATUS_OK(status);
+}
+
+AuthDatabaseLevelDB::~AuthDatabaseLevelDB()
+{
+ delete m_database;
+}
+
+bool AuthDatabaseLevelDB::getAuth(const std::string &name, AuthEntry &res)
+{
+ std::string raw;
+ leveldb::Status s = m_database->Get(leveldb::ReadOptions(), name, &raw);
+ if (!s.ok())
+ return false;
+ std::istringstream is(raw);
+
+ /*
+ u8 version = 1
+ std::string password
+ u16 number of privileges
+ for each privilege {
+ std::string privilege
+ }
+ s64 last_login
+ */
+
+ if (readU8(is) > 1)
+ return false;
+
+ res.id = 1;
+ res.name = name;
+ res.password = deSerializeString(is);
+
+ u16 privilege_count = readU16(is);
+ res.privileges.clear();
+ res.privileges.reserve(privilege_count);
+ for (u16 i = 0; i < privilege_count; i++) {
+ res.privileges.push_back(deSerializeString(is));
+ }
+
+ res.last_login = readS64(is);
+ return true;
+}
+
+bool AuthDatabaseLevelDB::saveAuth(const AuthEntry &authEntry)
+{
+ std::ostringstream os;
+ writeU8(os, 1);
+ os << serializeString(authEntry.password);
+
+ size_t privilege_count = authEntry.privileges.size();
+ FATAL_ERROR_IF(privilege_count > U16_MAX,
+ "Unsupported number of privileges");
+ writeU16(os, privilege_count);
+ for (const std::string &privilege : authEntry.privileges) {
+ os << serializeString(privilege);
+ }
+
+ writeS64(os, authEntry.last_login);
+ leveldb::Status s = m_database->Put(leveldb::WriteOptions(),
+ authEntry.name, os.str());
+ return s.ok();
+}
+
+bool AuthDatabaseLevelDB::createAuth(AuthEntry &authEntry)
+{
+ return saveAuth(authEntry);
+}
+
+bool AuthDatabaseLevelDB::deleteAuth(const std::string &name)
+{
+ leveldb::Status s = m_database->Delete(leveldb::WriteOptions(), name);
+ return s.ok();
+}
+
+void AuthDatabaseLevelDB::listNames(std::vector<std::string> &res)
+{
+ leveldb::Iterator* it = m_database->NewIterator(leveldb::ReadOptions());
+ res.clear();
+ for (it->SeekToFirst(); it->Valid(); it->Next()) {
+ res.emplace_back(it->key().ToString());
+ }
+ delete it;
+}
+
+void AuthDatabaseLevelDB::reload()
+{
+ // No-op for LevelDB.
+}
+
+#endif // USE_LEVELDB
diff --git a/src/database/database-leveldb.h b/src/database/database-leveldb.h
index d30f9f8f5..61def1256 100644
--- a/src/database/database-leveldb.h
+++ b/src/database/database-leveldb.h
@@ -45,4 +45,36 @@ private:
leveldb::DB *m_database;
};
+class PlayerDatabaseLevelDB : public PlayerDatabase
+{
+public:
+ PlayerDatabaseLevelDB(const std::string &savedir);
+ ~PlayerDatabaseLevelDB();
+
+ void savePlayer(RemotePlayer *player);
+ bool loadPlayer(RemotePlayer *player, PlayerSAO *sao);
+ bool removePlayer(const std::string &name);
+ void listPlayers(std::vector<std::string> &res);
+
+private:
+ leveldb::DB *m_database;
+};
+
+class AuthDatabaseLevelDB : public AuthDatabase
+{
+public:
+ AuthDatabaseLevelDB(const std::string &savedir);
+ virtual ~AuthDatabaseLevelDB();
+
+ virtual bool getAuth(const std::string &name, AuthEntry &res);
+ virtual bool saveAuth(const AuthEntry &authEntry);
+ virtual bool createAuth(AuthEntry &authEntry);
+ virtual bool deleteAuth(const std::string &name);
+ virtual void listNames(std::vector<std::string> &res);
+ virtual void reload();
+
+private:
+ leveldb::DB *m_database;
+};
+
#endif // USE_LEVELDB
diff --git a/src/database/database-postgresql.cpp b/src/database/database-postgresql.cpp
index d7c94ff15..e1bb39928 100644
--- a/src/database/database-postgresql.cpp
+++ b/src/database/database-postgresql.cpp
@@ -36,8 +36,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "debug.h"
#include "exceptions.h"
#include "settings.h"
-#include "content_sao.h"
#include "remoteplayer.h"
+#include "server/player_sao.h"
Database_PostgreSQL::Database_PostgreSQL(const std::string &connect_string) :
m_connect_string(connect_string)
@@ -160,6 +160,11 @@ void Database_PostgreSQL::endSave()
checkResults(PQexec(m_conn, "COMMIT;"));
}
+void Database_PostgreSQL::rollback()
+{
+ checkResults(PQexec(m_conn, "ROLLBACK;"));
+}
+
MapDatabasePostgreSQL::MapDatabasePostgreSQL(const std::string &connect_string):
Database_PostgreSQL(connect_string),
MapDatabase()
@@ -301,7 +306,7 @@ void MapDatabasePostgreSQL::listAllLoadableBlocks(std::vector<v3s16> &dst)
int numrows = PQntuples(results);
for (int row = 0; row < numrows; ++row)
- dst.push_back(pg_to_v3s16(results, 0, 0));
+ dst.push_back(pg_to_v3s16(results, row, 0));
PQclear(results);
}
@@ -631,4 +636,174 @@ void PlayerDatabasePostgreSQL::listPlayers(std::vector<std::string> &res)
PQclear(results);
}
+AuthDatabasePostgreSQL::AuthDatabasePostgreSQL(const std::string &connect_string) :
+ Database_PostgreSQL(connect_string), AuthDatabase()
+{
+ connectToDatabase();
+}
+
+void AuthDatabasePostgreSQL::createDatabase()
+{
+ createTableIfNotExists("auth",
+ "CREATE TABLE auth ("
+ "id SERIAL,"
+ "name TEXT UNIQUE,"
+ "password TEXT,"
+ "last_login INT NOT NULL DEFAULT 0,"
+ "PRIMARY KEY (id)"
+ ");");
+
+ createTableIfNotExists("user_privileges",
+ "CREATE TABLE user_privileges ("
+ "id INT,"
+ "privilege TEXT,"
+ "PRIMARY KEY (id, privilege),"
+ "CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES auth (id) ON DELETE CASCADE"
+ ");");
+}
+
+void AuthDatabasePostgreSQL::initStatements()
+{
+ prepareStatement("auth_read", "SELECT id, name, password, last_login FROM auth WHERE name = $1");
+ prepareStatement("auth_write", "UPDATE auth SET name = $1, password = $2, last_login = $3 WHERE id = $4");
+ prepareStatement("auth_create", "INSERT INTO auth (name, password, last_login) VALUES ($1, $2, $3) RETURNING id");
+ prepareStatement("auth_delete", "DELETE FROM auth WHERE name = $1");
+
+ prepareStatement("auth_list_names", "SELECT name FROM auth ORDER BY name DESC");
+
+ prepareStatement("auth_read_privs", "SELECT privilege FROM user_privileges WHERE id = $1");
+ prepareStatement("auth_write_privs", "INSERT INTO user_privileges (id, privilege) VALUES ($1, $2)");
+ prepareStatement("auth_delete_privs", "DELETE FROM user_privileges WHERE id = $1");
+}
+
+bool AuthDatabasePostgreSQL::getAuth(const std::string &name, AuthEntry &res)
+{
+ verifyDatabase();
+
+ const char *values[] = { name.c_str() };
+ PGresult *result = execPrepared("auth_read", 1, values, false, false);
+ int numrows = PQntuples(result);
+ if (numrows == 0) {
+ PQclear(result);
+ return false;
+ }
+
+ res.id = pg_to_uint(result, 0, 0);
+ res.name = std::string(PQgetvalue(result, 0, 1), PQgetlength(result, 0, 1));
+ res.password = std::string(PQgetvalue(result, 0, 2), PQgetlength(result, 0, 2));
+ res.last_login = pg_to_int(result, 0, 3);
+
+ PQclear(result);
+
+ std::string playerIdStr = itos(res.id);
+ const char *privsValues[] = { playerIdStr.c_str() };
+ PGresult *results = execPrepared("auth_read_privs", 1, privsValues, false);
+
+ numrows = PQntuples(results);
+ for (int row = 0; row < numrows; row++)
+ res.privileges.emplace_back(PQgetvalue(results, row, 0));
+
+ PQclear(results);
+
+ return true;
+}
+
+bool AuthDatabasePostgreSQL::saveAuth(const AuthEntry &authEntry)
+{
+ verifyDatabase();
+
+ beginSave();
+
+ std::string lastLoginStr = itos(authEntry.last_login);
+ std::string idStr = itos(authEntry.id);
+ const char *values[] = {
+ authEntry.name.c_str() ,
+ authEntry.password.c_str(),
+ lastLoginStr.c_str(),
+ idStr.c_str(),
+ };
+ execPrepared("auth_write", 4, values);
+
+ writePrivileges(authEntry);
+
+ endSave();
+ return true;
+}
+
+bool AuthDatabasePostgreSQL::createAuth(AuthEntry &authEntry)
+{
+ verifyDatabase();
+
+ std::string lastLoginStr = itos(authEntry.last_login);
+ const char *values[] = {
+ authEntry.name.c_str() ,
+ authEntry.password.c_str(),
+ lastLoginStr.c_str()
+ };
+
+ beginSave();
+
+ PGresult *result = execPrepared("auth_create", 3, values, false, false);
+
+ int numrows = PQntuples(result);
+ if (numrows == 0) {
+ errorstream << "Strange behaviour on auth creation, no ID returned." << std::endl;
+ PQclear(result);
+ rollback();
+ return false;
+ }
+
+ authEntry.id = pg_to_uint(result, 0, 0);
+ PQclear(result);
+
+ writePrivileges(authEntry);
+
+ endSave();
+ return true;
+}
+
+bool AuthDatabasePostgreSQL::deleteAuth(const std::string &name)
+{
+ verifyDatabase();
+
+ const char *values[] = { name.c_str() };
+ execPrepared("auth_delete", 1, values);
+
+ // privileges deleted by foreign key on delete cascade
+ return true;
+}
+
+void AuthDatabasePostgreSQL::listNames(std::vector<std::string> &res)
+{
+ verifyDatabase();
+
+ PGresult *results = execPrepared("auth_list_names", 0,
+ NULL, NULL, NULL, false, false);
+
+ int numrows = PQntuples(results);
+
+ for (int row = 0; row < numrows; ++row)
+ res.emplace_back(PQgetvalue(results, row, 0));
+
+ PQclear(results);
+}
+
+void AuthDatabasePostgreSQL::reload()
+{
+ // noop for PgSQL
+}
+
+void AuthDatabasePostgreSQL::writePrivileges(const AuthEntry &authEntry)
+{
+ std::string authIdStr = itos(authEntry.id);
+ const char *values[] = { authIdStr.c_str() };
+ execPrepared("auth_delete_privs", 1, values);
+
+ for (const std::string &privilege : authEntry.privileges) {
+ const char *values[] = { authIdStr.c_str(), privilege.c_str() };
+ execPrepared("auth_write_privs", 2, values);
+ }
+}
+
+
#endif // USE_POSTGRESQL
diff --git a/src/database/database-postgresql.h b/src/database/database-postgresql.h
index db0b505c9..f47deda33 100644
--- a/src/database/database-postgresql.h
+++ b/src/database/database-postgresql.h
@@ -34,6 +34,7 @@ public:
void beginSave();
void endSave();
+ void rollback();
bool initialized() const;
@@ -144,3 +145,26 @@ protected:
private:
bool playerDataExists(const std::string &playername);
};
+
+class AuthDatabasePostgreSQL : private Database_PostgreSQL, public AuthDatabase
+{
+public:
+ AuthDatabasePostgreSQL(const std::string &connect_string);
+ virtual ~AuthDatabasePostgreSQL() = default;
+
+ virtual void verifyDatabase() { Database_PostgreSQL::verifyDatabase(); }
+
+ virtual bool getAuth(const std::string &name, AuthEntry &res);
+ virtual bool saveAuth(const AuthEntry &authEntry);
+ virtual bool createAuth(AuthEntry &authEntry);
+ virtual bool deleteAuth(const std::string &name);
+ virtual void listNames(std::vector<std::string> &res);
+ virtual void reload();
+
+protected:
+ virtual void createDatabase();
+ virtual void initStatements();
+
+private:
+ virtual void writePrivileges(const AuthEntry &authEntry);
+};
diff --git a/src/database/database-sqlite3.cpp b/src/database/database-sqlite3.cpp
index 1bacdfe6c..4560743b9 100644
--- a/src/database/database-sqlite3.cpp
+++ b/src/database/database-sqlite3.cpp
@@ -33,8 +33,8 @@ SQLite format specification:
#include "settings.h"
#include "porting.h"
#include "util/string.h"
-#include "content_sao.h"
#include "remoteplayer.h"
+#include "server/player_sao.h"
#include <cassert>
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 2ec23b9d8..04c55864a 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -48,7 +48,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("pitch_move", "false");
settings->setDefault("fast_move", "false");
settings->setDefault("noclip", "false");
- settings->setDefault("screenshot_path", ".");
+ settings->setDefault("screenshot_path", "screenshots");
settings->setDefault("screenshot_format", "png");
settings->setDefault("screenshot_quality", "0");
settings->setDefault("client_unload_unused_data_timeout", "600");
@@ -93,7 +93,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("keymap_chat", "KEY_KEY_T");
settings->setDefault("keymap_cmd", "/");
settings->setDefault("keymap_cmd_local", ".");
- settings->setDefault("keymap_minimap", "KEY_F9");
+ settings->setDefault("keymap_minimap", "KEY_KEY_V");
settings->setDefault("keymap_console", "KEY_F10");
settings->setDefault("keymap_rangeselect", "KEY_KEY_R");
settings->setDefault("keymap_freemove", "KEY_KEY_K");
@@ -116,7 +116,7 @@ void set_default_settings(Settings *settings)
#endif
settings->setDefault("keymap_toggle_debug", "KEY_F5");
settings->setDefault("keymap_toggle_profiler", "KEY_F6");
- settings->setDefault("keymap_camera_mode", "KEY_F7");
+ settings->setDefault("keymap_camera_mode", "KEY_KEY_C");
settings->setDefault("keymap_screenshot", "KEY_F12");
settings->setDefault("keymap_increase_viewing_range_min", "+");
settings->setDefault("keymap_decrease_viewing_range_min", "-");
@@ -238,7 +238,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("desynchronize_mapblock_texture_animation", "true");
settings->setDefault("hud_hotbar_max_width", "1.0");
settings->setDefault("enable_local_map_saving", "false");
- settings->setDefault("show_entity_selectionbox", "true");
+ settings->setDefault("show_entity_selectionbox", "false");
settings->setDefault("texture_clean_transparent", "false");
settings->setDefault("texture_min_size", "64");
settings->setDefault("ambient_occlusion_gamma", "2.2");
@@ -334,8 +334,12 @@ void set_default_settings(Settings *settings)
std::string font_size_str = std::to_string(DEFAULT_FONT_SIZE);
#endif
+ // General font settings
settings->setDefault("font_size", font_size_str);
settings->setDefault("mono_font_size", font_size_str);
+ settings->setDefault("chat_font_size", "0"); // Default "font_size"
+
+ // ContentDB
settings->setDefault("contentdb_url", "https://content.minetest.net");
#ifdef __ANDROID__
settings->setDefault("contentdb_flag_blacklist", "nonfree, android_default");
@@ -347,6 +351,9 @@ void set_default_settings(Settings *settings)
// Server
settings->setDefault("disable_escape_sequences", "false");
settings->setDefault("strip_color_codes", "false");
+#if USE_PROMETHEUS
+ settings->setDefault("prometheus_listener_address", "127.0.0.1:30000");
+#endif
// Network
settings->setDefault("enable_ipv6", "true");
@@ -410,6 +417,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("remote_media", "");
settings->setDefault("debug_log_level", "action");
settings->setDefault("debug_log_size_max", "50");
+ settings->setDefault("chat_log_level", "error");
settings->setDefault("emergequeue_limit_total", "512");
settings->setDefault("emergequeue_limit_diskonly", "64");
settings->setDefault("emergequeue_limit_generate", "64");
@@ -456,6 +464,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("high_precision_fpu", "true");
settings->setDefault("enable_console", "false");
+ settings->setDefault("screen_dpi", "72");
// Altered settings for macOS
#if defined(__MACH__) && defined(__APPLE__)
@@ -469,7 +478,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("screen_h", "0");
settings->setDefault("fullscreen", "true");
settings->setDefault("touchtarget", "true");
- settings->setDefault("TMPFolder", porting::getDataPath("tmp" DIR_DELIM));
+ settings->setDefault("TMPFolder", porting::path_cache);
settings->setDefault("touchscreen_threshold","20");
settings->setDefault("fixed_virtual_joystick", "false");
settings->setDefault("virtual_joystick_triggers_aux", "false");
@@ -491,8 +500,8 @@ void set_default_settings(Settings *settings)
settings->setDefault("curl_verify_cert","false");
// Apply settings according to screen size
- float x_inches = ((double) porting::getDisplaySize().X /
- (160 * porting::getDisplayDensity()));
+ float x_inches = (float) porting::getDisplaySize().X /
+ (160.f * porting::getDisplayDensity());
if (x_inches < 3.7f) {
settings->setDefault("hud_scaling", "0.6");
@@ -508,8 +517,5 @@ void set_default_settings(Settings *settings)
settings->setDefault("mono_font_size", "14");
}
// Tablets >= 6.0 use non-Android defaults for these settings
-#else
- settings->setDefault("screen_dpi", "72");
#endif
}
-
diff --git a/src/emerge.cpp b/src/emerge.cpp
index fc1da4ee7..0ac26a682 100644
--- a/src/emerge.cpp
+++ b/src/emerge.cpp
@@ -42,7 +42,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "profiler.h"
#include "scripting_server.h"
#include "server.h"
-#include "serverobject.h"
#include "settings.h"
#include "voxel.h"
@@ -110,6 +109,28 @@ private:
VoxelArea *m_ignorevariable;
};
+EmergeParams::~EmergeParams()
+{
+ infostream << "EmergeParams: destroying " << this << std::endl;
+ // Delete everything that was cloned on creation of EmergeParams
+ delete biomemgr;
+ delete oremgr;
+ delete decomgr;
+ delete schemmgr;
+}
+
+EmergeParams::EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr,
+ const OreManager *oremgr, const DecorationManager *decomgr,
+ const SchematicManager *schemmgr) :
+ ndef(parent->ndef),
+ enable_mapgen_debug_info(parent->enable_mapgen_debug_info),
+ gen_notify_on(parent->gen_notify_on),
+ gen_notify_on_deco_ids(&parent->gen_notify_on_deco_ids),
+ biomemgr(biomemgr->clone()), oremgr(oremgr->clone()),
+ decomgr(decomgr->clone()), schemmgr(schemmgr->clone())
+{
+}
+
////
//// EmergeManager
////
@@ -136,9 +157,9 @@ EmergeManager::EmergeManager(Server *server)
nthreads = Thread::getNumberOfProcessors() - 2;
if (nthreads < 1)
nthreads = 1;
- verbosestream << "Using " << nthreads << " emerge threads." << std::endl;
m_qlimit_total = g_settings->getU16("emergequeue_limit_total");
+ // FIXME: these fallback values are probably not good
if (!g_settings->getU16NoEx("emergequeue_limit_diskonly", m_qlimit_diskonly))
m_qlimit_diskonly = nthreads * 5 + 1;
if (!g_settings->getU16NoEx("emergequeue_limit_generate", m_qlimit_generate))
@@ -184,14 +205,48 @@ EmergeManager::~EmergeManager()
}
+BiomeManager *EmergeManager::getWritableBiomeManager()
+{
+ FATAL_ERROR_IF(!m_mapgens.empty(),
+ "Writable managers can only be returned before mapgen init");
+ return biomemgr;
+}
+
+OreManager *EmergeManager::getWritableOreManager()
+{
+ FATAL_ERROR_IF(!m_mapgens.empty(),
+ "Writable managers can only be returned before mapgen init");
+ return oremgr;
+}
+
+DecorationManager *EmergeManager::getWritableDecorationManager()
+{
+ FATAL_ERROR_IF(!m_mapgens.empty(),
+ "Writable managers can only be returned before mapgen init");
+ return decomgr;
+}
+
+SchematicManager *EmergeManager::getWritableSchematicManager()
+{
+ FATAL_ERROR_IF(!m_mapgens.empty(),
+ "Writable managers can only be returned before mapgen init");
+ return schemmgr;
+}
+
+
void EmergeManager::initMapgens(MapgenParams *params)
{
FATAL_ERROR_IF(!m_mapgens.empty(), "Mapgen already initialised.");
mgparams = params;
- for (u32 i = 0; i != m_threads.size(); i++)
- m_mapgens.push_back(Mapgen::createMapgen(params->mgtype, params, this));
+ for (u32 i = 0; i != m_threads.size(); i++) {
+ EmergeParams *p = new EmergeParams(
+ this, biomemgr, oremgr, decomgr, schemmgr);
+ infostream << "EmergeManager: Created params " << p
+ << " for thread " << i << std::endl;
+ m_mapgens.push_back(Mapgen::createMapgen(params->mgtype, params, p));
+ }
}
@@ -201,8 +256,9 @@ Mapgen *EmergeManager::getCurrentMapgen()
return nullptr;
for (u32 i = 0; i != m_threads.size(); i++) {
- if (m_threads[i]->isCurrentThread())
- return m_threads[i]->m_mapgen;
+ EmergeThread *t = m_threads[i];
+ if (t->isRunning() && t->isCurrentThread())
+ return t->m_mapgen;
}
return nullptr;
@@ -588,8 +644,7 @@ MapBlock *EmergeThread::finishGen(v3s16 pos, BlockMakeData *bmdata,
/*
Clear generate notifier events
*/
- Mapgen *mg = m_emerge->getCurrentMapgen();
- mg->gennotify.clearEvents();
+ m_mapgen->gennotify.clearEvents();
EMERGE_DBG_OUT("ended up with: " << analyze_block(block));
diff --git a/src/emerge.h b/src/emerge.h
index df849e542..6f204666d 100644
--- a/src/emerge.h
+++ b/src/emerge.h
@@ -44,6 +44,7 @@ class OreManager;
class DecorationManager;
class SchematicManager;
class Server;
+class ModApiMapgen;
// Structure containing inputs/outputs for chunk generation
struct BlockMakeData {
@@ -86,7 +87,36 @@ struct BlockEmergeData {
EmergeCallbackList callbacks;
};
+class EmergeParams {
+ friend class EmergeManager;
+public:
+ EmergeParams() = delete;
+ ~EmergeParams();
+ DISABLE_CLASS_COPY(EmergeParams);
+
+ const NodeDefManager *ndef; // shared
+ bool enable_mapgen_debug_info;
+
+ u32 gen_notify_on;
+ const std::set<u32> *gen_notify_on_deco_ids; // shared
+
+ BiomeManager *biomemgr;
+ OreManager *oremgr;
+ DecorationManager *decomgr;
+ SchematicManager *schemmgr;
+
+private:
+ EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr,
+ const OreManager *oremgr, const DecorationManager *decomgr,
+ const SchematicManager *schemmgr);
+};
+
class EmergeManager {
+ /* The mod API needs unchecked access to allow:
+ * - using decomgr or oremgr to place decos/ores
+ * - using schemmgr to load and place schematics
+ */
+ friend class ModApiMapgen;
public:
const NodeDefManager *ndef;
bool enable_mapgen_debug_info;
@@ -106,17 +136,22 @@ public:
// Environment is not created until after script initialization.
MapSettingsManager *map_settings_mgr;
- // Managers of various map generation-related components
- BiomeManager *biomemgr;
- OreManager *oremgr;
- DecorationManager *decomgr;
- SchematicManager *schemmgr;
-
// Methods
EmergeManager(Server *server);
~EmergeManager();
DISABLE_CLASS_COPY(EmergeManager);
+ // no usage restrictions
+ const BiomeManager *getBiomeManager() const { return biomemgr; }
+ const OreManager *getOreManager() const { return oremgr; }
+ const DecorationManager *getDecorationManager() const { return decomgr; }
+ const SchematicManager *getSchematicManager() const { return schemmgr; }
+ // only usable before mapgen init
+ BiomeManager *getWritableBiomeManager();
+ OreManager *getWritableOreManager();
+ DecorationManager *getWritableDecorationManager();
+ SchematicManager *getWritableSchematicManager();
+
void initMapgens(MapgenParams *mgparams);
void startThreads();
@@ -160,6 +195,13 @@ private:
u16 m_qlimit_diskonly;
u16 m_qlimit_generate;
+ // Managers of various map generation-related components
+ // Note that each Mapgen gets a copy(!) of these to work with
+ BiomeManager *biomemgr;
+ OreManager *oremgr;
+ DecorationManager *decomgr;
+ SchematicManager *schemmgr;
+
// Requires m_queue_mutex held
EmergeThread *getOptimalThread();
diff --git a/src/environment.cpp b/src/environment.cpp
index 906f35219..6751f39e4 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "environment.h"
#include "collision.h"
#include "raycast.h"
-#include "serverobject.h"
#include "scripting_server.h"
#include "server.h"
#include "daynightratio.h"
@@ -83,6 +82,24 @@ float Environment::getTimeOfDayF()
return m_time_of_day_f;
}
+bool Environment::line_of_sight(v3f pos1, v3f pos2, v3s16 *p)
+{
+ // Iterate trough nodes on the line
+ voxalgo::VoxelLineIterator iterator(pos1 / BS, (pos2 - pos1) / BS);
+ do {
+ MapNode n = getMap().getNode(iterator.m_current_node_pos);
+
+ // Return non-air
+ if (n.param0 != CONTENT_AIR) {
+ if (p)
+ *p = iterator.m_current_node_pos;
+ return false;
+ }
+ iterator.next();
+ } while (iterator.m_current_index <= iterator.m_last_index);
+ return true;
+}
+
/*
Check if a node is pointable
*/
diff --git a/src/environment.h b/src/environment.h
index f568ba228..91c33ba15 100644
--- a/src/environment.h
+++ b/src/environment.h
@@ -77,6 +77,16 @@ public:
u32 getDayCount();
/*!
+ * Returns false if the given line intersects with a
+ * non-air node, true otherwise.
+ * \param pos1 start of the line
+ * \param pos2 end of the line
+ * \param p output, position of the first non-air node
+ * the line intersects
+ */
+ bool line_of_sight(v3f pos1, v3f pos2, v3s16 *p = nullptr);
+
+ /*!
* Gets the objects pointed by the shootline as
* pointed things.
* If this is a client environment, the local player
diff --git a/src/filesys.cpp b/src/filesys.cpp
index f61b39b94..0bc351669 100644
--- a/src/filesys.cpp
+++ b/src/filesys.cpp
@@ -691,6 +691,12 @@ std::string AbsolutePath(const std::string &path)
const char *GetFilenameFromPath(const char *path)
{
const char *filename = strrchr(path, DIR_DELIM_CHAR);
+ // Consistent with IsDirDelimiter this function handles '/' too
+ if (DIR_DELIM_CHAR != '/') {
+ const char *tmp = strrchr(path, '/');
+ if (tmp && tmp > filename)
+ filename = tmp;
+ }
return filename ? filename + 1 : path;
}
diff --git a/src/gameparams.h b/src/gameparams.h
index 28794a649..70b0ffcde 100644
--- a/src/gameparams.h
+++ b/src/gameparams.h
@@ -23,10 +23,29 @@ with this program; if not, write to the Free Software Foundation, Inc.,
struct SubgameSpec;
+// Information provided from "main"
struct GameParams
{
+ GameParams() = default;
+
u16 socket_port;
std::string world_path;
SubgameSpec game_spec;
bool is_dedicated_server;
};
+
+// Information processed by main menu
+struct GameStartData : GameParams
+{
+ GameStartData() = default;
+
+ bool isSinglePlayer() const { return address.empty() && !local_server; }
+
+ std::string name;
+ std::string password;
+ std::string address;
+ bool local_server;
+
+ // "world_path" must be kept in sync!
+ WorldSpec world_spec;
+};
diff --git a/src/genericobject.cpp b/src/genericobject.cpp
deleted file mode 100644
index 49d16001f..000000000
--- a/src/genericobject.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
-Minetest
-Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-#include "genericobject.h"
-#include <sstream>
-#include "util/serialize.h"
-
-std::string gob_cmd_set_properties(const ObjectProperties &prop)
-{
- std::ostringstream os(std::ios::binary);
- writeU8(os, GENERIC_CMD_SET_PROPERTIES);
- prop.serialize(os);
- return os.str();
-}
-
-ObjectProperties gob_read_set_properties(std::istream &is)
-{
- ObjectProperties prop;
- prop.deSerialize(is);
- return prop;
-}
-
-std::string gob_cmd_update_position(
- v3f position,
- v3f velocity,
- v3f acceleration,
- v3f rotation,
- bool do_interpolate,
- bool is_movement_end,
- f32 update_interval
-){
- std::ostringstream os(std::ios::binary);
- // command
- writeU8(os, GENERIC_CMD_UPDATE_POSITION);
- // pos
- writeV3F32(os, position);
- // velocity
- writeV3F32(os, velocity);
- // acceleration
- writeV3F32(os, acceleration);
- // rotation
- writeV3F32(os, rotation);
- // do_interpolate
- writeU8(os, do_interpolate);
- // is_end_position (for interpolation)
- writeU8(os, is_movement_end);
- // update_interval (for interpolation)
- writeF32(os, update_interval);
- return os.str();
-}
-
-std::string gob_cmd_set_texture_mod(const std::string &mod)
-{
- std::ostringstream os(std::ios::binary);
- // command
- writeU8(os, GENERIC_CMD_SET_TEXTURE_MOD);
- // parameters
- os<<serializeString(mod);
- return os.str();
-}
-
-std::string gob_cmd_set_sprite(
- v2s16 p,
- u16 num_frames,
- f32 framelength,
- bool select_horiz_by_yawpitch
-){
- std::ostringstream os(std::ios::binary);
- // command
- writeU8(os, GENERIC_CMD_SET_SPRITE);
- // parameters
- writeV2S16(os, p);
- writeU16(os, num_frames);
- writeF32(os, framelength);
- writeU8(os, select_horiz_by_yawpitch);
- return os.str();
-}
-
-std::string gob_cmd_punched(u16 result_hp)
-{
- std::ostringstream os(std::ios::binary);
- // command
- writeU8(os, GENERIC_CMD_PUNCHED);
- // result_hp
- writeU16(os, result_hp);
- return os.str();
-}
-
-std::string gob_cmd_update_armor_groups(const ItemGroupList &armor_groups)
-{
- std::ostringstream os(std::ios::binary);
- writeU8(os, GENERIC_CMD_UPDATE_ARMOR_GROUPS);
- writeU16(os, armor_groups.size());
- for (const auto &armor_group : armor_groups) {
- os<<serializeString(armor_group.first);
- writeS16(os, armor_group.second);
- }
- return os.str();
-}
-
-std::string gob_cmd_update_physics_override(float physics_override_speed, float physics_override_jump,
- float physics_override_gravity, bool sneak, bool sneak_glitch, bool new_move)
-{
- std::ostringstream os(std::ios::binary);
- // command
- writeU8(os, GENERIC_CMD_SET_PHYSICS_OVERRIDE);
- // parameters
- writeF32(os, physics_override_speed);
- writeF32(os, physics_override_jump);
- writeF32(os, physics_override_gravity);
- // these are sent inverted so we get true when the server sends nothing
- writeU8(os, !sneak);
- writeU8(os, !sneak_glitch);
- writeU8(os, !new_move);
- return os.str();
-}
-
-std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend, bool frame_loop)
-{
- std::ostringstream os(std::ios::binary);
- // command
- writeU8(os, GENERIC_CMD_SET_ANIMATION);
- // parameters
- writeV2F32(os, frames);
- writeF32(os, frame_speed);
- writeF32(os, frame_blend);
- // these are sent inverted so we get true when the server sends nothing
- writeU8(os, !frame_loop);
- return os.str();
-}
-
-std::string gob_cmd_update_animation_speed(float frame_speed)
-{
- std::ostringstream os(std::ios::binary);
- // command
- writeU8(os, GENERIC_CMD_SET_ANIMATION_SPEED);
- // parameters
- writeF32(os, frame_speed);
- return os.str();
-}
-
-std::string gob_cmd_update_bone_position(const std::string &bone, v3f position,
- v3f rotation)
-{
- std::ostringstream os(std::ios::binary);
- // command
- writeU8(os, GENERIC_CMD_SET_BONE_POSITION);
- // parameters
- os<<serializeString(bone);
- writeV3F32(os, position);
- writeV3F32(os, rotation);
- return os.str();
-}
-
-std::string gob_cmd_update_attachment(int parent_id, const std::string &bone,
- v3f position, v3f rotation)
-{
- std::ostringstream os(std::ios::binary);
- // command
- writeU8(os, GENERIC_CMD_ATTACH_TO);
- // parameters
- writeS16(os, parent_id);
- os<<serializeString(bone);
- writeV3F32(os, position);
- writeV3F32(os, rotation);
- return os.str();
-}
-
-std::string gob_cmd_update_nametag_attributes(video::SColor color)
-{
- std::ostringstream os(std::ios::binary);
- // command
- writeU8(os, GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES);
- // parameters
- writeU8(os, 1); // version for forward compatibility
- writeARGB8(os, color);
- return os.str();
-}
-
-std::string gob_cmd_update_infant(u16 id, u8 type,
- const std::string &client_initialization_data)
-{
- std::ostringstream os(std::ios::binary);
- // command
- writeU8(os, GENERIC_CMD_SPAWN_INFANT);
- // parameters
- writeU16(os, id);
- writeU8(os, type);
- os<<serializeLongString(client_initialization_data);
- return os.str();
-}
diff --git a/src/genericobject.h b/src/genericobject.h
deleted file mode 100644
index c83b310d1..000000000
--- a/src/genericobject.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-Minetest
-Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-#pragma once
-
-#include <string>
-#include "irrlichttypes_bloated.h"
-#include <iostream>
-#include "itemgroup.h"
-
-enum GenericCMD {
- GENERIC_CMD_SET_PROPERTIES,
- GENERIC_CMD_UPDATE_POSITION,
- GENERIC_CMD_SET_TEXTURE_MOD,
- GENERIC_CMD_SET_SPRITE,
- GENERIC_CMD_PUNCHED,
- GENERIC_CMD_UPDATE_ARMOR_GROUPS,
- GENERIC_CMD_SET_ANIMATION,
- GENERIC_CMD_SET_BONE_POSITION,
- GENERIC_CMD_ATTACH_TO,
- GENERIC_CMD_SET_PHYSICS_OVERRIDE,
- GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES,
- GENERIC_CMD_SPAWN_INFANT,
- GENERIC_CMD_SET_ANIMATION_SPEED
-};
-
-#include "object_properties.h"
-std::string gob_cmd_set_properties(const ObjectProperties &prop);
-ObjectProperties gob_read_set_properties(std::istream &is);
-
-std::string gob_cmd_update_position(
- v3f position,
- v3f velocity,
- v3f acceleration,
- v3f rotation,
- bool do_interpolate,
- bool is_movement_end,
- f32 update_interval
-);
-
-std::string gob_cmd_set_texture_mod(const std::string &mod);
-
-std::string gob_cmd_set_sprite(
- v2s16 p,
- u16 num_frames,
- f32 framelength,
- bool select_horiz_by_yawpitch
-);
-
-std::string gob_cmd_punched(u16 result_hp);
-
-std::string gob_cmd_update_armor_groups(const ItemGroupList &armor_groups);
-
-std::string gob_cmd_update_physics_override(float physics_override_speed,
- float physics_override_jump, float physics_override_gravity,
- bool sneak, bool sneak_glitch, bool new_move);
-
-std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend, bool frame_loop);
-
-std::string gob_cmd_update_animation_speed(float frame_speed);
-
-std::string gob_cmd_update_bone_position(const std::string &bone, v3f position,
- v3f rotation);
-
-std::string gob_cmd_update_attachment(int parent_id, const std::string &bone,
- v3f position, v3f rotation);
-
-std::string gob_cmd_update_nametag_attributes(video::SColor color);
-
-std::string gob_cmd_update_infant(u16 id, u8 type,
- const std::string &client_initialization_data);
diff --git a/src/gettext.cpp b/src/gettext.cpp
index 81621ba89..6818004df 100644
--- a/src/gettext.cpp
+++ b/src/gettext.cpp
@@ -217,7 +217,10 @@ void init_gettext(const char *path, const std::string &configured_language,
#endif
#endif
- static std::string name = lowercase(PROJECT_NAME);
+ std::string name = lowercase(PROJECT_NAME);
+ infostream << "Gettext: domainname=\"" << name
+ << "\" path=\"" << path << "\"" << std::endl;
+
bindtextdomain(name.c_str(), path);
textdomain(name.c_str());
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index 110a00595..147f445f4 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -16,6 +16,7 @@ set(gui_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/guiPasswordChange.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiPathSelectMenu.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiScrollBar.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/guiScrollContainer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiSkin.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiTable.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiHyperText.cpp
diff --git a/src/gui/StyleSpec.h b/src/gui/StyleSpec.h
index 999c1d237..67caf4f7b 100644
--- a/src/gui/StyleSpec.h
+++ b/src/gui/StyleSpec.h
@@ -18,8 +18,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "client/tile.h" // ITextureSource
+#include "client/fontengine.h"
+#include "debug.h"
#include "irrlichttypes_extrabloated.h"
#include "util/string.h"
+#include <algorithm>
#include <array>
#pragma once
@@ -31,25 +34,38 @@ public:
{
TEXTCOLOR,
BGCOLOR,
- BGCOLOR_HOVERED,
- BGCOLOR_PRESSED,
+ BGCOLOR_HOVERED, // Note: Deprecated property
+ BGCOLOR_PRESSED, // Note: Deprecated property
NOCLIP,
BORDER,
BGIMG,
- BGIMG_HOVERED,
+ BGIMG_HOVERED, // Note: Deprecated property
BGIMG_MIDDLE,
- BGIMG_PRESSED,
+ BGIMG_PRESSED, // Note: Deprecated property
FGIMG,
- FGIMG_HOVERED,
- FGIMG_PRESSED,
+ FGIMG_HOVERED, // Note: Deprecated property
+ FGIMG_PRESSED, // Note: Deprecated property
ALPHA,
+ CONTENT_OFFSET,
+ PADDING,
+ FONT,
+ FONT_SIZE,
NUM_PROPERTIES,
NONE
};
+ enum State
+ {
+ STATE_DEFAULT = 0,
+ STATE_HOVERED = 1 << 0,
+ STATE_PRESSED = 1 << 1,
+ NUM_STATES = 1 << 2,
+ STATE_INVALID = 1 << 3,
+ };
private:
std::array<bool, NUM_PROPERTIES> property_set{};
std::array<std::string, NUM_PROPERTIES> properties;
+ State state_map = STATE_DEFAULT;
public:
static Property GetPropertyByName(const std::string &name)
@@ -82,6 +98,14 @@ public:
return FGIMG_PRESSED;
} else if (name == "alpha") {
return ALPHA;
+ } else if (name == "content_offset") {
+ return CONTENT_OFFSET;
+ } else if (name == "padding") {
+ return PADDING;
+ } else if (name == "font") {
+ return FONT;
+ } else if (name == "font_size") {
+ return FONT_SIZE;
} else {
return NONE;
}
@@ -99,6 +123,49 @@ public:
property_set[prop] = true;
}
+ //! Parses a name and returns the corresponding state enum
+ static State getStateByName(const std::string &name)
+ {
+ if (name == "default") {
+ return STATE_DEFAULT;
+ } else if (name == "hovered") {
+ return STATE_HOVERED;
+ } else if (name == "pressed") {
+ return STATE_PRESSED;
+ } else {
+ return STATE_INVALID;
+ }
+ }
+
+ //! Gets the state that this style is intended for
+ State getState() const
+ {
+ return state_map;
+ }
+
+ //! Set the given state on this style
+ void addState(State state)
+ {
+ FATAL_ERROR_IF(state >= NUM_STATES, "Out-of-bounds state received");
+
+ state_map = static_cast<State>(state_map | state);
+ }
+
+ //! Using a list of styles mapped to state values, calculate the final
+ // combined style for a state by propagating values in its component states
+ static StyleSpec getStyleFromStatePropagation(const std::array<StyleSpec, NUM_STATES> &styles, State state)
+ {
+ StyleSpec temp = styles[StyleSpec::STATE_DEFAULT];
+ temp.state_map = state;
+ for (int i = StyleSpec::STATE_DEFAULT + 1; i <= state; i++) {
+ if ((state & i) != 0) {
+ temp = temp | styles[i];
+ }
+ }
+
+ return temp;
+ }
+
video::SColor getColor(Property prop, video::SColor def) const
{
const auto &val = properties[prop];
@@ -143,6 +210,70 @@ public:
return rect;
}
+ irr::core::vector2d<s32> getVector2i(Property prop, irr::core::vector2d<s32> def) const
+ {
+ const auto &val = properties[prop];
+ if (val.empty())
+ return def;
+
+ irr::core::vector2d<s32> vec;
+ if (!parseVector2i(val, &vec))
+ return def;
+
+ return vec;
+ }
+
+ irr::core::vector2d<s32> getVector2i(Property prop) const
+ {
+ const auto &val = properties[prop];
+ FATAL_ERROR_IF(val.empty(), "Unexpected missing property");
+
+ irr::core::vector2d<s32> vec;
+ parseVector2i(val, &vec);
+ return vec;
+ }
+
+ gui::IGUIFont *getFont() const
+ {
+ FontSpec spec(FONT_SIZE_UNSPECIFIED, FM_Standard, false, false);
+
+ const std::string &font = properties[FONT];
+ const std::string &size = properties[FONT_SIZE];
+
+ if (font.empty() && size.empty())
+ return nullptr;
+
+ std::vector<std::string> modes = split(font, ',');
+
+ for (size_t i = 0; i < modes.size(); i++) {
+ if (modes[i] == "normal")
+ spec.mode = FM_Standard;
+ else if (modes[i] == "mono")
+ spec.mode = FM_Mono;
+ else if (modes[i] == "bold")
+ spec.bold = true;
+ else if (modes[i] == "italic")
+ spec.italic = true;
+ }
+
+ if (!size.empty()) {
+ int calc_size = 1;
+
+ if (size[0] == '*') {
+ std::string new_size = size.substr(1); // Remove '*' (invalid for stof)
+ calc_size = stof(new_size) * g_fontengine->getFontSize(spec.mode);
+ } else if (size[0] == '+' || size[0] == '-') {
+ calc_size = stoi(size) + g_fontengine->getFontSize(spec.mode);
+ } else {
+ calc_size = stoi(size);
+ }
+
+ spec.size = (unsigned)std::min(std::max(calc_size, 1), 999);
+ }
+
+ return g_fontengine->getFont(spec);
+ }
+
video::ITexture *getTexture(Property prop, ISimpleTextureSource *tsrc,
video::ITexture *def) const
{
@@ -233,4 +364,29 @@ private:
return true;
}
+
+ bool parseVector2i(const std::string &value, irr::core::vector2d<s32> *parsed_vec) const
+ {
+ irr::core::vector2d<s32> vec;
+ std::vector<std::string> v_vector = split(value, ',');
+
+ if (v_vector.size() == 1) {
+ s32 x = stoi(v_vector[0]);
+ vec.X = x;
+ vec.Y = x;
+ } else if (v_vector.size() == 2) {
+ s32 x = stoi(v_vector[0]);
+ s32 y = stoi(v_vector[1]);
+ vec.X = x;
+ vec.Y = y;
+ } else {
+ warningstream << "Invalid vector2d string format: \"" << value
+ << "\"" << std::endl;
+ return false;
+ }
+
+ *parsed_vec = vec;
+
+ return true;
+ }
};
diff --git a/src/gui/guiButton.cpp b/src/gui/guiButton.cpp
index 4c16ee237..e0d6337cd 100644
--- a/src/gui/guiButton.cpp
+++ b/src/gui/guiButton.cpp
@@ -14,6 +14,7 @@
#include "irrlicht_changes/static_text.h"
#include "porting.h"
#include "StyleSpec.h"
+#include "util/numeric.h"
using namespace irr;
using namespace gui;
@@ -26,14 +27,15 @@ using namespace gui;
//! constructor
GUIButton::GUIButton(IGUIEnvironment* environment, IGUIElement* parent,
- s32 id, core::rect<s32> rectangle, bool noclip)
+ s32 id, core::rect<s32> rectangle, ISimpleTextureSource *tsrc,
+ bool noclip)
: IGUIButton(environment, parent, id, rectangle),
SpriteBank(0), OverrideFont(0),
OverrideColorEnabled(false), OverrideColor(video::SColor(101,255,255,255)),
ClickTime(0), HoverTime(0), FocusTime(0),
ClickShiftState(false), ClickControlState(false),
IsPushButton(false), Pressed(false),
- UseAlphaChannel(false), DrawBorder(true), ScaleImage(false)
+ UseAlphaChannel(false), DrawBorder(true), ScaleImage(false), TSrc(tsrc)
{
setNotClipped(noclip);
@@ -44,14 +46,6 @@ GUIButton::GUIButton(IGUIEnvironment* environment, IGUIElement* parent,
// PATCH
for (size_t i = 0; i < 4; i++) {
Colors[i] = Environment->getSkin()->getColor((EGUI_DEFAULT_COLOR)i);
- HoveredColors[i] = irr::video::SColor(Colors[i].getAlpha(),
- core::clamp<u32>(Colors[i].getRed() * COLOR_HOVERED_MOD, 0, 255),
- core::clamp<u32>(Colors[i].getGreen() * COLOR_HOVERED_MOD, 0, 255),
- core::clamp<u32>(Colors[i].getBlue() * COLOR_HOVERED_MOD, 0, 255));
- PressedColors[i] = irr::video::SColor(Colors[i].getAlpha(),
- core::clamp<u32>(Colors[i].getRed() * COLOR_PRESSED_MOD, 0, 255),
- core::clamp<u32>(Colors[i].getGreen() * COLOR_PRESSED_MOD, 0, 255),
- core::clamp<u32>(Colors[i].getBlue() * COLOR_PRESSED_MOD, 0, 255));
}
StaticText = gui::StaticText::add(Environment, Text.c_str(), core::rect<s32>(0,0,rectangle.getWidth(),rectangle.getHeight()), false, false, this, id);
StaticText->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER);
@@ -262,6 +256,13 @@ void GUIButton::draw()
return;
// PATCH
+ // Track hovered state, if it has changed then we need to update the style.
+ bool hovered = isHovered();
+ if (hovered != WasHovered) {
+ WasHovered = hovered;
+ setFromState();
+ }
+
GUISkin* skin = dynamic_cast<GUISkin*>(Environment->getSkin());
video::IVideoDriver* driver = Environment->getVideoDriver();
// END PATCH
@@ -271,21 +272,24 @@ void GUIButton::draw()
if (!Pressed)
{
// PATCH
- skin->drawColored3DButtonPaneStandard(this, AbsoluteRect, &AbsoluteClippingRect,
- isHovered() ? HoveredColors : Colors);
+ skin->drawColored3DButtonPaneStandard(this, AbsoluteRect,
+ &AbsoluteClippingRect, Colors);
// END PATCH
}
else
{
// PATCH
- skin->drawColored3DButtonPanePressed(this,
- AbsoluteRect, &AbsoluteClippingRect, PressedColors);
+ skin->drawColored3DButtonPanePressed(this, AbsoluteRect,
+ &AbsoluteClippingRect, Colors);
// END PATCH
}
}
const core::position2di buttonCenter(AbsoluteRect.getCenter());
- EGUI_BUTTON_IMAGE_STATE imageState = getImageState(Pressed);
+ // PATCH
+ // The image changes based on the state, so we use the default every time.
+ EGUI_BUTTON_IMAGE_STATE imageState = EGBIS_IMAGE_UP;
+ // END PATCH
if ( ButtonImages[(u32)imageState].Texture )
{
core::position2d<s32> pos(buttonCenter);
@@ -548,18 +552,6 @@ void GUIButton::setPressedImage(video::ITexture* image, const core::rect<s32>& p
setImage(gui::EGBIS_IMAGE_DOWN, image, pos);
}
-void GUIButton::setHoveredImage(video::ITexture* image)
-{
- setImage(gui::EGBIS_IMAGE_UP_MOUSEOVER, image);
- setImage(gui::EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER, image);
-}
-
-void GUIButton::setHoveredImage(video::ITexture* image, const core::rect<s32>& pos)
-{
- setImage(gui::EGBIS_IMAGE_UP_MOUSEOVER, image, pos);
- setImage(gui::EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER, image, pos);
-}
-
//! Sets the text displayed by the button
void GUIButton::setText(const wchar_t* text)
{
@@ -600,24 +592,7 @@ void GUIButton::setPressed(bool pressed)
{
ClickTime = porting::getTimeMs();
Pressed = pressed;
-
- GUISkin* skin = dynamic_cast<GUISkin*>(Environment->getSkin());
-
- for(IGUIElement *child : getChildren())
- {
- core::rect<s32> originalRect = child->getRelativePosition();
- if (Pressed) {
- child->setRelativePosition(originalRect +
- core::dimension2d<s32>(
- skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X),
- skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y)));
- } else {
- child->setRelativePosition(originalRect -
- core::dimension2d<s32>(
- skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X),
- skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y)));
- }
- }
+ setFromState();
}
}
@@ -729,10 +704,12 @@ void GUIButton::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWri
}
// PATCH
-GUIButton* GUIButton::addButton(IGUIEnvironment *environment, const core::rect<s32>& rectangle,
- IGUIElement* parent, s32 id, const wchar_t* text, const wchar_t *tooltiptext)
+GUIButton* GUIButton::addButton(IGUIEnvironment *environment,
+ const core::rect<s32>& rectangle, ISimpleTextureSource *tsrc,
+ IGUIElement* parent, s32 id, const wchar_t* text,
+ const wchar_t *tooltiptext)
{
- GUIButton* button = new GUIButton(environment, parent ? parent : environment->getRootGUIElement(), id, rectangle);
+ GUIButton* button = new GUIButton(environment, parent ? parent : environment->getRootGUIElement(), id, rectangle, tsrc);
if (text)
button->setText(text);
@@ -749,76 +726,112 @@ void GUIButton::setColor(video::SColor color)
for (size_t i = 0; i < 4; i++) {
video::SColor base = Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i);
Colors[i] = base.getInterpolated(color, d);
- HoveredColors[i] = irr::video::SColor(Colors[i].getAlpha(),
- core::clamp<u32>(Colors[i].getRed() * COLOR_HOVERED_MOD, 0, 255),
- core::clamp<u32>(Colors[i].getGreen() * COLOR_HOVERED_MOD, 0, 255),
- core::clamp<u32>(Colors[i].getBlue() * COLOR_HOVERED_MOD, 0, 255));
- PressedColors[i] = irr::video::SColor(Colors[i].getAlpha(),
- core::clamp<u32>(Colors[i].getRed() * COLOR_PRESSED_MOD, 0, 255),
- core::clamp<u32>(Colors[i].getGreen() * COLOR_PRESSED_MOD, 0, 255),
- core::clamp<u32>(Colors[i].getBlue() * COLOR_PRESSED_MOD, 0, 255));
}
}
-void GUIButton::setHoveredColor(video::SColor color)
-{
- float d = 0.65f;
- for (size_t i = 0; i < 4; i++) {
- video::SColor base = Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i);
- HoveredColors[i] = base.getInterpolated(color, d);
- }
-}
-void GUIButton::setPressedColor(video::SColor color)
+
+//! Set element properties from a StyleSpec corresponding to the button state
+void GUIButton::setFromState()
{
- float d = 0.65f;
- for (size_t i = 0; i < 4; i++) {
- video::SColor base = Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i);
- PressedColors[i] = base.getInterpolated(color, d);
- }
+ StyleSpec::State state = StyleSpec::STATE_DEFAULT;
+
+ if (isPressed())
+ state = static_cast<StyleSpec::State>(state | StyleSpec::STATE_PRESSED);
+
+ if (isHovered())
+ state = static_cast<StyleSpec::State>(state | StyleSpec::STATE_HOVERED);
+
+ setFromStyle(StyleSpec::getStyleFromStatePropagation(Styles, state));
}
//! Set element properties from a StyleSpec
-void GUIButton::setFromStyle(const StyleSpec& style, ISimpleTextureSource *tsrc)
+void GUIButton::setFromStyle(const StyleSpec& style)
{
+ bool hovered = (style.getState() & StyleSpec::STATE_HOVERED) != 0;
+ bool pressed = (style.getState() & StyleSpec::STATE_PRESSED) != 0;
+
if (style.isNotDefault(StyleSpec::BGCOLOR)) {
+
setColor(style.getColor(StyleSpec::BGCOLOR));
- }
- if (style.isNotDefault(StyleSpec::BGCOLOR_HOVERED)) {
- setHoveredColor(style.getColor(StyleSpec::BGCOLOR_HOVERED));
- }
- if (style.isNotDefault(StyleSpec::BGCOLOR_PRESSED)) {
- setPressedColor(style.getColor(StyleSpec::BGCOLOR_PRESSED));
+
+ // If we have a propagated hover/press color, we need to automatically
+ // lighten/darken it
+ if (!Styles[style.getState()].isNotDefault(StyleSpec::BGCOLOR)) {
+ for (size_t i = 0; i < 4; i++) {
+ if (pressed) {
+ Colors[i] = multiplyColorValue(Colors[i], COLOR_PRESSED_MOD);
+ } else if (hovered) {
+ Colors[i] = multiplyColorValue(Colors[i], COLOR_HOVERED_MOD);
+ }
+ }
+ }
+
+ } else {
+ for (size_t i = 0; i < 4; i++) {
+ video::SColor base =
+ Environment->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i);
+ if (pressed) {
+ Colors[i] = multiplyColorValue(base, COLOR_PRESSED_MOD);
+ } else if (hovered) {
+ Colors[i] = multiplyColorValue(base, COLOR_HOVERED_MOD);
+ } else {
+ Colors[i] = base;
+ }
+ }
}
if (style.isNotDefault(StyleSpec::TEXTCOLOR)) {
setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR));
+ } else {
+ setOverrideColor(video::SColor(255,255,255,255));
+ OverrideColorEnabled = false;
}
- setNotClipped(style.getBool(StyleSpec::NOCLIP, isNotClipped()));
- setDrawBorder(style.getBool(StyleSpec::BORDER, DrawBorder));
+ setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
+ setDrawBorder(style.getBool(StyleSpec::BORDER, true));
setUseAlphaChannel(style.getBool(StyleSpec::ALPHA, true));
+ setOverrideFont(style.getFont());
- const core::position2di buttonCenter(AbsoluteRect.getCenter());
- core::position2d<s32> geom(buttonCenter);
if (style.isNotDefault(StyleSpec::BGIMG)) {
- video::ITexture *texture = style.getTexture(StyleSpec::BGIMG, tsrc);
-
+ video::ITexture *texture = style.getTexture(StyleSpec::BGIMG,
+ getTextureSource());
setImage(guiScalingImageButton(
- Environment->getVideoDriver(), texture, geom.X, geom.Y));
+ Environment->getVideoDriver(), texture,
+ AbsoluteRect.getWidth(), AbsoluteRect.getHeight()));
setScaleImage(true);
+ } else {
+ setImage(nullptr);
}
- if (style.isNotDefault(StyleSpec::BGIMG_HOVERED)) {
- video::ITexture *hovered_texture = style.getTexture(StyleSpec::BGIMG_HOVERED, tsrc);
- setHoveredImage(guiScalingImageButton(
- Environment->getVideoDriver(), hovered_texture, geom.X, geom.Y));
- setScaleImage(true);
- }
- if (style.isNotDefault(StyleSpec::BGIMG_PRESSED)) {
- video::ITexture *pressed_texture = style.getTexture(StyleSpec::BGIMG_PRESSED, tsrc);
+ BgMiddle = style.getRect(StyleSpec::BGIMG_MIDDLE, BgMiddle);
- setPressedImage(guiScalingImageButton(
- Environment->getVideoDriver(), pressed_texture, geom.X, geom.Y));
- setScaleImage(true);
+ // Child padding and offset
+ Padding = style.getRect(StyleSpec::PADDING, core::rect<s32>());
+ Padding = core::rect<s32>(
+ Padding.UpperLeftCorner + BgMiddle.UpperLeftCorner,
+ Padding.LowerRightCorner + BgMiddle.LowerRightCorner);
+
+ GUISkin* skin = dynamic_cast<GUISkin*>(Environment->getSkin());
+ core::vector2d<s32> defaultPressOffset(
+ skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X),
+ skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y));
+ ContentOffset = style.getVector2i(StyleSpec::CONTENT_OFFSET, isPressed()
+ ? defaultPressOffset
+ : core::vector2d<s32>(0));
+
+ core::rect<s32> childBounds(
+ Padding.UpperLeftCorner.X + ContentOffset.X,
+ Padding.UpperLeftCorner.Y + ContentOffset.Y,
+ AbsoluteRect.getWidth() + Padding.LowerRightCorner.X + ContentOffset.X,
+ AbsoluteRect.getHeight() + Padding.LowerRightCorner.Y + ContentOffset.Y);
+
+ for (IGUIElement *child : getChildren()) {
+ child->setRelativePosition(childBounds);
}
- BgMiddle = style.getRect(StyleSpec::BGIMG_MIDDLE, BgMiddle);
+}
+
+//! Set the styles used for each state
+void GUIButton::setStyles(const std::array<StyleSpec, StyleSpec::NUM_STATES>& styles)
+{
+ Styles = styles;
+ setFromState();
}
// END PATCH
diff --git a/src/gui/guiButton.h b/src/gui/guiButton.h
index 3d1f98c32..95fa1a2a1 100644
--- a/src/gui/guiButton.h
+++ b/src/gui/guiButton.h
@@ -13,6 +13,7 @@
#include "ITexture.h"
#include "SColor.h"
#include "guiSkin.h"
+#include "StyleSpec.h"
using namespace irr;
@@ -67,7 +68,6 @@ using namespace irr;
#endif
class ISimpleTextureSource;
-class StyleSpec;
class GUIButton : public gui::IGUIButton
{
@@ -75,7 +75,8 @@ public:
//! constructor
GUIButton(gui::IGUIEnvironment* environment, gui::IGUIElement* parent,
- s32 id, core::rect<s32> rectangle, bool noclip=false);
+ s32 id, core::rect<s32> rectangle, ISimpleTextureSource *tsrc,
+ bool noclip=false);
//! destructor
virtual ~GUIButton();
@@ -125,16 +126,10 @@ public:
//! Sets an image which should be displayed on the button when it is in pressed state.
virtual void setPressedImage(video::ITexture* image, const core::rect<s32>& pos) override;
- //! Sets an image which should be displayed on the button when it is in hovered state.
- virtual void setHoveredImage(video::ITexture* image=nullptr);
-
//! Sets the text displayed by the button
virtual void setText(const wchar_t* text) override;
// END PATCH
- //! Sets an image which should be displayed on the button when it is in hovered state.
- virtual void setHoveredImage(video::ITexture* image, const core::rect<s32>& pos);
-
//! Sets the sprite bank used by the button
virtual void setSpriteBank(gui::IGUISpriteBank* bank=0) override;
@@ -225,22 +220,29 @@ public:
void setColor(video::SColor color);
// PATCH
- void setHoveredColor(video::SColor color);
- void setPressedColor(video::SColor color);
+ //! Set element properties from a StyleSpec corresponding to the button state
+ void setFromState();
//! Set element properties from a StyleSpec
- virtual void setFromStyle(const StyleSpec& style, ISimpleTextureSource *tsrc);
+ virtual void setFromStyle(const StyleSpec& style);
+
+ //! Set the styles used for each state
+ void setStyles(const std::array<StyleSpec, StyleSpec::NUM_STATES>& styles);
// END PATCH
//! Do not drop returned handle
- static GUIButton* addButton(gui::IGUIEnvironment *environment, const core::rect<s32>& rectangle,
- IGUIElement* parent, s32 id, const wchar_t* text, const wchar_t *tooltiptext=L"");
+ static GUIButton* addButton(gui::IGUIEnvironment *environment,
+ const core::rect<s32>& rectangle, ISimpleTextureSource *tsrc,
+ IGUIElement* parent, s32 id, const wchar_t* text,
+ const wchar_t *tooltiptext=L"");
protected:
void drawSprite(gui::EGUI_BUTTON_STATE state, u32 startTime, const core::position2di& center);
gui::EGUI_BUTTON_IMAGE_STATE getImageState(bool pressed) const;
+ ISimpleTextureSource *getTextureSource() { return TSrc; }
+
struct ButtonImage
{
ButtonImage() : Texture(0), SourceRect(core::rect<s32>(0,0,0,0))
@@ -308,6 +310,8 @@ private:
ButtonImage ButtonImages[gui::EGBIS_COUNT];
+ std::array<StyleSpec, StyleSpec::NUM_STATES> Styles;
+
gui::IGUIFont* OverrideFont;
bool OverrideColorEnabled;
@@ -326,11 +330,13 @@ private:
video::SColor Colors[4];
// PATCH
- video::SColor HoveredColors[4];
- video::SColor PressedColors[4];
+ bool WasHovered = false;
+ ISimpleTextureSource *TSrc;
gui::IGUIStaticText *StaticText;
core::rect<s32> BgMiddle;
+ core::rect<s32> Padding;
+ core::vector2d<s32> ContentOffset;
// END PATCH
};
diff --git a/src/gui/guiButtonImage.cpp b/src/gui/guiButtonImage.cpp
index 02d920277..b507ffece 100644
--- a/src/gui/guiButtonImage.cpp
+++ b/src/gui/guiButtonImage.cpp
@@ -30,8 +30,9 @@ using namespace irr;
using namespace gui;
GUIButtonImage::GUIButtonImage(gui::IGUIEnvironment *environment,
- gui::IGUIElement *parent, s32 id, core::rect<s32> rectangle, bool noclip)
- : GUIButton (environment, parent, id, rectangle, noclip)
+ gui::IGUIElement *parent, s32 id, core::rect<s32> rectangle,
+ ISimpleTextureSource *tsrc, bool noclip)
+ : GUIButton (environment, parent, id, rectangle, tsrc, noclip)
{
m_image = Environment->addImage(
core::rect<s32>(0,0,rectangle.getWidth(),rectangle.getHeight()), this);
@@ -39,100 +40,37 @@ GUIButtonImage::GUIButtonImage(gui::IGUIEnvironment *environment,
sendToBack(m_image);
}
-bool GUIButtonImage::OnEvent(const SEvent& event)
-{
- bool result = GUIButton::OnEvent(event);
-
- EGUI_BUTTON_IMAGE_STATE imageState = getImageState(isPressed(), m_foreground_images);
- video::ITexture *texture = m_foreground_images[(u32)imageState].Texture;
- if (texture != nullptr)
- {
- m_image->setImage(texture);
- }
-
- m_image->setVisible(texture != nullptr);
-
- return result;
-}
-
-void GUIButtonImage::setForegroundImage(EGUI_BUTTON_IMAGE_STATE state,
- video::ITexture *image, const core::rect<s32> &sourceRect)
+void GUIButtonImage::setForegroundImage(video::ITexture *image)
{
- if (state >= EGBIS_COUNT)
+ if (image == m_foreground_image)
return;
- if (image)
+ if (image != nullptr)
image->grab();
- u32 stateIdx = (u32)state;
- if (m_foreground_images[stateIdx].Texture)
- m_foreground_images[stateIdx].Texture->drop();
-
- m_foreground_images[stateIdx].Texture = image;
- m_foreground_images[stateIdx].SourceRect = sourceRect;
-
- EGUI_BUTTON_IMAGE_STATE imageState = getImageState(isPressed(), m_foreground_images);
- if (imageState == stateIdx)
- m_image->setImage(image);
-}
-
-void GUIButtonImage::setForegroundImage(video::ITexture *image)
-{
- setForegroundImage(gui::EGBIS_IMAGE_UP, image);
-}
-
-void GUIButtonImage::setForegroundImage(video::ITexture *image, const core::rect<s32> &pos)
-{
- setForegroundImage(gui::EGBIS_IMAGE_UP, image, pos);
-}
-
-void GUIButtonImage::setPressedForegroundImage(video::ITexture *image)
-{
- setForegroundImage(gui::EGBIS_IMAGE_DOWN, image);
-}
+ if (m_foreground_image != nullptr)
+ m_foreground_image->drop();
-void GUIButtonImage::setPressedForegroundImage(video::ITexture *image, const core::rect<s32> &pos)
-{
- setForegroundImage(gui::EGBIS_IMAGE_DOWN, image, pos);
+ m_foreground_image = image;
+ m_image->setImage(image);
}
-void GUIButtonImage::setHoveredForegroundImage(video::ITexture *image)
+//! Set element properties from a StyleSpec
+void GUIButtonImage::setFromStyle(const StyleSpec& style)
{
- setForegroundImage(gui::EGBIS_IMAGE_UP_MOUSEOVER, image);
- setForegroundImage(gui::EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER, image);
-}
-
-void GUIButtonImage::setHoveredForegroundImage(video::ITexture *image, const core::rect<s32> &pos)
-{
- setForegroundImage(gui::EGBIS_IMAGE_UP_MOUSEOVER, image, pos);
- setForegroundImage(gui::EGBIS_IMAGE_UP_FOCUSED_MOUSEOVER, image, pos);
-}
-
-void GUIButtonImage::setFromStyle(const StyleSpec &style, ISimpleTextureSource *tsrc)
-{
- GUIButton::setFromStyle(style, tsrc);
+ GUIButton::setFromStyle(style);
video::IVideoDriver *driver = Environment->getVideoDriver();
- const core::position2di buttonCenter(AbsoluteRect.getCenter());
- core::position2d<s32> geom(buttonCenter);
if (style.isNotDefault(StyleSpec::FGIMG)) {
- video::ITexture *texture = style.getTexture(StyleSpec::FGIMG, tsrc);
-
- setForegroundImage(guiScalingImageButton(driver, texture, geom.X, geom.Y));
- setScaleImage(true);
- }
- if (style.isNotDefault(StyleSpec::FGIMG_HOVERED)) {
- video::ITexture *hovered_texture = style.getTexture(StyleSpec::FGIMG_HOVERED, tsrc);
-
- setHoveredForegroundImage(guiScalingImageButton(driver, hovered_texture, geom.X, geom.Y));
- setScaleImage(true);
- }
- if (style.isNotDefault(StyleSpec::FGIMG_PRESSED)) {
- video::ITexture *pressed_texture = style.getTexture(StyleSpec::FGIMG_PRESSED, tsrc);
+ video::ITexture *texture = style.getTexture(StyleSpec::FGIMG,
+ getTextureSource());
- setPressedForegroundImage(guiScalingImageButton(driver, pressed_texture, geom.X, geom.Y));
+ setForegroundImage(guiScalingImageButton(driver, texture,
+ AbsoluteRect.getWidth(), AbsoluteRect.getHeight()));
setScaleImage(true);
+ } else {
+ setForegroundImage(nullptr);
}
}
@@ -143,11 +81,12 @@ void GUIButtonImage::setScaleImage(bool scaleImage)
}
GUIButtonImage *GUIButtonImage::addButton(IGUIEnvironment *environment,
- const core::rect<s32> &rectangle, IGUIElement *parent, s32 id,
- const wchar_t *text, const wchar_t *tooltiptext)
+ const core::rect<s32> &rectangle, ISimpleTextureSource *tsrc,
+ IGUIElement *parent, s32 id, const wchar_t *text,
+ const wchar_t *tooltiptext)
{
GUIButtonImage *button = new GUIButtonImage(environment,
- parent ? parent : environment->getRootGUIElement(), id, rectangle);
+ parent ? parent : environment->getRootGUIElement(), id, rectangle, tsrc);
if (text)
button->setText(text);
diff --git a/src/gui/guiButtonImage.h b/src/gui/guiButtonImage.h
index 15901ee5d..59a25b4f0 100644
--- a/src/gui/guiButtonImage.h
+++ b/src/gui/guiButtonImage.h
@@ -17,6 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#pragma once
+
#include "guiButton.h"
#include "IGUIButton.h"
@@ -27,33 +29,23 @@ class GUIButtonImage : public GUIButton
public:
//! constructor
GUIButtonImage(gui::IGUIEnvironment *environment, gui::IGUIElement *parent,
- s32 id, core::rect<s32> rectangle, bool noclip = false);
-
- virtual bool OnEvent(const SEvent& event) override;
-
- void setForegroundImage(gui::EGUI_BUTTON_IMAGE_STATE state,
- video::ITexture *image = nullptr,
- const core::rect<s32> &sourceRect = core::rect<s32>(0, 0, 0, 0));
+ s32 id, core::rect<s32> rectangle, ISimpleTextureSource *tsrc,
+ bool noclip = false);
void setForegroundImage(video::ITexture *image = nullptr);
- void setForegroundImage(video::ITexture *image, const core::rect<s32> &pos);
-
- void setPressedForegroundImage(video::ITexture *image = nullptr);
- void setPressedForegroundImage(video::ITexture *image, const core::rect<s32> &pos);
-
- void setHoveredForegroundImage(video::ITexture *image = nullptr);
- void setHoveredForegroundImage(video::ITexture *image, const core::rect<s32> &pos);
- virtual void setFromStyle(const StyleSpec &style, ISimpleTextureSource *tsrc) override;
+ //! Set element properties from a StyleSpec
+ virtual void setFromStyle(const StyleSpec& style) override;
virtual void setScaleImage(bool scaleImage=true) override;
//! Do not drop returned handle
static GUIButtonImage *addButton(gui::IGUIEnvironment *environment,
- const core::rect<s32> &rectangle, IGUIElement *parent, s32 id,
- const wchar_t *text, const wchar_t *tooltiptext = L"");
+ const core::rect<s32> &rectangle, ISimpleTextureSource *tsrc,
+ IGUIElement *parent, s32 id, const wchar_t *text,
+ const wchar_t *tooltiptext = L"");
private:
- ButtonImage m_foreground_images[gui::EGBIS_COUNT];
+ video::ITexture *m_foreground_image = nullptr;
gui::IGUIImage *m_image;
};
diff --git a/src/gui/guiButtonItemImage.cpp b/src/gui/guiButtonItemImage.cpp
index 5c48b2acd..d8b9042ac 100644
--- a/src/gui/guiButtonItemImage.cpp
+++ b/src/gui/guiButtonItemImage.cpp
@@ -28,9 +28,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
using namespace irr;
using namespace gui;
-GUIButtonItemImage::GUIButtonItemImage(gui::IGUIEnvironment *environment, gui::IGUIElement *parent,
- s32 id, core::rect<s32> rectangle, std::string item, Client *client, bool noclip)
- : GUIButton (environment, parent, id, rectangle, noclip)
+GUIButtonItemImage::GUIButtonItemImage(gui::IGUIEnvironment *environment,
+ gui::IGUIElement *parent, s32 id, core::rect<s32> rectangle,
+ ISimpleTextureSource *tsrc, std::string item, Client *client,
+ bool noclip)
+ : GUIButton (environment, parent, id, rectangle, tsrc, noclip)
{
m_image = new GUIItemImage(environment, this, id,
core::rect<s32>(0,0,rectangle.getWidth(),rectangle.getHeight()),
@@ -42,12 +44,13 @@ GUIButtonItemImage::GUIButtonItemImage(gui::IGUIEnvironment *environment, gui::I
}
GUIButtonItemImage *GUIButtonItemImage::addButton(IGUIEnvironment *environment,
- const core::rect<s32> &rectangle, IGUIElement *parent, s32 id,
- const wchar_t *text, std::string item, Client *client)
+ const core::rect<s32> &rectangle, ISimpleTextureSource *tsrc,
+ IGUIElement *parent, s32 id, const wchar_t *text, std::string item,
+ Client *client)
{
GUIButtonItemImage *button = new GUIButtonItemImage(environment,
parent ? parent : environment->getRootGUIElement(),
- id, rectangle, item, client);
+ id, rectangle, tsrc, item, client);
if (text)
button->setText(text);
diff --git a/src/gui/guiButtonItemImage.h b/src/gui/guiButtonItemImage.h
index 0a61874da..aad923bda 100644
--- a/src/gui/guiButtonItemImage.h
+++ b/src/gui/guiButtonItemImage.h
@@ -17,6 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#pragma once
+
#include "guiButton.h"
#include "IGUIButton.h"
@@ -30,13 +32,14 @@ class GUIButtonItemImage : public GUIButton
public:
//! constructor
GUIButtonItemImage(gui::IGUIEnvironment *environment, gui::IGUIElement *parent,
- s32 id, core::rect<s32> rectangle, std::string item,
- Client *client, bool noclip = false);
+ s32 id, core::rect<s32> rectangle, ISimpleTextureSource *tsrc,
+ std::string item, Client *client, bool noclip = false);
//! Do not drop returned handle
static GUIButtonItemImage *addButton(gui::IGUIEnvironment *environment,
- const core::rect<s32> &rectangle, IGUIElement *parent, s32 id,
- const wchar_t *text, std::string item, Client *client);
+ const core::rect<s32> &rectangle, ISimpleTextureSource *tsrc,
+ IGUIElement *parent, s32 id, const wchar_t *text, std::string item,
+ Client *client);
private:
std::string m_item_name;
diff --git a/src/gui/guiChatConsole.cpp b/src/gui/guiChatConsole.cpp
index e67fae3c6..8de00c12f 100644
--- a/src/gui/guiChatConsole.cpp
+++ b/src/gui/guiChatConsole.cpp
@@ -74,7 +74,9 @@ GUIChatConsole::GUIChatConsole(
m_background_color.setBlue(clamp_u8(myround(console_color.Z)));
}
- m_font = g_fontengine->getFont(FONT_SIZE_UNSPECIFIED, FM_Mono);
+ u16 chat_font_size = g_settings->getU16("chat_font_size");
+ m_font = g_fontengine->getFont(chat_font_size != 0 ?
+ chat_font_size : FONT_SIZE_UNSPECIFIED, FM_Mono);
if (!m_font) {
errorstream << "GUIChatConsole: Unable to load mono font" << std::endl;
diff --git a/src/gui/guiConfirmRegistration.cpp b/src/gui/guiConfirmRegistration.cpp
index 0d8bdf54e..55c111df8 100644
--- a/src/gui/guiConfirmRegistration.cpp
+++ b/src/gui/guiConfirmRegistration.cpp
@@ -40,10 +40,10 @@ const int ID_message = 266;
GUIConfirmRegistration::GUIConfirmRegistration(gui::IGUIEnvironment *env,
gui::IGUIElement *parent, s32 id, IMenuManager *menumgr, Client *client,
const std::string &playername, const std::string &password,
- bool *aborted) :
+ bool *aborted, ISimpleTextureSource *tsrc) :
GUIModalMenu(env, parent, id, menumgr),
m_client(client), m_playername(playername), m_password(password),
- m_aborted(aborted)
+ m_aborted(aborted), m_tsrc(tsrc)
{
#ifdef __ANDROID__
m_touchscreen_visible = false;
@@ -130,14 +130,14 @@ void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
core::rect<s32> rect2(0, 0, 230 * s, 35 * s);
rect2 = rect2 + v2s32(size.X / 2 - 220 * s, ypos);
text = wgettext("Register and Join");
- GUIButton::addButton(Environment, rect2, this, ID_confirm, text);
+ GUIButton::addButton(Environment, rect2, m_tsrc, this, ID_confirm, text);
delete[] text;
}
{
core::rect<s32> rect2(0, 0, 120 * s, 35 * s);
rect2 = rect2 + v2s32(size.X / 2 + 70 * s, ypos);
text = wgettext("Cancel");
- GUIButton::addButton(Environment, rect2, this, ID_cancel, text);
+ GUIButton::addButton(Environment, rect2, m_tsrc, this, ID_cancel, text);
delete[] text;
}
{
@@ -222,7 +222,7 @@ bool GUIConfirmRegistration::OnEvent(const SEvent &event)
if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) {
if (!canTakeFocus(event.GUIEvent.Element)) {
- dstream << "GUIConfirmRegistration: Not allowing focus change."
+ infostream << "GUIConfirmRegistration: Not allowing focus change."
<< std::endl;
// Returning true disables focus change
return true;
diff --git a/src/gui/guiConfirmRegistration.h b/src/gui/guiConfirmRegistration.h
index 42c07e4ed..d8387201d 100644
--- a/src/gui/guiConfirmRegistration.h
+++ b/src/gui/guiConfirmRegistration.h
@@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
class Client;
+class ISimpleTextureSource;
class GUIConfirmRegistration : public GUIModalMenu
{
@@ -32,7 +33,7 @@ public:
GUIConfirmRegistration(gui::IGUIEnvironment *env, gui::IGUIElement *parent,
s32 id, IMenuManager *menumgr, Client *client,
const std::string &playername, const std::string &password,
- bool *aborted);
+ bool *aborted, ISimpleTextureSource *tsrc);
~GUIConfirmRegistration();
void removeChildren();
@@ -63,4 +64,5 @@ private:
const std::string &m_password;
bool *m_aborted = nullptr;
std::wstring m_pass_confirm = L"";
+ ISimpleTextureSource *m_tsrc;
};
diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp
index 3107d64cd..b40707d01 100644
--- a/src/gui/guiEngine.cpp
+++ b/src/gui/guiEngine.cpp
@@ -144,10 +144,10 @@ GUIEngine::GUIEngine(JoystickController *joystick,
//create soundmanager
MenuMusicFetcher soundfetcher;
#if USE_SOUND
- if (g_settings->getBool("enable_sound"))
+ if (g_settings->getBool("enable_sound") && g_sound_manager_singleton.get())
m_sound_manager = createOpenALSoundManager(g_sound_manager_singleton.get(), &soundfetcher);
#endif
- if(!m_sound_manager)
+ if (!m_sound_manager)
m_sound_manager = &dummySoundManager;
//create topleft header
diff --git a/src/gui/guiEngine.h b/src/gui/guiEngine.h
index e55531bbc..f9ad0fb0a 100644
--- a/src/gui/guiEngine.h
+++ b/src/gui/guiEngine.h
@@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/* Includes */
/******************************************************************************/
#include "irrlichttypes.h"
-#include "modalMenu.h"
#include "guiFormSpecMenu.h"
#include "client/sound.h"
#include "client/tile.h"
diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp
index 012ac953f..601c5c18e 100644
--- a/src/gui/guiFormSpecMenu.cpp
+++ b/src/gui/guiFormSpecMenu.cpp
@@ -24,8 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <limits>
#include <sstream>
#include "guiFormSpecMenu.h"
-#include "guiScrollBar.h"
-#include "guiTable.h"
#include "constants.h"
#include "gamedef.h"
#include "client/keycode.h"
@@ -64,8 +62,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "guiEditBoxWithScrollbar.h"
#include "guiInventoryList.h"
#include "guiItemImage.h"
-#include "guiScrollBar.h"
-#include "guiTable.h"
+#include "guiScrollContainer.h"
#include "intlGUIEditBox.h"
#include "guiHyperText.h"
@@ -98,29 +95,21 @@ inline u32 clamp_u8(s32 value)
GUIFormSpecMenu::GUIFormSpecMenu(JoystickController *joystick,
gui::IGUIElement *parent, s32 id, IMenuManager *menumgr,
Client *client, ISimpleTextureSource *tsrc, IFormSource *fsrc, TextDest *tdst,
- const std::string &formspecPrepend,
- bool remap_dbl_click):
- GUIModalMenu(RenderingEngine::get_gui_env(), parent, id, menumgr),
+ const std::string &formspecPrepend, bool remap_dbl_click):
+ GUIModalMenu(RenderingEngine::get_gui_env(), parent, id, menumgr, remap_dbl_click),
m_invmgr(client),
m_tsrc(tsrc),
m_client(client),
m_formspec_prepend(formspecPrepend),
m_form_src(fsrc),
m_text_dst(tdst),
- m_joystick(joystick),
- m_remap_dbl_click(remap_dbl_click)
+ m_joystick(joystick)
{
current_keys_pending.key_down = false;
current_keys_pending.key_up = false;
current_keys_pending.key_enter = false;
current_keys_pending.key_escape = false;
- m_doubleclickdetect[0].time = 0;
- m_doubleclickdetect[1].time = 0;
-
- m_doubleclickdetect[0].pos = v2s32(0, 0);
- m_doubleclickdetect[1].pos = v2s32(0, 0);
-
m_tooltip_show_delay = (u32)g_settings->getS32("tooltip_show_delay");
m_tooltip_append_itemname = g_settings->getBool("tooltip_append_itemname");
}
@@ -141,6 +130,10 @@ GUIFormSpecMenu::~GUIFormSpecMenu()
background_it->drop();
for (auto &tooltip_rect_it : m_tooltip_rects)
tooltip_rect_it.first->drop();
+ for (auto &clickthrough_it : m_clickthrough_elements)
+ clickthrough_it->drop();
+ for (auto &scroll_container_it : m_scroll_containers)
+ scroll_container_it.second->drop();
delete m_selected_item;
delete m_form_src;
@@ -349,6 +342,102 @@ void GUIFormSpecMenu::parseContainerEnd(parserData* data)
}
}
+void GUIFormSpecMenu::parseScrollContainer(parserData *data, const std::string &element)
+{
+ std::vector<std::string> parts = split(element, ';');
+
+ if (parts.size() < 4 ||
+ (parts.size() > 5 && m_formspec_version <= FORMSPEC_API_VERSION)) {
+ errorstream << "Invalid scroll_container start element (" << parts.size()
+ << "): '" << element << "'" << std::endl;
+ return;
+ }
+
+ std::vector<std::string> v_pos = split(parts[0], ',');
+ std::vector<std::string> v_geom = split(parts[1], ',');
+ std::string scrollbar_name = parts[2];
+ std::string orientation = parts[3];
+ f32 scroll_factor = 0.1f;
+ if (parts.size() >= 5 && !parts[4].empty())
+ scroll_factor = stof(parts[4]);
+
+ MY_CHECKPOS("scroll_container", 0);
+ MY_CHECKGEOM("scroll_container", 1);
+
+ v2s32 pos = getRealCoordinateBasePos(v_pos);
+ v2s32 geom = getRealCoordinateGeometry(v_geom);
+
+ if (orientation == "vertical")
+ scroll_factor *= -imgsize.Y;
+ else if (orientation == "horizontal")
+ scroll_factor *= -imgsize.X;
+ else
+ warningstream << "GUIFormSpecMenu::parseScrollContainer(): "
+ << "Invalid scroll_container orientation: " << orientation
+ << std::endl;
+
+ // old parent (at first: this)
+ // ^ is parent of clipper
+ // ^ is parent of mover
+ // ^ is parent of other elements
+
+ // make clipper
+ core::rect<s32> rect_clipper = core::rect<s32>(pos, pos + geom);
+
+ gui::IGUIElement *clipper = new gui::IGUIElement(EGUIET_ELEMENT, Environment,
+ data->current_parent, 0, rect_clipper);
+
+ // make mover
+ FieldSpec spec_mover(
+ "",
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
+
+ core::rect<s32> rect_mover = core::rect<s32>(0, 0, geom.X, geom.Y);
+
+ GUIScrollContainer *mover = new GUIScrollContainer(Environment,
+ clipper, spec_mover.fid, rect_mover, orientation, scroll_factor);
+
+ data->current_parent = mover;
+
+ m_scroll_containers.emplace_back(scrollbar_name, mover);
+
+ m_fields.push_back(spec_mover);
+
+ clipper->drop();
+
+ // remove interferring offset of normal containers
+ container_stack.push(pos_offset);
+ pos_offset.X = 0.0f;
+ pos_offset.Y = 0.0f;
+}
+
+void GUIFormSpecMenu::parseScrollContainerEnd(parserData *data)
+{
+ if (data->current_parent == this || data->current_parent->getParent() == this ||
+ container_stack.empty()) {
+ errorstream << "Invalid scroll_container end element, "
+ << "no matching scroll_container start element" << std::endl;
+ return;
+ }
+
+ if (pos_offset.getLengthSQ() != 0.0f) {
+ // pos_offset is only set by containers and scroll_containers.
+ // scroll_containers always set it to 0,0 which means that if it is
+ // not 0,0, it is a normal container that was opened last, not a
+ // scroll_container
+ errorstream << "Invalid scroll_container end element, "
+ << "an inner container was left open" << std::endl;
+ return;
+ }
+
+ data->current_parent = data->current_parent->getParent()->getParent();
+ pos_offset = container_stack.top();
+ container_stack.pop();
+}
+
void GUIFormSpecMenu::parseList(parserData *data, const std::string &element)
{
if (m_client == 0) {
@@ -388,38 +477,10 @@ void GUIFormSpecMenu::parseList(parserData *data, const std::string &element)
start_i = stoi(startindex);
if (geom.X < 0 || geom.Y < 0 || start_i < 0) {
- errorstream<< "Invalid list element: '" << element << "'" << std::endl;
+ errorstream << "Invalid list element: '" << element << "'" << std::endl;
return;
}
- // check for the existence of inventory and list
- Inventory *inv = m_invmgr->getInventory(loc);
- if (!inv) {
- warningstream << "GUIFormSpecMenu::parseList(): "
- << "The inventory location "
- << "\"" << loc.dump() << "\" doesn't exist"
- << std::endl;
- return;
- }
- InventoryList *ilist = inv->getList(listname);
- if (!ilist) {
- warningstream << "GUIFormSpecMenu::parseList(): "
- << "The inventory list \"" << listname << "\" "
- << "@ \"" << loc.dump() << "\" doesn't exist"
- << std::endl;
- return;
- }
-
- // trim geom if it is larger than the actual inventory size
- s32 list_size = (s32)ilist->getSize();
- if (list_size < geom.X * geom.Y + start_i) {
- list_size -= MYMAX(start_i, 0);
- geom.Y = list_size / geom.X;
- geom.Y += list_size % geom.X > 0 ? 1 : 0;
- if (geom.Y <= 1)
- geom.X = list_size;
- }
-
if (!data->explicit_size)
warningstream << "invalid use of list without a size[] element" << std::endl;
@@ -441,9 +502,9 @@ void GUIFormSpecMenu::parseList(parserData *data, const std::string &element)
pos.X + (geom.X - 1) * slot_spacing.X + imgsize.X,
pos.Y + (geom.Y - 1) * slot_spacing.Y + imgsize.Y);
- GUIInventoryList *e = new GUIInventoryList(Environment, this, spec.fid,
- rect, m_invmgr, loc, listname, geom, start_i, imgsize, slot_spacing,
- this, data->inventorylist_options, m_font);
+ GUIInventoryList *e = new GUIInventoryList(Environment, data->current_parent,
+ spec.fid, rect, m_invmgr, loc, listname, geom, start_i, imgsize,
+ slot_spacing, this, data->inventorylist_options, m_font);
m_inventorylists.push_back(e);
m_fields.push_back(spec);
@@ -548,13 +609,13 @@ void GUIFormSpecMenu::parseCheckbox(parserData* data, const std::string &element
spec.ftype = f_CheckBox;
- gui::IGUICheckBox *e = Environment->addCheckBox(fselected, rect, this,
- spec.fid, spec.flabel.c_str());
+ gui::IGUICheckBox *e = Environment->addCheckBox(fselected, rect,
+ data->current_parent, spec.fid, spec.flabel.c_str());
- auto style = getStyleForElement("checkbox", name);
+ auto style = getDefaultStyleForElement("checkbox", name);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- if (spec.fname == data->focused_fieldname) {
+ if (spec.fname == m_focused_element) {
Environment->setFocus(e);
}
@@ -608,10 +669,10 @@ void GUIFormSpecMenu::parseScrollBar(parserData* data, const std::string &elemen
spec.ftype = f_ScrollBar;
spec.send = true;
- GUIScrollBar *e = new GUIScrollBar(Environment, this, spec.fid, rect,
- is_horizontal, true);
+ GUIScrollBar *e = new GUIScrollBar(Environment, data->current_parent,
+ spec.fid, rect, is_horizontal, true);
- auto style = getStyleForElement("scrollbar", name);
+ auto style = getDefaultStyleForElement("scrollbar", name);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
e->setArrowsVisible(data->scrollbar_options.arrow_visiblity);
@@ -630,6 +691,10 @@ void GUIFormSpecMenu::parseScrollBar(parserData* data, const std::string &elemen
e->setPageSize(scrollbar_size * (max - min + 1) / data->scrollbar_options.thumb_size);
+ if (spec.fname == m_focused_element) {
+ Environment->setFocus(e);
+ }
+
m_scrollbars.emplace_back(spec,e);
m_fields.push_back(spec);
return;
@@ -735,13 +800,17 @@ void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element)
1
);
core::rect<s32> rect(pos, pos + geom);
- gui::IGUIImage *e = Environment->addImage(rect, this, spec.fid, 0, true);
+ gui::IGUIImage *e = Environment->addImage(rect, data->current_parent,
+ spec.fid, 0, true);
e->setImage(texture);
e->setScaleImage(true);
- auto style = getStyleForElement("image", spec.fname);
+ auto style = getDefaultStyleForElement("image", spec.fname);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
m_fields.push_back(spec);
+ // images should let events through
+ e->grab();
+ m_clickthrough_elements.push_back(e);
return;
}
@@ -769,12 +838,15 @@ void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element)
L"",
258 + m_fields.size()
);
- gui::IGUIImage *e = Environment->addImage(texture, pos, true, this,
- spec.fid, 0);
- auto style = getStyleForElement("image", spec.fname);
+ gui::IGUIImage *e = Environment->addImage(texture, pos, true,
+ data->current_parent, spec.fid, 0);
+ auto style = getDefaultStyleForElement("image", spec.fname);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
m_fields.push_back(spec);
+ // images should let events through
+ e->grab();
+ m_clickthrough_elements.push_back(e);
return;
}
errorstream<< "Invalid image element(" << parts.size() << "): '" << element << "'" << std::endl;
@@ -833,9 +905,11 @@ void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &el
if (parts.size() >= 7)
e->setFrameIndex(stoi(parts[6]) - 1);
- auto style = getStyleForElement("animated_image", spec.fname, "image");
+ auto style = getDefaultStyleForElement("animated_image", spec.fname, "image");
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->drop();
+
+ // Animated images should let events through
+ m_clickthrough_elements.push_back(e);
m_fields.push_back(spec);
}
@@ -878,11 +952,13 @@ void GUIFormSpecMenu::parseItemImage(parserData* data, const std::string &elemen
);
spec.ftype = f_ItemImage;
- GUIItemImage *e = new GUIItemImage(Environment, this, spec.fid,
+ GUIItemImage *e = new GUIItemImage(Environment, data->current_parent, spec.fid,
core::rect<s32>(pos, pos + geom), name, m_font, m_client);
- auto style = getStyleForElement("item_image", spec.fname);
+ auto style = getDefaultStyleForElement("item_image", spec.fname);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->drop();
+
+ // item images should let events through
+ m_clickthrough_elements.push_back(e);
m_fields.push_back(spec);
return;
@@ -939,12 +1015,13 @@ void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element,
if(type == "button_exit")
spec.is_exit = true;
- GUIButton *e = GUIButton::addButton(Environment, rect, this, spec.fid, spec.flabel.c_str());
+ GUIButton *e = GUIButton::addButton(Environment, rect, m_tsrc,
+ data->current_parent, spec.fid, spec.flabel.c_str());
auto style = getStyleForElement(type, name, (type != "button") ? "button" : "");
- e->setFromStyle(style, m_tsrc);
+ e->setStyles(style);
- if (spec.fname == data->focused_fieldname) {
+ if (spec.fname == m_focused_element) {
Environment->setFocus(e);
}
@@ -1130,9 +1207,10 @@ void GUIFormSpecMenu::parseTable(parserData* data, const std::string &element)
}
//now really show table
- GUITable *e = new GUITable(Environment, this, spec.fid, rect, m_tsrc);
+ GUITable *e = new GUITable(Environment, data->current_parent, spec.fid,
+ rect, m_tsrc);
- if (spec.fname == data->focused_fieldname) {
+ if (spec.fname == m_focused_element) {
Environment->setFocus(e);
}
@@ -1145,7 +1223,7 @@ void GUIFormSpecMenu::parseTable(parserData* data, const std::string &element)
if (!str_initial_selection.empty() && str_initial_selection != "0")
e->setSelected(stoi(str_initial_selection));
- auto style = getStyleForElement("table", name);
+ auto style = getDefaultStyleForElement("table", name);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
m_tables.emplace_back(spec, e);
@@ -1206,9 +1284,10 @@ void GUIFormSpecMenu::parseTextList(parserData* data, const std::string &element
}
//now really show list
- GUITable *e = new GUITable(Environment, this, spec.fid, rect, m_tsrc);
+ GUITable *e = new GUITable(Environment, data->current_parent, spec.fid,
+ rect, m_tsrc);
- if (spec.fname == data->focused_fieldname) {
+ if (spec.fname == m_focused_element) {
Environment->setFocus(e);
}
@@ -1221,7 +1300,7 @@ void GUIFormSpecMenu::parseTextList(parserData* data, const std::string &element
if (!str_initial_selection.empty() && str_initial_selection != "0")
e->setSelected(stoi(str_initial_selection));
- auto style = getStyleForElement("textlist", name);
+ auto style = getDefaultStyleForElement("textlist", name);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
m_tables.emplace_back(spec, e);
@@ -1231,19 +1310,20 @@ void GUIFormSpecMenu::parseTextList(parserData* data, const std::string &element
errorstream<< "Invalid textlist element(" << parts.size() << "): '" << element << "'" << std::endl;
}
-
void GUIFormSpecMenu::parseDropDown(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts = split(element, ';');
- if ((parts.size() == 5) ||
- ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ if (parts.size() == 5 || parts.size() == 6 ||
+ (parts.size() > 6 && m_formspec_version > FORMSPEC_API_VERSION))
{
- std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_pos = split(parts[0], ',');
std::string name = parts[2];
- std::vector<std::string> items = split(parts[3],',');
- std::string str_initial_selection;
- str_initial_selection = parts[4];
+ std::vector<std::string> items = split(parts[3], ',');
+ std::string str_initial_selection = parts[4];
+
+ if (parts.size() >= 6 && is_yes(parts[5]))
+ m_dropdown_index_event[name] = true;
MY_CHECKPOS("dropdown",0);
@@ -1282,9 +1362,10 @@ void GUIFormSpecMenu::parseDropDown(parserData* data, const std::string &element
spec.send = true;
//now really show list
- gui::IGUIComboBox *e = Environment->addComboBox(rect, this, spec.fid);
+ gui::IGUIComboBox *e = Environment->addComboBox(rect, data->current_parent,
+ spec.fid);
- if (spec.fname == data->focused_fieldname) {
+ if (spec.fname == m_focused_element) {
Environment->setFocus(e);
}
@@ -1296,7 +1377,7 @@ void GUIFormSpecMenu::parseDropDown(parserData* data, const std::string &element
if (!str_initial_selection.empty())
e->setSelected(stoi(str_initial_selection)-1);
- auto style = getStyleForElement("dropdown", name);
+ auto style = getDefaultStyleForElement("dropdown", name);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
m_fields.push_back(spec);
@@ -1309,8 +1390,8 @@ void GUIFormSpecMenu::parseDropDown(parserData* data, const std::string &element
return;
}
- errorstream << "Invalid dropdown element(" << parts.size() << "): '"
- << element << "'" << std::endl;
+ errorstream << "Invalid dropdown element(" << parts.size() << "): '" << element
+ << "'" << std::endl;
}
void GUIFormSpecMenu::parseFieldCloseOnEnter(parserData *data, const std::string &element)
@@ -1326,8 +1407,8 @@ void GUIFormSpecMenu::parsePwdField(parserData* data, const std::string &element
{
std::vector<std::string> parts = split(element,';');
- if ((parts.size() == 4) ||
- ((parts.size() > 4) && (m_formspec_version > FORMSPEC_API_VERSION)))
+ if (parts.size() == 4 ||
+ (parts.size() > 4 && m_formspec_version > FORMSPEC_API_VERSION))
{
std::vector<std::string> v_pos = split(parts[0],',');
std::vector<std::string> v_geom = split(parts[1],',');
@@ -1368,9 +1449,10 @@ void GUIFormSpecMenu::parsePwdField(parserData* data, const std::string &element
);
spec.send = true;
- gui::IGUIEditBox * e = Environment->addEditBox(0, rect, true, this, spec.fid);
+ gui::IGUIEditBox *e = Environment->addEditBox(0, rect, true,
+ data->current_parent, spec.fid);
- if (spec.fname == data->focused_fieldname) {
+ if (spec.fname == m_focused_element) {
Environment->setFocus(e);
}
@@ -1379,15 +1461,16 @@ void GUIFormSpecMenu::parsePwdField(parserData* data, const std::string &element
rect.UpperLeftCorner.Y -= font_height;
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + font_height;
gui::StaticText::add(Environment, spec.flabel.c_str(), rect, false, true,
- this, 0);
+ data->current_parent, 0);
}
e->setPasswordBox(true,L'*');
- auto style = getStyleForElement("pwdfield", name, "field");
+ auto style = getDefaultStyleForElement("pwdfield", name, "field");
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
e->setDrawBorder(style.getBool(StyleSpec::BORDER, true));
e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
+ e->setOverrideFont(style.getFont());
irr::SEvent evt;
evt.EventType = EET_KEY_INPUT_EVENT;
@@ -1414,7 +1497,7 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
if (!is_editable && !is_multiline) {
// spec field id to 0, this stops submit searching for a value that isn't there
gui::StaticText::add(Environment, spec.flabel.c_str(), rect, false, true,
- this, spec.fid);
+ data->current_parent, 0);
return;
}
@@ -1432,22 +1515,22 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
if (use_intl_edit_box && g_settings->getBool("freetype")) {
e = new gui::intlGUIEditBox(spec.fdefault.c_str(), true, Environment,
- this, spec.fid, rect, is_editable, is_multiline);
+ data->current_parent, spec.fid, rect, is_editable, is_multiline);
} else {
if (is_multiline) {
- e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true,
- Environment, this, spec.fid, rect, is_editable, true);
+ 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, this,
- spec.fid);
+ e = Environment->addEditBox(spec.fdefault.c_str(), rect, true,
+ data->current_parent, spec.fid);
e->grab();
}
}
- auto style = getStyleForElement(is_multiline ? "textarea" : "field", spec.fname);
+ auto style = getDefaultStyleForElement(is_multiline ? "textarea" : "field", spec.fname);
if (e) {
- if (is_editable && spec.fname == data->focused_fieldname)
+ if (is_editable && spec.fname == m_focused_element)
Environment->setFocus(e);
if (is_multiline) {
@@ -1471,6 +1554,7 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
if (style.get(StyleSpec::BGCOLOR, "") == "transparent") {
e->setDrawBackground(false);
}
+ e->setOverrideFont(style.getFont());
e->drop();
}
@@ -1480,7 +1564,7 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
rect.UpperLeftCorner.Y -= font_height;
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + font_height;
IGUIElement *t = gui::StaticText::add(Environment, spec.flabel.c_str(),
- rect, false, true, this, 0);
+ rect, false, true, data->current_parent, 0);
if (t)
t->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
@@ -1660,8 +1744,8 @@ void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &elemen
);
spec.ftype = f_HyperText;
- GUIHyperText *e = new GUIHyperText(spec.flabel.c_str(), Environment, this,
- spec.fid, rect, m_client, m_tsrc);
+ GUIHyperText *e = new GUIHyperText(spec.flabel.c_str(), Environment,
+ data->current_parent, spec.fid, rect, m_client, m_tsrc);
e->drop();
m_fields.push_back(spec);
@@ -1684,6 +1768,11 @@ void GUIFormSpecMenu::parseLabel(parserData* data, const std::string &element)
std::vector<std::string> lines = split(text, '\n');
+ auto style = getDefaultStyleForElement("label", "");
+ gui::IGUIFont *font = style.getFont();
+ if (!font)
+ font = m_font;
+
for (unsigned int i = 0; i != lines.size(); i++) {
std::wstring wlabel_colors = translate_string(
utf8_to_wide(unescape_string(lines[i])));
@@ -1705,7 +1794,7 @@ void GUIFormSpecMenu::parseLabel(parserData* data, const std::string &element)
rect = core::rect<s32>(
pos.X, pos.Y,
- pos.X + m_font->getDimension(wlabel_plain.c_str()).Width,
+ pos.X + font->getDimension(wlabel_plain.c_str()).Width,
pos.Y + imgsize.Y);
} else {
@@ -1727,7 +1816,7 @@ void GUIFormSpecMenu::parseLabel(parserData* data, const std::string &element)
rect = core::rect<s32>(
pos.X, pos.Y - m_btn_height,
- pos.X + m_font->getDimension(wlabel_plain.c_str()).Width,
+ pos.X + font->getDimension(wlabel_plain.c_str()).Width,
pos.Y + m_btn_height);
}
@@ -1739,14 +1828,19 @@ void GUIFormSpecMenu::parseLabel(parserData* data, const std::string &element)
4
);
gui::IGUIStaticText *e = gui::StaticText::add(Environment,
- spec.flabel.c_str(), rect, false, false, this, spec.fid);
+ spec.flabel.c_str(), rect, false, false, data->current_parent,
+ spec.fid);
e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER);
- auto style = getStyleForElement("label", spec.fname);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
+ e->setOverrideFont(font);
m_fields.push_back(spec);
+
+ // labels should let events through
+ e->grab();
+ m_clickthrough_elements.push_back(e);
}
return;
@@ -1768,6 +1862,11 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data, const std::string &elemen
MY_CHECKPOS("vertlabel",1);
+ auto style = getDefaultStyleForElement("vertlabel", "", "label");
+ gui::IGUIFont *font = style.getFont();
+ if (!font)
+ font = m_font;
+
v2s32 pos;
core::rect<s32> rect;
@@ -1781,7 +1880,7 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data, const std::string &elemen
// isn't quite tall enough and cuts off the text.
rect = core::rect<s32>(pos.X, pos.Y,
pos.X + imgsize.X,
- pos.Y + font_line_height(m_font) *
+ pos.Y + font_line_height(font) *
(text.length() + 1));
} else {
@@ -1793,7 +1892,7 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data, const std::string &elemen
rect = core::rect<s32>(
pos.X, pos.Y+((imgsize.Y/2) - m_btn_height),
pos.X+15, pos.Y +
- font_line_height(m_font) *
+ font_line_height(font) *
(text.length() + 1) +
((imgsize.Y/2) - m_btn_height));
}
@@ -1815,14 +1914,18 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data, const std::string &elemen
258 + m_fields.size()
);
gui::IGUIStaticText *e = gui::StaticText::add(Environment, spec.flabel.c_str(),
- rect, false, false, this, spec.fid);
+ rect, false, false, data->current_parent, spec.fid);
e->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER);
- auto style = getStyleForElement("vertlabel", spec.fname, "label");
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
+ e->setOverrideFont(font);
m_fields.push_back(spec);
+
+ // vertlabels should let events through
+ e->grab();
+ m_clickthrough_elements.push_back(e);
return;
}
errorstream<< "Invalid vertlabel element(" << parts.size() << "): '" << element << "'" << std::endl;
@@ -1845,17 +1948,8 @@ void GUIFormSpecMenu::parseImageButton(parserData* data, const std::string &elem
MY_CHECKPOS("imagebutton",0);
MY_CHECKGEOM("imagebutton",1);
- bool noclip = false;
- bool drawborder = true;
std::string pressed_image_name;
- if (parts.size() >= 7) {
- if (parts[5] == "true")
- noclip = true;
- if (parts[6] == "false")
- drawborder = false;
- }
-
if (parts.size() >= 8) {
pressed_image_name = parts[7];
}
@@ -1893,35 +1987,30 @@ void GUIFormSpecMenu::parseImageButton(parserData* data, const std::string &elem
if (type == "image_button_exit")
spec.is_exit = true;
- GUIButtonImage *e = GUIButtonImage::addButton(Environment, rect, this, spec.fid, spec.flabel.c_str());
+ GUIButtonImage *e = GUIButtonImage::addButton(Environment, rect, m_tsrc,
+ data->current_parent, spec.fid, spec.flabel.c_str());
- if (spec.fname == data->focused_fieldname) {
+ if (spec.fname == m_focused_element) {
Environment->setFocus(e);
}
auto style = getStyleForElement("image_button", spec.fname);
- e->setFromStyle(style, m_tsrc);
- // We explicitly handle these arguments *after* the style properties in
- // order to override them if they are provided
+ // Override style properties with values specified directly in the element
if (!image_name.empty())
- {
- video::ITexture *texture = m_tsrc->getTexture(image_name);
- e->setForegroundImage(guiScalingImageButton(
- Environment->getVideoDriver(), texture, geom.X, geom.Y));
- }
- if (!pressed_image_name.empty()) {
- video::ITexture *pressed_texture = m_tsrc->getTexture(pressed_image_name);
- e->setPressedForegroundImage(guiScalingImageButton(
- Environment->getVideoDriver(), pressed_texture, geom.X, geom.Y));
- }
- e->setScaleImage(true);
+ style[StyleSpec::STATE_DEFAULT].set(StyleSpec::FGIMG, image_name);
+
+ if (!pressed_image_name.empty())
+ style[StyleSpec::STATE_PRESSED].set(StyleSpec::FGIMG, pressed_image_name);
if (parts.size() >= 7) {
- e->setNotClipped(noclip);
- e->setDrawBorder(drawborder);
+ style[StyleSpec::STATE_DEFAULT].set(StyleSpec::NOCLIP, parts[5]);
+ style[StyleSpec::STATE_DEFAULT].set(StyleSpec::BORDER, parts[6]);
}
+ e->setStyles(style);
+ e->setScaleImage(true);
+
m_fields.push_back(spec);
return;
}
@@ -1943,7 +2032,7 @@ void GUIFormSpecMenu::parseTabHeader(parserData* data, const std::string &elemen
// Width is not here because tabs are the width of the text, and
// there's no reason to change that.
unsigned int i = 0;
- std::vector<std::string> v_geom = {"1", "0.75"}; // Dummy width and default height
+ std::vector<std::string> v_geom = {"1", "1"}; // Dummy width and height
bool auto_width = true;
if (parts.size() == 7) {
i++;
@@ -1987,6 +2076,9 @@ void GUIFormSpecMenu::parseTabHeader(parserData* data, const std::string &elemen
pos = getRealCoordinateBasePos(v_pos);
geom = getRealCoordinateGeometry(v_geom);
+ // Set default height
+ if (parts.size() <= 6)
+ geom.Y = m_btn_height * 2;
pos.Y -= geom.Y; // TabHeader base pos is the bottom, not the top.
if (auto_width)
geom.X = DesiredRect.getWidth(); // Set automatic width
@@ -2005,17 +2097,13 @@ void GUIFormSpecMenu::parseTabHeader(parserData* data, const std::string &elemen
core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X,
pos.Y+geom.Y);
- gui::IGUITabControl *e = Environment->addTabControl(rect, this,
- show_background, show_border, spec.fid);
+ gui::IGUITabControl *e = Environment->addTabControl(rect,
+ data->current_parent, show_background, show_border, spec.fid);
e->setAlignment(irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_UPPERLEFT,
irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_LOWERRIGHT);
e->setTabHeight(geom.Y);
- if (spec.fname == data->focused_fieldname) {
- Environment->setFocus(e);
- }
-
- auto style = getStyleForElement("tabheader", name);
+ auto style = getDefaultStyleForElement("tabheader", name);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, true));
for (const std::string &button : buttons) {
@@ -2041,7 +2129,6 @@ void GUIFormSpecMenu::parseTabHeader(parserData* data, const std::string &elemen
void GUIFormSpecMenu::parseItemImageButton(parserData* data, const std::string &element)
{
-
if (m_client == 0) {
warningstream << "invalid use of item_image_button with m_client==0"
<< std::endl;
@@ -2100,12 +2187,14 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data, const std::string &
2
);
- GUIButtonItemImage *e_btn = GUIButtonItemImage::addButton(Environment, rect, this, spec_btn.fid, spec_btn.flabel.c_str(), item_name, m_client);
+ GUIButtonItemImage *e_btn = GUIButtonItemImage::addButton(Environment,
+ rect, m_tsrc, data->current_parent, spec_btn.fid, spec_btn.flabel.c_str(),
+ item_name, m_client);
auto style = getStyleForElement("item_image_button", spec_btn.fname, "image_button");
- e_btn->setFromStyle(style, m_tsrc);
+ e_btn->setStyles(style);
- if (spec_btn.fname == data->focused_fieldname) {
+ if (spec_btn.fname == m_focused_element) {
Environment->setFocus(e_btn);
}
@@ -2157,9 +2246,10 @@ void GUIFormSpecMenu::parseBox(parserData* data, const std::string &element)
core::rect<s32> rect(pos, pos + geom);
- GUIBox *e = new GUIBox(Environment, this, spec.fid, rect, tmp_color);
+ GUIBox *e = new GUIBox(Environment, data->current_parent, spec.fid,
+ rect, tmp_color);
- auto style = getStyleForElement("box", spec.fname);
+ auto style = getDefaultStyleForElement("box", spec.fname);
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
e->drop();
@@ -2309,7 +2399,7 @@ void GUIFormSpecMenu::parseTooltip(parserData* data, const std::string &element)
core::rect<s32> rect(pos, pos + geom);
gui::IGUIElement *e = new gui::IGUIElement(EGUIET_ELEMENT, Environment,
- this, fieldspec.fid, rect);
+ data->current_parent, fieldspec.fid, rect);
// the element the rect tooltip is bound to should not block mouse-clicks
e->setVisible(false);
@@ -2451,6 +2541,7 @@ bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, b
StyleSpec spec;
+ // Parse properties
for (size_t i = 1; i < parts.size(); i++) {
size_t equal_pos = parts[i].find('=');
if (equal_pos == std::string::npos) {
@@ -2472,7 +2563,7 @@ bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, b
<< "'" << std::endl;
property_warned.insert(propname);
}
- return false;
+ continue;
}
spec.set(prop, value);
@@ -2482,22 +2573,119 @@ bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, b
for (size_t sel = 0; sel < selectors.size(); sel++) {
std::string selector = trim(selectors[sel]);
- if (selector.empty()) {
- errorstream << "Invalid style element (Empty selector): '" << element
- << "'" << std::endl;
+ // Copy the style properties to a new StyleSpec
+ // This allows a separate state mask per-selector
+ StyleSpec selector_spec = spec;
+
+ // Parse state information, if it exists
+ bool state_valid = true;
+ size_t state_pos = selector.find(':');
+ if (state_pos != std::string::npos) {
+ std::string state_str = selector.substr(state_pos + 1);
+ selector = selector.substr(0, state_pos);
+
+ if (state_str.empty()) {
+ errorstream << "Invalid style element (Invalid state): '" << element
+ << "'" << std::endl;
+ state_valid = false;
+ } else {
+ std::vector<std::string> states = split(state_str, '+');
+ for (std::string &state : states) {
+ StyleSpec::State converted = StyleSpec::getStateByName(state);
+ if (converted == StyleSpec::STATE_INVALID) {
+ infostream << "Unknown style state " << state <<
+ " in element '" << element << "'" << std::endl;
+ state_valid = false;
+ break;
+ }
+
+ selector_spec.addState(converted);
+ }
+ }
+ }
+
+ if (!state_valid) {
+ // Skip this selector
continue;
}
if (style_type) {
- theme_by_type[selector] |= spec;
+ theme_by_type[selector].push_back(selector_spec);
} else {
- theme_by_name[selector] |= spec;
+ theme_by_name[selector].push_back(selector_spec);
+ }
+
+ // Backwards-compatibility for existing _hovered/_pressed properties
+ if (selector_spec.hasProperty(StyleSpec::BGCOLOR_HOVERED)
+ || selector_spec.hasProperty(StyleSpec::BGIMG_HOVERED)
+ || selector_spec.hasProperty(StyleSpec::FGIMG_HOVERED)) {
+ StyleSpec hover_spec;
+ hover_spec.addState(StyleSpec::STATE_HOVERED);
+
+ if (selector_spec.hasProperty(StyleSpec::BGCOLOR_HOVERED)) {
+ hover_spec.set(StyleSpec::BGCOLOR, selector_spec.get(StyleSpec::BGCOLOR_HOVERED, ""));
+ }
+ if (selector_spec.hasProperty(StyleSpec::BGIMG_HOVERED)) {
+ hover_spec.set(StyleSpec::BGIMG, selector_spec.get(StyleSpec::BGIMG_HOVERED, ""));
+ }
+ if (selector_spec.hasProperty(StyleSpec::FGIMG_HOVERED)) {
+ hover_spec.set(StyleSpec::FGIMG, selector_spec.get(StyleSpec::FGIMG_HOVERED, ""));
+ }
+
+ if (style_type) {
+ theme_by_type[selector].push_back(hover_spec);
+ } else {
+ theme_by_name[selector].push_back(hover_spec);
+ }
+ }
+ if (selector_spec.hasProperty(StyleSpec::BGCOLOR_PRESSED)
+ || selector_spec.hasProperty(StyleSpec::BGIMG_PRESSED)
+ || selector_spec.hasProperty(StyleSpec::FGIMG_PRESSED)) {
+ StyleSpec press_spec;
+ press_spec.addState(StyleSpec::STATE_PRESSED);
+
+ if (selector_spec.hasProperty(StyleSpec::BGCOLOR_PRESSED)) {
+ press_spec.set(StyleSpec::BGCOLOR, selector_spec.get(StyleSpec::BGCOLOR_PRESSED, ""));
+ }
+ if (selector_spec.hasProperty(StyleSpec::BGIMG_PRESSED)) {
+ press_spec.set(StyleSpec::BGIMG, selector_spec.get(StyleSpec::BGIMG_PRESSED, ""));
+ }
+ if (selector_spec.hasProperty(StyleSpec::FGIMG_PRESSED)) {
+ press_spec.set(StyleSpec::FGIMG, selector_spec.get(StyleSpec::FGIMG_PRESSED, ""));
+ }
+
+ if (style_type) {
+ theme_by_type[selector].push_back(press_spec);
+ } else {
+ theme_by_name[selector].push_back(press_spec);
+ }
}
}
return true;
}
+void GUIFormSpecMenu::parseSetFocus(const std::string &element)
+{
+ std::vector<std::string> parts = split(element, ';');
+
+ if (parts.size() <= 2 ||
+ (parts.size() > 2 && m_formspec_version > FORMSPEC_API_VERSION))
+ {
+ if (m_is_form_regenerated)
+ return; // Never focus on resizing
+
+ bool force_focus = parts.size() >= 2 && is_yes(parts[1]);
+ if (force_focus || m_text_dst->m_formname != m_last_formname)
+ setFocus(parts[0]);
+
+ return;
+ }
+
+ errorstream << "Invalid set_focus element (" << parts.size() << "): '" << element
+ << "'" << std::endl;
+}
+
void GUIFormSpecMenu::parseElement(parserData* data, const std::string &element)
{
//some prechecks
@@ -2507,24 +2695,12 @@ void GUIFormSpecMenu::parseElement(parserData* data, const std::string &element)
if (parseVersionDirect(element))
return;
- std::vector<std::string> parts = split(element,'[');
-
- // ugly workaround to keep compatibility
- if (parts.size() > 2) {
- if (trim(parts[0]) == "image") {
- for (unsigned int i=2;i< parts.size(); i++) {
- parts[1] += "[" + parts[i];
- }
- }
- else { return; }
- }
-
- if (parts.size() < 2) {
+ size_t pos = element.find('[');
+ if (pos == std::string::npos)
return;
- }
- std::string type = trim(parts[0]);
- std::string description = trim(parts[1]);
+ std::string type = trim(element.substr(0, pos));
+ std::string description = element.substr(pos+1);
if (type == "container") {
parseContainer(data, description);
@@ -2691,6 +2867,21 @@ void GUIFormSpecMenu::parseElement(parserData* data, const std::string &element)
return;
}
+ if (type == "scroll_container") {
+ parseScrollContainer(data, description);
+ return;
+ }
+
+ if (type == "scroll_container_end") {
+ parseScrollContainerEnd(data);
+ return;
+ }
+
+ if (type == "set_focus") {
+ parseSetFocus(description);
+ return;
+ }
+
// Ignore others
infostream << "Unknown DrawSpec: type=" << type << ", data=\"" << description << "\""
<< std::endl;
@@ -2698,36 +2889,38 @@ void GUIFormSpecMenu::parseElement(parserData* data, const std::string &element)
void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
{
- /* useless to regenerate without a screensize */
+ // Useless to regenerate without a screensize
if ((screensize.X <= 0) || (screensize.Y <= 0)) {
return;
}
parserData mydata;
- //preserve tables
- for (auto &m_table : m_tables) {
- std::string tablename = m_table.first.fname;
- GUITable *table = m_table.second;
- mydata.table_dyndata[tablename] = table->getDynamicData();
- }
-
- //set focus
- if (!m_focused_element.empty())
- mydata.focused_fieldname = m_focused_element;
+ // Preserve stuff only on same form, not on a new form.
+ if (m_text_dst->m_formname == m_last_formname) {
+ // Preserve tables/textlists
+ for (auto &m_table : m_tables) {
+ std::string tablename = m_table.first.fname;
+ GUITable *table = m_table.second;
+ mydata.table_dyndata[tablename] = table->getDynamicData();
+ }
- //preserve focus
- gui::IGUIElement *focused_element = Environment->getFocus();
- if (focused_element && focused_element->getParent() == this) {
- s32 focused_id = focused_element->getID();
- if (focused_id > 257) {
- for (const GUIFormSpecMenu::FieldSpec &field : m_fields) {
- if (field.fid == focused_id) {
- mydata.focused_fieldname = field.fname;
- break;
+ // Preserve focus
+ gui::IGUIElement *focused_element = Environment->getFocus();
+ if (focused_element && focused_element->getParent() == this) {
+ s32 focused_id = focused_element->getID();
+ if (focused_id > 257) {
+ for (const GUIFormSpecMenu::FieldSpec &field : m_fields) {
+ if (field.fid == focused_id) {
+ m_focused_element = field.fname;
+ break;
+ }
}
}
}
+ } else {
+ // Don't keep old focus value
+ m_focused_element = "";
}
// Remove children
@@ -2745,8 +2938,12 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
background_it->drop();
for (auto &tooltip_rect_it : m_tooltip_rects)
tooltip_rect_it.first->drop();
+ for (auto &clickthrough_it : m_clickthrough_elements)
+ clickthrough_it->drop();
+ for (auto &scroll_container_it : m_scroll_containers)
+ scroll_container_it.second->drop();
- mydata.size= v2s32(100,100);
+ mydata.size = v2s32(100, 100);
mydata.screensize = screensize;
mydata.offset = v2f32(0.5f, 0.5f);
mydata.anchor = v2f32(0.5f, 0.5f);
@@ -2755,6 +2952,9 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
// Base position of contents of form
mydata.basepos = getBasePos();
+ // the parent for the parsed elements
+ mydata.current_parent = this;
+
m_inventorylists.clear();
m_backgrounds.clear();
m_tables.clear();
@@ -2765,8 +2965,12 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
m_tooltip_rects.clear();
m_inventory_rings.clear();
m_dropdowns.clear();
+ m_scroll_containers.clear();
theme_by_name.clear();
theme_by_type.clear();
+ m_clickthrough_elements.clear();
+ field_close_on_enter.clear();
+ m_dropdown_index_event.clear();
m_bgnonfullscreen = true;
m_bgfullscreen = false;
@@ -3030,11 +3234,24 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
parseElement(&mydata, elements[i]);
}
- if (!container_stack.empty()) {
+ if (mydata.current_parent != this) {
+ errorstream << "Invalid formspec string: scroll_container was never closed!"
+ << std::endl;
+ } else if (!container_stack.empty()) {
errorstream << "Invalid formspec string: container was never closed!"
<< std::endl;
}
+ // get the scrollbar elements for scroll_containers
+ for (const std::pair<std::string, GUIScrollContainer *> &c : m_scroll_containers) {
+ for (const std::pair<FieldSpec, GUIScrollBar *> &b : m_scrollbars) {
+ if (c.first == b.first.fname) {
+ c.second->setScrollBar(b.second);
+ break;
+ }
+ }
+ }
+
// If there are fields without explicit size[], add a "Proceed"
// button and adjust size to fit all the fields.
if (mydata.simple_field_count > 0 && !mydata.explicit_size) {
@@ -3059,13 +3276,13 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
size.X / 2 - 70 + 140, pos.Y + m_btn_height * 2
);
const wchar_t *text = wgettext("Proceed");
- GUIButton::addButton(Environment, mydata.rect, this, 257, text);
+ GUIButton::addButton(Environment, mydata.rect, m_tsrc, this, 257, text);
delete[] text;
}
}
- //set initial focus if parser didn't set it
- focused_element = Environment->getFocus();
+ // Set initial focus if parser didn't set it
+ gui::IGUIElement *focused_element = Environment->getFocus();
if (!focused_element
|| !isMyChild(focused_element)
|| focused_element->getType() == gui::EGUIET_TAB_CONTROL)
@@ -3076,6 +3293,13 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
// legacy sorting
if (m_formspec_version < 3)
legacySortElements(legacy_sort_start);
+
+ // Formname and regeneration setting
+ if (!m_is_form_regenerated) {
+ // Only set previous form name if we purposefully showed a new formspec
+ m_last_formname = m_text_dst->m_formname;
+ m_is_form_regenerated = true;
+ }
}
void GUIFormSpecMenu::legacySortElements(core::list<IGUIElement *>::Iterator from)
@@ -3125,28 +3349,24 @@ bool GUIFormSpecMenu::getAndroidUIInput()
if (!hasAndroidUIInput())
return false;
+ // still waiting
+ if (porting::getInputDialogState() == -1)
+ return true;
+
std::string fieldname = m_jni_field_name;
m_jni_field_name.clear();
- for (std::vector<FieldSpec>::iterator iter = m_fields.begin();
- iter != m_fields.end(); ++iter) {
-
- if (iter->fname != fieldname) {
+ for (const FieldSpec &field : m_fields) {
+ if (field.fname != fieldname)
continue;
- }
- IGUIElement *tochange = getElementFromId(iter->fid, true);
- if (tochange == 0) {
- return false;
- }
+ IGUIElement *element = getElementFromId(field.fid, true);
- if (tochange->getType() != irr::gui::EGUIET_EDIT_BOX) {
+ if (!element || element->getType() != irr::gui::EGUIET_EDIT_BOX)
return false;
- }
std::string text = porting::getInputDialogValue();
-
- ((gui::IGUIEditBox *)tochange)->setText(utf8_to_wide(text).c_str());
+ ((gui::IGUIEditBox *)element)->setText(utf8_to_wide(text).c_str());
}
return false;
}
@@ -3197,6 +3417,7 @@ void GUIFormSpecMenu::drawMenu()
const std::string &newform = m_form_src->getForm();
if (newform != m_formspec_string) {
m_formspec_string = newform;
+ m_is_form_regenerated = false;
regenerateGui(m_screensize_old);
}
}
@@ -3248,12 +3469,19 @@ void GUIFormSpecMenu::drawMenu()
e->setVisible(false);
}
+ // Some elements are only visible while being drawn
+ for (gui::IGUIElement *e : m_clickthrough_elements)
+ e->setVisible(true);
+
/*
Call base class
(This is where all the drawing happens.)
*/
gui::IGUIElement::draw();
+ for (gui::IGUIElement *e : m_clickthrough_elements)
+ e->setVisible(false);
+
// Draw hovered item tooltips
for (const std::string &tooltip : m_hovered_item_tooltips) {
showTooltip(utf8_to_wide(tooltip), m_default_tooltip_color,
@@ -3286,8 +3514,12 @@ void GUIFormSpecMenu::drawMenu()
bool hovered_element_found = false;
if (hovered != NULL) {
- s32 id = hovered->getID();
+ if (m_show_debug) {
+ core::rect<s32> rect = hovered->getAbsoluteClippingRect();
+ driver->draw2DRectangle(0x22FFFF00, rect, &rect);
+ }
+ s32 id = hovered->getID();
u64 delta = 0;
if (id == -1) {
m_old_tooltip_id = id;
@@ -3367,6 +3599,10 @@ void GUIFormSpecMenu::showTooltip(const std::wstring &text,
tooltip_offset_y = 0;
if (m_pointer.X > (s32)screenSize.X / 2)
tooltip_offset_x = -(tooltip_offset_x + tooltip_width);
+
+ // Hide tooltip after ETIE_LEFT_UP
+ if (m_pointer.X == 0)
+ return;
#endif
// Calculate and set the tooltip position
@@ -3530,10 +3766,14 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no)
}
s32 selected = e->getSelected();
if (selected >= 0) {
- std::vector<std::string> *dropdown_values =
- getDropDownValues(s.fname);
- if (dropdown_values && selected < (s32)dropdown_values->size()) {
- fields[name] = (*dropdown_values)[selected];
+ if (m_dropdown_index_event.find(s.fname) !=
+ m_dropdown_index_event.end()) {
+ fields[name] = std::to_string(selected + 1);
+ } else {
+ std::vector<std::string> *dropdown_values =
+ getDropDownValues(s.fname);
+ if (dropdown_values && selected < (s32)dropdown_values->size())
+ fields[name] = (*dropdown_values)[selected];
}
}
} else if (s.ftype == f_TabHeader) {
@@ -3603,17 +3843,6 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no)
}
}
-static bool isChild(gui::IGUIElement *tocheck, gui::IGUIElement *parent)
-{
- while (tocheck) {
- if (tocheck == parent) {
- return true;
- }
- tocheck = tocheck->getParent();
- }
- return false;
-}
-
bool GUIFormSpecMenu::preprocessEvent(const SEvent& event)
{
// The IGUITabControl renders visually using the skin's selected
@@ -3674,22 +3903,6 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent& event)
}
}
- if (event.EventType == EET_MOUSE_INPUT_EVENT) {
- s32 x = event.MouseInput.X;
- s32 y = event.MouseInput.Y;
- gui::IGUIElement *hovered =
- Environment->getRootGUIElement()->getElementFromPoint(
- core::position2d<s32>(x, y));
- if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) {
- m_old_tooltip_id = -1;
- }
- if (!isChild(hovered, this)) {
- if (DoubleClickDetection(event)) {
- return true;
- }
- }
- }
-
if (event.EventType == irr::EET_JOYSTICK_INPUT_EVENT) {
/* TODO add a check like:
if (event.JoystickEvent != joystick_we_listen_for)
@@ -3712,64 +3925,6 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent& event)
return GUIModalMenu::preprocessEvent(event);
}
-/******************************************************************************/
-bool GUIFormSpecMenu::DoubleClickDetection(const SEvent event)
-{
- /* The following code is for capturing double-clicks of the mouse button
- * and translating the double-click into an EET_KEY_INPUT_EVENT event
- * -- which closes the form -- under some circumstances.
- *
- * There have been many github issues reporting this as a bug even though it
- * was an intended feature. For this reason, remapping the double-click as
- * an ESC must be explicitly set when creating this class via the
- * /p remap_dbl_click parameter of the constructor.
- */
-
- if (!m_remap_dbl_click)
- return false;
-
- if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) {
- m_doubleclickdetect[0].pos = m_doubleclickdetect[1].pos;
- m_doubleclickdetect[0].time = m_doubleclickdetect[1].time;
-
- m_doubleclickdetect[1].pos = m_pointer;
- m_doubleclickdetect[1].time = porting::getTimeMs();
- }
- else if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) {
- u64 delta = porting::getDeltaMs(m_doubleclickdetect[0].time, porting::getTimeMs());
- if (delta > 400) {
- return false;
- }
-
- double squaredistance =
- m_doubleclickdetect[0].pos
- .getDistanceFromSQ(m_doubleclickdetect[1].pos);
-
- if (squaredistance > (30*30)) {
- return false;
- }
-
- SEvent* translated = new SEvent();
- assert(translated != 0);
- //translate doubleclick to escape
- memset(translated, 0, sizeof(SEvent));
- translated->EventType = irr::EET_KEY_INPUT_EVENT;
- translated->KeyInput.Key = KEY_ESCAPE;
- translated->KeyInput.Control = false;
- translated->KeyInput.Shift = false;
- translated->KeyInput.PressedDown = true;
- translated->KeyInput.Char = 0;
- OnEvent(*translated);
-
- // no need to send the key up event as we're already deleted
- // and no one else did notice this event
- delete translated;
- return true;
- }
-
- return false;
-}
-
void GUIFormSpecMenu::tryClose()
{
if (m_allowclose) {
@@ -3809,6 +3964,10 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
(kp == getKeySetting("keymap_screenshot"))) {
m_client->makeScreenshot();
}
+
+ if (event.KeyInput.PressedDown && kp == getKeySetting("keymap_toggle_debug"))
+ m_show_debug = !m_show_debug;
+
if (event.KeyInput.PressedDown &&
(event.KeyInput.Key==KEY_RETURN ||
event.KeyInput.Key==KEY_UP ||
@@ -4316,6 +4475,12 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
}
}
+ if (event.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED) {
+ // move scroll_containers
+ for (const std::pair<std::string, GUIScrollContainer *> &c : m_scroll_containers)
+ c.second->onScrollEvent(event.GUIEvent.Caller);
+ }
+
if (event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) {
if (event.GUIEvent.Caller->getID() > 257) {
bool close_on_enter = true;
@@ -4404,25 +4569,46 @@ std::wstring GUIFormSpecMenu::getLabelByID(s32 id)
return L"";
}
-StyleSpec GUIFormSpecMenu::getStyleForElement(const std::string &type,
+StyleSpec GUIFormSpecMenu::getDefaultStyleForElement(const std::string &type,
const std::string &name, const std::string &parent_type) {
- StyleSpec ret;
+ return getStyleForElement(type, name, parent_type)[StyleSpec::STATE_DEFAULT];
+}
+
+std::array<StyleSpec, StyleSpec::NUM_STATES> GUIFormSpecMenu::getStyleForElement(
+ const std::string &type, const std::string &name, const std::string &parent_type)
+{
+ std::array<StyleSpec, StyleSpec::NUM_STATES> ret;
+
+ auto it = theme_by_type.find("*");
+ if (it != theme_by_type.end()) {
+ for (const StyleSpec &spec : it->second)
+ ret[(u32)spec.getState()] |= spec;
+ }
+
+ it = theme_by_name.find("*");
+ if (it != theme_by_name.end()) {
+ for (const StyleSpec &spec : it->second)
+ ret[(u32)spec.getState()] |= spec;
+ }
if (!parent_type.empty()) {
- auto it = theme_by_type.find(parent_type);
+ it = theme_by_type.find(parent_type);
if (it != theme_by_type.end()) {
- ret |= it->second;
+ for (const StyleSpec &spec : it->second)
+ ret[(u32)spec.getState()] |= spec;
}
}
- auto it = theme_by_type.find(type);
+ it = theme_by_type.find(type);
if (it != theme_by_type.end()) {
- ret |= it->second;
+ for (const StyleSpec &spec : it->second)
+ ret[(u32)spec.getState()] |= spec;
}
it = theme_by_name.find(name);
if (it != theme_by_name.end()) {
- ret |= it->second;
+ for (const StyleSpec &spec : it->second)
+ ret[(u32)spec.getState()] |= spec;
}
return ret;
diff --git a/src/gui/guiFormSpecMenu.h b/src/gui/guiFormSpecMenu.h
index 184b26f3c..613acaa04 100644
--- a/src/gui/guiFormSpecMenu.h
+++ b/src/gui/guiFormSpecMenu.h
@@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "inventorymanager.h"
#include "modalMenu.h"
#include "guiInventoryList.h"
+#include "guiScrollBar.h"
#include "guiTable.h"
#include "network/networkprotocol.h"
#include "client/joystick_controller.h"
@@ -37,8 +38,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class InventoryManager;
class ISimpleTextureSource;
class Client;
-class GUIScrollBar;
class TexturePool;
+class GUIScrollContainer;
typedef enum {
f_Button,
@@ -167,6 +168,7 @@ public:
{
m_formspec_string = formspec_string;
m_current_inventory_location = current_inventory_location;
+ m_is_form_regenerated = false;
regenerateGui(m_screensize_old);
}
@@ -274,11 +276,13 @@ protected:
v2s32 getRealCoordinateBasePos(const std::vector<std::string> &v_pos);
v2s32 getRealCoordinateGeometry(const std::vector<std::string> &v_geom);
- std::unordered_map<std::string, StyleSpec> theme_by_type;
- std::unordered_map<std::string, StyleSpec> theme_by_name;
+ std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_type;
+ std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_name;
std::unordered_set<std::string> property_warned;
- StyleSpec getStyleForElement(const std::string &type,
+ StyleSpec getDefaultStyleForElement(const std::string &type,
+ const std::string &name="", const std::string &parent_type="");
+ std::array<StyleSpec, StyleSpec::NUM_STATES> getStyleForElement(const std::string &type,
const std::string &name="", const std::string &parent_type="");
v2s32 padding;
@@ -296,10 +300,15 @@ protected:
std::string m_formspec_prepend;
InventoryLocation m_current_inventory_location;
+ // Default true because we can't control regeneration on resizing, but
+ // we can control cases when the formspec is shown intentionally.
+ bool m_is_form_regenerated = true;
+
std::vector<GUIInventoryList *> m_inventorylists;
std::vector<ListRingSpec> m_inventory_rings;
std::vector<gui::IGUIElement *> m_backgrounds;
std::unordered_map<std::string, bool> field_close_on_enter;
+ std::unordered_map<std::string, bool> m_dropdown_index_event;
std::vector<FieldSpec> m_fields;
std::vector<std::pair<FieldSpec, GUITable *>> m_tables;
std::vector<std::pair<FieldSpec, gui::IGUICheckBox *>> m_checkboxes;
@@ -307,6 +316,8 @@ protected:
std::vector<std::pair<gui::IGUIElement *, TooltipSpec>> m_tooltip_rects;
std::vector<std::pair<FieldSpec, GUIScrollBar *>> m_scrollbars;
std::vector<std::pair<FieldSpec, std::vector<std::string>>> m_dropdowns;
+ std::vector<gui::IGUIElement *> m_clickthrough_elements;
+ std::vector<std::pair<std::string, GUIScrollContainer *>> m_scroll_containers;
GUIInventoryList::ItemSpec *m_selected_item = nullptr;
u16 m_selected_amount = 0;
@@ -333,13 +344,14 @@ protected:
video::SColor m_default_tooltip_bgcolor;
video::SColor m_default_tooltip_color;
-
private:
IFormSource *m_form_src;
TextDest *m_text_dst;
+ std::string m_last_formname;
u16 m_formspec_version = 1;
std::string m_focused_element = "";
JoystickController *m_joystick;
+ bool m_show_debug = false;
typedef struct {
bool explicit_size;
@@ -352,9 +364,9 @@ private:
core::rect<s32> rect;
v2s32 basepos;
v2u32 screensize;
- std::string focused_fieldname;
GUITable::TableOptions table_options;
GUITable::TableColumns table_columns;
+ gui::IGUIElement *current_parent = nullptr;
GUIInventoryList::Options inventorylist_options;
@@ -387,6 +399,8 @@ private:
void parseSize(parserData* data, const std::string &element);
void parseContainer(parserData* data, const std::string &element);
void parseContainerEnd(parserData* data);
+ void parseScrollContainer(parserData *data, const std::string &element);
+ void parseScrollContainerEnd(parserData *data);
void parseList(parserData* data, const std::string &element);
void parseListRing(parserData* data, const std::string &element);
void parseCheckbox(parserData* data, const std::string &element);
@@ -429,6 +443,7 @@ private:
bool parseAnchorDirect(parserData *data, const std::string &element);
void parseAnchor(parserData *data, const std::string &element);
bool parseStyle(parserData *data, const std::string &element, bool style_type);
+ void parseSetFocus(const std::string &element);
void tryClose();
@@ -442,30 +457,8 @@ private:
*/
void legacySortElements(core::list<IGUIElement *>::Iterator from);
- /**
- * check if event is part of a double click
- * @param event event to evaluate
- * @return true/false if a doubleclick was detected
- */
- bool DoubleClickDetection(const SEvent event);
-
- struct clickpos
- {
- v2s32 pos;
- s64 time;
- };
- clickpos m_doubleclickdetect[2];
-
int m_btn_height;
gui::IGUIFont *m_font = nullptr;
-
- /* If true, remap a double-click (or double-tap) action to ESC. This is so
- * that, for example, Android users can double-tap to close a formspec.
- *
- * This value can (currently) only be set by the class constructor
- * and the default value for the setting is true.
- */
- bool m_remap_dbl_click;
};
class FormspecFormSource: public IFormSource
diff --git a/src/gui/guiHyperText.cpp b/src/gui/guiHyperText.cpp
index 482b74f04..88931cdf9 100644
--- a/src/gui/guiHyperText.cpp
+++ b/src/gui/guiHyperText.cpp
@@ -107,7 +107,7 @@ ParsedText::ParsedText(const wchar_t *text)
m_root_tag.style["underline"] = "false";
m_root_tag.style["halign"] = "left";
m_root_tag.style["color"] = "#EEEEEE";
- m_root_tag.style["hovercolor"] = m_root_tag.style["color"];
+ m_root_tag.style["hovercolor"] = "#FF0000";
m_active_tags.push_front(&m_root_tag);
m_style = m_root_tag.style;
@@ -115,7 +115,6 @@ ParsedText::ParsedText(const wchar_t *text)
// Default simple tags definitions
StyleList style;
- style["hovercolor"] = "#FF0000";
style["color"] = "#0000FF";
style["underline"] = "true";
m_elementtags["action"] = style;
@@ -918,20 +917,20 @@ void TextDrawer::place(const core::rect<s32> &dest_rect)
// Draw text in a rectangle with a given offset. Items are actually placed in
// relative (to upper left corner) coordinates.
-void TextDrawer::draw(const core::rect<s32> &dest_rect,
+void TextDrawer::draw(const core::rect<s32> &clip_rect,
const core::position2d<s32> &dest_offset)
{
irr::video::IVideoDriver *driver = m_environment->getVideoDriver();
- core::position2d<s32> offset = dest_rect.UpperLeftCorner + dest_offset;
+ core::position2d<s32> offset = dest_offset;
offset.Y += m_voffset;
if (m_text.background_type == ParsedText::BACKGROUND_COLOR)
- driver->draw2DRectangle(m_text.background_color, dest_rect);
+ driver->draw2DRectangle(m_text.background_color, clip_rect);
for (auto &p : m_text.m_paragraphs) {
for (auto &el : p.elements) {
core::rect<s32> rect(el.pos + offset, el.dim);
- if (!rect.isRectCollided(dest_rect))
+ if (!rect.isRectCollided(clip_rect))
continue;
switch (el.type) {
@@ -948,7 +947,7 @@ void TextDrawer::draw(const core::rect<s32> &dest_rect,
if (el.type == ParsedText::ELEMENT_TEXT)
el.font->draw(el.text, rect, color, false, true,
- &dest_rect);
+ &clip_rect);
if (el.underline && el.drawwidth) {
s32 linepos = el.pos.Y + offset.Y +
@@ -959,7 +958,7 @@ void TextDrawer::draw(const core::rect<s32> &dest_rect,
el.pos.X + offset.X + el.drawwidth,
linepos + (el.baseline >> 3));
- driver->draw2DRectangle(color, linerect, &dest_rect);
+ driver->draw2DRectangle(color, linerect, &clip_rect);
}
} break;
@@ -973,7 +972,7 @@ void TextDrawer::draw(const core::rect<s32> &dest_rect,
irr::core::rect<s32>(
core::position2d<s32>(0, 0),
texture->getOriginalSize()),
- &dest_rect, 0, true);
+ &clip_rect, 0, true);
} break;
case ParsedText::ELEMENT_ITEM: {
@@ -983,7 +982,7 @@ void TextDrawer::draw(const core::rect<s32> &dest_rect,
drawItemStack(
m_environment->getVideoDriver(),
- g_fontengine->getFont(), item, rect, &dest_rect,
+ g_fontengine->getFont(), item, rect, &clip_rect,
m_client, IT_ROT_OTHER, el.angle, el.rotation
);
} break;
@@ -1054,12 +1053,14 @@ void GUIHyperText::checkHover(s32 X, s32 Y)
}
}
+#ifndef HAVE_TOUCHSCREENGUI
if (m_drawer.m_hovertag)
RenderingEngine::get_raw_device()->getCursorControl()->setActiveIcon(
gui::ECI_HAND);
else
RenderingEngine::get_raw_device()->getCursorControl()->setActiveIcon(
gui::ECI_NORMAL);
+#endif
}
bool GUIHyperText::OnEvent(const SEvent &event)
@@ -1075,8 +1076,12 @@ bool GUIHyperText::OnEvent(const SEvent &event)
if (event.EventType == EET_GUI_EVENT &&
event.GUIEvent.EventType == EGET_ELEMENT_LEFT) {
m_drawer.m_hovertag = nullptr;
- RenderingEngine::get_raw_device()->getCursorControl()->setActiveIcon(
- gui::ECI_NORMAL);
+#ifndef HAVE_TOUCHSCREENGUI
+ gui::ICursorControl *cursor_control =
+ RenderingEngine::get_raw_device()->getCursorControl();
+ if (cursor_control->isVisible())
+ cursor_control->setActiveIcon(gui::ECI_NORMAL);
+#endif
}
if (event.EventType == EET_MOUSE_INPUT_EVENT) {
@@ -1089,6 +1094,7 @@ bool GUIHyperText::OnEvent(const SEvent &event)
m_text_scrollpos.Y = -m_vscrollbar->getPos();
m_drawer.draw(m_display_text_rect, m_text_scrollpos);
checkHover(event.MouseInput.X, event.MouseInput.Y);
+ return true;
} else if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) {
ParsedText::Element *element = getElementAt(
@@ -1146,7 +1152,8 @@ void GUIHyperText::draw()
m_vscrollbar->setPos(0);
m_vscrollbar->setVisible(false);
}
- m_drawer.draw(m_display_text_rect, m_text_scrollpos);
+ m_drawer.draw(AbsoluteClippingRect,
+ m_display_text_rect.UpperLeftCorner + m_text_scrollpos);
// draw children
IGUIElement::draw();
diff --git a/src/gui/guiHyperText.h b/src/gui/guiHyperText.h
index c55f8a705..5b936262e 100644
--- a/src/gui/guiHyperText.h
+++ b/src/gui/guiHyperText.h
@@ -174,7 +174,7 @@ public:
void place(const core::rect<s32> &dest_rect);
inline s32 getHeight() { return m_height; };
- void draw(const core::rect<s32> &dest_rect,
+ void draw(const core::rect<s32> &clip_rect,
const core::position2d<s32> &dest_offset);
ParsedText::Element *getElementAt(core::position2d<s32> pos);
ParsedText::Tag *m_hovertag;
diff --git a/src/gui/guiKeyChangeMenu.cpp b/src/gui/guiKeyChangeMenu.cpp
index 3f270fc7a..eb641d952 100644
--- a/src/gui/guiKeyChangeMenu.cpp
+++ b/src/gui/guiKeyChangeMenu.cpp
@@ -82,8 +82,10 @@ enum
};
GUIKeyChangeMenu::GUIKeyChangeMenu(gui::IGUIEnvironment* env,
- gui::IGUIElement* parent, s32 id, IMenuManager *menumgr) :
-GUIModalMenu(env, parent, id, menumgr)
+ gui::IGUIElement* parent, s32 id, IMenuManager *menumgr,
+ ISimpleTextureSource *tsrc) :
+ GUIModalMenu(env, parent, id, menumgr),
+ m_tsrc(tsrc)
{
init_keys();
}
@@ -157,7 +159,7 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
core::rect<s32> rect(0, 0, 100 * s, 30 * s);
rect += topleft + v2s32(offset.X + 150 * s, offset.Y - 5 * s);
const wchar_t *text = wgettext(k->key.name());
- k->button = GUIButton::addButton(Environment, rect, this, k->id, text);
+ k->button = GUIButton::addButton(Environment, rect, m_tsrc, this, k->id, text);
delete[] text;
}
if ((i + 1) % KMaxButtonPerColumns == 0) {
@@ -217,14 +219,14 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
core::rect<s32> rect(0, 0, 100 * s, 30 * s);
rect += topleft + v2s32(size.X / 2 - 105 * s, size.Y - 40 * s);
const wchar_t *text = wgettext("Save");
- GUIButton::addButton(Environment, rect, this, GUI_ID_BACK_BUTTON, text);
+ GUIButton::addButton(Environment, rect, m_tsrc, this, GUI_ID_BACK_BUTTON, text);
delete[] text;
}
{
core::rect<s32> rect(0, 0, 100 * s, 30 * s);
rect += topleft + v2s32(size.X / 2 + 5 * s, size.Y - 40 * s);
const wchar_t *text = wgettext("Cancel");
- GUIButton::addButton(Environment, rect, this, GUI_ID_ABORT_BUTTON, text);
+ GUIButton::addButton(Environment, rect, m_tsrc, this, GUI_ID_ABORT_BUTTON, text);
delete[] text;
}
}
@@ -358,7 +360,7 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent& event)
{
if (!canTakeFocus(event.GUIEvent.Element))
{
- dstream << "GUIMainMenu: Not allowing focus change."
+ infostream << "GUIKeyChangeMenu: Not allowing focus change."
<< std::endl;
// Returning true disables focus change
return true;
diff --git a/src/gui/guiKeyChangeMenu.h b/src/gui/guiKeyChangeMenu.h
index 528827fd9..1c0f40247 100644
--- a/src/gui/guiKeyChangeMenu.h
+++ b/src/gui/guiKeyChangeMenu.h
@@ -28,6 +28,8 @@
#include <string>
#include <vector>
+class ISimpleTextureSource;
+
struct key_setting
{
int id;
@@ -41,7 +43,7 @@ class GUIKeyChangeMenu : public GUIModalMenu
{
public:
GUIKeyChangeMenu(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- IMenuManager *menumgr);
+ IMenuManager *menumgr, ISimpleTextureSource *tsrc);
~GUIKeyChangeMenu();
void removeChildren();
@@ -74,4 +76,5 @@ private:
key_setting *active_key = nullptr;
gui::IGUIStaticText *key_used_text = nullptr;
std::vector<key_setting *> key_settings;
+ ISimpleTextureSource *m_tsrc;
};
diff --git a/src/gui/guiMainMenu.h b/src/gui/guiMainMenu.h
index 43a3b1a33..1dca8bf2d 100644
--- a/src/gui/guiMainMenu.h
+++ b/src/gui/guiMainMenu.h
@@ -20,7 +20,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include "irrlichttypes_extrabloated.h"
-#include "modalMenu.h"
#include <string>
#include <list>
diff --git a/src/gui/guiPasswordChange.cpp b/src/gui/guiPasswordChange.cpp
index af91ce84c..5311c6fef 100644
--- a/src/gui/guiPasswordChange.cpp
+++ b/src/gui/guiPasswordChange.cpp
@@ -38,10 +38,12 @@ const int ID_cancel = 261;
GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment* env,
gui::IGUIElement* parent, s32 id,
IMenuManager *menumgr,
- Client* client
+ Client* client,
+ ISimpleTextureSource *tsrc
):
GUIModalMenu(env, parent, id, menumgr),
- m_client(client)
+ m_client(client),
+ m_tsrc(tsrc)
{
}
@@ -146,14 +148,14 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize)
core::rect<s32> rect(0, 0, 100 * s, 30 * s);
rect = rect + v2s32(size.X / 4 + 56 * s, ypos);
text = wgettext("Change");
- GUIButton::addButton(Environment, rect, this, ID_change, text);
+ GUIButton::addButton(Environment, rect, m_tsrc, this, ID_change, text);
delete[] text;
}
{
core::rect<s32> rect(0, 0, 100 * s, 30 * s);
rect = rect + v2s32(size.X / 4 + 185 * s, ypos);
text = wgettext("Cancel");
- GUIButton::addButton(Environment, rect, this, ID_cancel, text);
+ GUIButton::addButton(Environment, rect, m_tsrc, this, ID_cancel, text);
delete[] text;
}
@@ -234,7 +236,7 @@ bool GUIPasswordChange::OnEvent(const SEvent &event)
if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST &&
isVisible()) {
if (!canTakeFocus(event.GUIEvent.Element)) {
- dstream << "GUIPasswordChange: Not allowing focus change."
+ infostream << "GUIPasswordChange: Not allowing focus change."
<< std::endl;
// Returning true disables focus change
return true;
diff --git a/src/gui/guiPasswordChange.h b/src/gui/guiPasswordChange.h
index 58541a399..7141100c0 100644
--- a/src/gui/guiPasswordChange.h
+++ b/src/gui/guiPasswordChange.h
@@ -23,12 +23,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <string>
class Client;
+class ISimpleTextureSource;
class GUIPasswordChange : public GUIModalMenu
{
public:
GUIPasswordChange(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
- IMenuManager *menumgr, Client *client);
+ IMenuManager *menumgr, Client *client,
+ ISimpleTextureSource *tsrc);
~GUIPasswordChange();
void removeChildren();
@@ -57,4 +59,5 @@ private:
std::wstring m_oldpass = L"";
std::wstring m_newpass = L"";
std::wstring m_newpass_confirm = L"";
+ ISimpleTextureSource *m_tsrc;
};
diff --git a/src/gui/guiScrollContainer.cpp b/src/gui/guiScrollContainer.cpp
new file mode 100644
index 000000000..88cdc7057
--- /dev/null
+++ b/src/gui/guiScrollContainer.cpp
@@ -0,0 +1,70 @@
+/*
+Minetest
+Copyright (C) 2020 DS
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "guiScrollContainer.h"
+
+GUIScrollContainer::GUIScrollContainer(gui::IGUIEnvironment *env,
+ gui::IGUIElement *parent, s32 id, const core::rect<s32> &rectangle,
+ const std::string &orientation, f32 scrollfactor) :
+ gui::IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, rectangle),
+ m_scrollbar(nullptr), m_scrollfactor(scrollfactor)
+{
+ if (orientation == "vertical")
+ m_orientation = VERTICAL;
+ else if (orientation == "horizontal")
+ m_orientation = HORIZONTAL;
+ else
+ m_orientation = UNDEFINED;
+}
+
+bool GUIScrollContainer::OnEvent(const SEvent &event)
+{
+ if (event.EventType == EET_MOUSE_INPUT_EVENT &&
+ event.MouseInput.Event == EMIE_MOUSE_WHEEL &&
+ !event.MouseInput.isLeftPressed() && m_scrollbar) {
+ Environment->setFocus(m_scrollbar);
+ bool retval = m_scrollbar->OnEvent(event);
+
+ // a hacky fix for updating the hovering and co.
+ IGUIElement *hovered_elem = getElementFromPoint(core::position2d<s32>(
+ event.MouseInput.X, event.MouseInput.Y));
+ SEvent mov_event = event;
+ mov_event.MouseInput.Event = EMIE_MOUSE_MOVED;
+ Environment->postEventFromUser(mov_event);
+ if (hovered_elem)
+ hovered_elem->OnEvent(mov_event);
+
+ return retval;
+ }
+
+ return IGUIElement::OnEvent(event);
+}
+
+void GUIScrollContainer::updateScrolling()
+{
+ s32 pos = m_scrollbar->getPos();
+ core::rect<s32> rect = getRelativePosition();
+
+ if (m_orientation == VERTICAL)
+ rect.UpperLeftCorner.Y = pos * m_scrollfactor;
+ else if (m_orientation == HORIZONTAL)
+ rect.UpperLeftCorner.X = pos * m_scrollfactor;
+
+ setRelativePosition(rect);
+}
diff --git a/src/gui/guiScrollContainer.h b/src/gui/guiScrollContainer.h
new file mode 100644
index 000000000..a0306291e
--- /dev/null
+++ b/src/gui/guiScrollContainer.h
@@ -0,0 +1,60 @@
+/*
+Minetest
+Copyright (C) 2020 DS
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#pragma once
+
+#include "irrlichttypes_extrabloated.h"
+#include "util/string.h"
+#include "guiScrollBar.h"
+
+class GUIScrollContainer : public gui::IGUIElement
+{
+public:
+ GUIScrollContainer(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id,
+ const core::rect<s32> &rectangle, const std::string &orientation,
+ f32 scrollfactor);
+
+ virtual bool OnEvent(const SEvent &event) override;
+
+ inline void onScrollEvent(gui::IGUIElement *caller)
+ {
+ if (caller == m_scrollbar)
+ updateScrolling();
+ }
+
+ inline void setScrollBar(GUIScrollBar *scrollbar)
+ {
+ m_scrollbar = scrollbar;
+ updateScrolling();
+ }
+
+private:
+ enum OrientationEnum
+ {
+ VERTICAL,
+ HORIZONTAL,
+ UNDEFINED
+ };
+
+ GUIScrollBar *m_scrollbar;
+ OrientationEnum m_orientation;
+ f32 m_scrollfactor;
+
+ void updateScrolling();
+};
diff --git a/src/gui/guiVolumeChange.cpp b/src/gui/guiVolumeChange.cpp
index 9428cde83..f17cfa986 100644
--- a/src/gui/guiVolumeChange.cpp
+++ b/src/gui/guiVolumeChange.cpp
@@ -38,9 +38,10 @@ const int ID_soundMuteButton = 266;
GUIVolumeChange::GUIVolumeChange(gui::IGUIEnvironment* env,
gui::IGUIElement* parent, s32 id,
- IMenuManager *menumgr
+ IMenuManager *menumgr, ISimpleTextureSource *tsrc
):
- GUIModalMenu(env, parent, id, menumgr)
+ GUIModalMenu(env, parent, id, menumgr),
+ m_tsrc(tsrc)
{
}
@@ -104,7 +105,7 @@ void GUIVolumeChange::regenerateGui(v2u32 screensize)
core::rect<s32> rect(0, 0, 80 * s, 30 * s);
rect = rect + v2s32(size.X / 2 - 80 * s / 2, size.Y / 2 + 55 * s);
const wchar_t *text = wgettext("Exit");
- GUIButton::addButton(Environment, rect, this, ID_soundExitButton, text);
+ GUIButton::addButton(Environment, rect, m_tsrc, this, ID_soundExitButton, text);
delete[] text;
}
{
@@ -170,7 +171,7 @@ bool GUIVolumeChange::OnEvent(const SEvent& event)
if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST
&& isVisible()) {
if (!canTakeFocus(event.GUIEvent.Element)) {
- dstream << "GUIMainMenu: Not allowing focus change."
+ infostream << "GUIVolumeChange: Not allowing focus change."
<< std::endl;
// Returning true disables focus change
return true;
diff --git a/src/gui/guiVolumeChange.h b/src/gui/guiVolumeChange.h
index f4f4e9eea..466e17f9d 100644
--- a/src/gui/guiVolumeChange.h
+++ b/src/gui/guiVolumeChange.h
@@ -23,12 +23,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "modalMenu.h"
#include <string>
+class ISimpleTextureSource;
+
class GUIVolumeChange : public GUIModalMenu
{
public:
GUIVolumeChange(gui::IGUIEnvironment* env,
gui::IGUIElement* parent, s32 id,
- IMenuManager *menumgr);
+ IMenuManager *menumgr, ISimpleTextureSource *tsrc);
~GUIVolumeChange();
void removeChildren();
@@ -46,4 +48,7 @@ public:
protected:
std::wstring getLabelByID(s32 id) { return L""; }
std::string getNameByID(s32 id) { return ""; }
+
+private:
+ ISimpleTextureSource *m_tsrc;
};
diff --git a/src/gui/modalMenu.cpp b/src/gui/modalMenu.cpp
index 8fb6c6f0f..9b1e6dd9c 100644
--- a/src/gui/modalMenu.cpp
+++ b/src/gui/modalMenu.cpp
@@ -29,14 +29,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#endif
// clang-format off
-GUIModalMenu::GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id,
- IMenuManager *menumgr) :
+GUIModalMenu::GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent,
+ s32 id, IMenuManager *menumgr, bool remap_dbl_click) :
IGUIElement(gui::EGUIET_ELEMENT, env, parent, id,
core::rect<s32>(0, 0, 100, 100)),
#ifdef __ANDROID__
m_jni_field_name(""),
#endif
- m_menumgr(menumgr)
+ m_menumgr(menumgr),
+ m_remap_dbl_click(remap_dbl_click)
{
m_gui_scale = g_settings->getFloat("gui_scaling");
#ifdef __ANDROID__
@@ -46,6 +47,12 @@ GUIModalMenu::GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent,
setVisible(true);
Environment->setFocus(this);
m_menumgr->createdMenu(this);
+
+ m_doubleclickdetect[0].time = 0;
+ m_doubleclickdetect[1].time = 0;
+
+ m_doubleclickdetect[0].pos = v2s32(0, 0);
+ m_doubleclickdetect[1].pos = v2s32(0, 0);
}
// clang-format on
@@ -113,6 +120,69 @@ void GUIModalMenu::removeChildren()
}
}
+// clang-format off
+bool GUIModalMenu::DoubleClickDetection(const SEvent &event)
+{
+ /* The following code is for capturing double-clicks of the mouse button
+ * and translating the double-click into an EET_KEY_INPUT_EVENT event
+ * -- which closes the form -- under some circumstances.
+ *
+ * There have been many github issues reporting this as a bug even though it
+ * was an intended feature. For this reason, remapping the double-click as
+ * an ESC must be explicitly set when creating this class via the
+ * /p remap_dbl_click parameter of the constructor.
+ */
+
+ if (!m_remap_dbl_click)
+ return false;
+
+ if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) {
+ m_doubleclickdetect[0].pos = m_doubleclickdetect[1].pos;
+ m_doubleclickdetect[0].time = m_doubleclickdetect[1].time;
+
+ m_doubleclickdetect[1].pos = m_pointer;
+ m_doubleclickdetect[1].time = porting::getTimeMs();
+ } else if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) {
+ u64 delta = porting::getDeltaMs(
+ m_doubleclickdetect[0].time, porting::getTimeMs());
+ if (delta > 400)
+ return false;
+
+ double squaredistance = m_doubleclickdetect[0].pos.
+ getDistanceFromSQ(m_doubleclickdetect[1].pos);
+
+ if (squaredistance > (30 * 30)) {
+ return false;
+ }
+
+ SEvent translated{};
+ // translate doubleclick to escape
+ translated.EventType = EET_KEY_INPUT_EVENT;
+ translated.KeyInput.Key = KEY_ESCAPE;
+ translated.KeyInput.Control = false;
+ translated.KeyInput.Shift = false;
+ translated.KeyInput.PressedDown = true;
+ translated.KeyInput.Char = 0;
+ OnEvent(translated);
+
+ return true;
+ }
+
+ return false;
+}
+// clang-format on
+
+static bool isChild(gui::IGUIElement *tocheck, gui::IGUIElement *parent)
+{
+ while (tocheck) {
+ if (tocheck == parent) {
+ return true;
+ }
+ tocheck = tocheck->getParent();
+ }
+ return false;
+}
+
bool GUIModalMenu::preprocessEvent(const SEvent &event)
{
#ifdef __ANDROID__
@@ -153,8 +223,8 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event)
if (((gui::IGUIEditBox *)hovered)->isPasswordBox())
type = 3;
- porting::showInputDialog(gettext("ok"), "",
- wide_to_utf8(((gui::IGUIEditBox *)hovered)->getText()), type);
+ porting::showInputDialog(gettext("OK"), "",
+ wide_to_utf8(((gui::IGUIEditBox *)hovered)->getText()), type);
return retval;
}
}
@@ -167,18 +237,17 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event)
if (!root) {
errorstream << "GUIModalMenu::preprocessEvent"
- << " unable to get root element" << std::endl;
+ << " unable to get root element" << std::endl;
return false;
}
- gui::IGUIElement *hovered = root->getElementFromPoint(
- core::position2d<s32>(event.TouchInput.X, event.TouchInput.Y));
+ gui::IGUIElement *hovered =
+ root->getElementFromPoint(core::position2d<s32>(
+ event.TouchInput.X, event.TouchInput.Y));
translated.MouseInput.X = event.TouchInput.X;
translated.MouseInput.Y = event.TouchInput.Y;
translated.MouseInput.Control = false;
- bool dont_send_event = false;
-
if (event.TouchInput.touchedCount == 1) {
switch (event.TouchInput.Event) {
case ETIE_PRESSED_DOWN:
@@ -205,11 +274,7 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event)
m_down_pos = v2s32(0, 0);
break;
default:
- dont_send_event = true;
- // this is not supposed to happen
- errorstream << "GUIModalMenu::preprocessEvent"
- << " unexpected usecase Event="
- << event.TouchInput.Event << std::endl;
+ break;
}
} else if ((event.TouchInput.touchedCount == 2) &&
(event.TouchInput.Event == ETIE_PRESSED_DOWN)) {
@@ -219,51 +284,51 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event)
translated.MouseInput.ButtonStates = EMBSM_LEFT | EMBSM_RIGHT;
translated.MouseInput.X = m_pointer.X;
translated.MouseInput.Y = m_pointer.Y;
- if (hovered) {
+ if (hovered)
hovered->OnEvent(translated);
- }
translated.MouseInput.Event = EMIE_RMOUSE_LEFT_UP;
translated.MouseInput.ButtonStates = EMBSM_LEFT;
- if (hovered) {
+ if (hovered)
hovered->OnEvent(translated);
- }
- dont_send_event = true;
- }
- // ignore unhandled 2 touch events ... accidental moving for example
- else if (event.TouchInput.touchedCount == 2) {
- dont_send_event = true;
- }
- else if (event.TouchInput.touchedCount > 2) {
- errorstream << "GUIModalMenu::preprocessEvent"
- << " to many multitouch events "
- << event.TouchInput.touchedCount << " ignoring them"
- << std::endl;
- }
- if (dont_send_event) {
+ return true;
+ } else {
+ // ignore unhandled 2 touch events (accidental moving for example)
return true;
}
// check if translated event needs to be preprocessed again
- if (preprocessEvent(translated)) {
+ if (preprocessEvent(translated))
return true;
- }
+
if (hovered) {
grab();
bool retval = hovered->OnEvent(translated);
- if (event.TouchInput.Event == ETIE_LEFT_UP) {
+ if (event.TouchInput.Event == ETIE_LEFT_UP)
// reset pointer
m_pointer = v2s32(0, 0);
- }
+
drop();
return retval;
}
}
- // clang-format on
#endif
+
+ if (event.EventType == EET_MOUSE_INPUT_EVENT) {
+ s32 x = event.MouseInput.X;
+ s32 y = event.MouseInput.Y;
+ gui::IGUIElement *hovered =
+ Environment->getRootGUIElement()->getElementFromPoint(
+ core::position2d<s32>(x, y));
+ if (!isChild(hovered, this)) {
+ if (DoubleClickDetection(event)) {
+ return true;
+ }
+ }
+ }
return false;
}
@@ -271,14 +336,12 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event)
bool GUIModalMenu::hasAndroidUIInput()
{
// no dialog shown
- if (m_jni_field_name.empty()) {
+ if (m_jni_field_name.empty())
return false;
- }
// still waiting
- if (porting::getInputDialogState() == -1) {
+ if (porting::getInputDialogState() == -1)
return true;
- }
// no value abort dialog processing
if (porting::getInputDialogState() != 0) {
diff --git a/src/gui/modalMenu.h b/src/gui/modalMenu.h
index 5bd70bb84..1cb687f82 100644
--- a/src/gui/modalMenu.h
+++ b/src/gui/modalMenu.h
@@ -39,7 +39,7 @@ class GUIModalMenu : public gui::IGUIElement
{
public:
GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id,
- IMenuManager *menumgr);
+ IMenuManager *menumgr, bool remap_dbl_click = true);
virtual ~GUIModalMenu();
void allowFocusRemoval(bool allow);
@@ -50,8 +50,8 @@ public:
virtual void regenerateGui(v2u32 screensize) = 0;
virtual void drawMenu() = 0;
- virtual bool preprocessEvent(const SEvent& event);
- virtual bool OnEvent(const SEvent& event) { return false; };
+ virtual bool preprocessEvent(const SEvent &event);
+ virtual bool OnEvent(const SEvent &event) { return false; };
virtual bool pausesGame() { return false; } // Used for pause menu
#ifdef __ANDROID__
virtual bool getAndroidUIInput() { return false; }
@@ -62,6 +62,13 @@ protected:
virtual std::wstring getLabelByID(s32 id) = 0;
virtual std::string getNameByID(s32 id) = 0;
+ /**
+ * check if event is part of a double click
+ * @param event event to evaluate
+ * @return true/false if a doubleclick was detected
+ */
+ bool DoubleClickDetection(const SEvent &event);
+
v2s32 m_pointer;
v2s32 m_old_pointer; // Mouse position after previous mouse event
v2u32 m_screensize_old;
@@ -73,8 +80,23 @@ protected:
#ifdef HAVE_TOUCHSCREENGUI
bool m_touchscreen_visible = true;
#endif
+
private:
+ struct clickpos
+ {
+ v2s32 pos;
+ s64 time;
+ };
+ clickpos m_doubleclickdetect[2];
+
IMenuManager *m_menumgr;
+ /* If true, remap a double-click (or double-tap) action to ESC. This is so
+ * that, for example, Android users can double-tap to close a formspec.
+ *
+ * This value can (currently) only be set by the class constructor
+ * and the default value for the setting is true.
+ */
+ bool m_remap_dbl_click;
// This might be necessary to expose to the implementation if it
// wants to launch other menus
bool m_allow_focus_removal = false;
diff --git a/src/gui/touchscreengui.cpp b/src/gui/touchscreengui.cpp
index 94e331f72..0d64aa618 100644
--- a/src/gui/touchscreengui.cpp
+++ b/src/gui/touchscreengui.cpp
@@ -34,19 +34,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <ISceneCollisionManager.h>
-// Very slow button repeat frequency (in seconds)
-#define SLOW_BUTTON_REPEAT (1.0f)
-
using namespace irr::core;
-const char **touchgui_button_imagenames = (const char *[]) {
+const char **button_imagenames = (const char *[]) {
"jump_btn.png",
"down.png",
"zoom.png",
"aux_btn.png"
};
-const char **touchgui_joystick_imagenames = (const char *[]) {
+const char **joystick_imagenames = (const char *[]) {
"joystick_off.png",
"joystick_bg.png",
"joystick_center.png"
@@ -113,15 +110,17 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id)
case range_id:
key = "rangeselect";
break;
+ default:
+ break;
}
- assert(key != "");
+ assert(!key.empty());
return keyname_to_keycode(g_settings->get("keymap_" + key).c_str());
}
TouchScreenGUI *g_touchscreengui;
static void load_button_texture(button_info *btn, const char *path,
- rect<s32> button_rect, ISimpleTextureSource *tsrc, video::IVideoDriver *driver)
+ const rect<s32> &button_rect, ISimpleTextureSource *tsrc, video::IVideoDriver *driver)
{
unsigned int tid;
video::ITexture *texture = guiScalingImageButton(driver,
@@ -141,7 +140,7 @@ static void load_button_texture(button_info *btn, const char *path,
}
btn->guibutton->setDrawBorder(false);
btn->guibutton->setText(L"");
- }
+ }
}
AutoHideButtonBar::AutoHideButtonBar(IrrlichtDevice *device,
@@ -153,8 +152,8 @@ AutoHideButtonBar::AutoHideButtonBar(IrrlichtDevice *device,
}
void AutoHideButtonBar::init(ISimpleTextureSource *tsrc,
- const char *starter_img, int button_id, v2s32 UpperLeft,
- v2s32 LowerRight, autohide_button_bar_dir dir, float timeout)
+ const char *starter_img, int button_id, const v2s32 &UpperLeft,
+ const v2s32 &LowerRight, autohide_button_bar_dir dir, float timeout)
{
m_texturesource = tsrc;
@@ -166,7 +165,7 @@ void AutoHideButtonBar::init(ISimpleTextureSource *tsrc,
irr::core::rect<int> current_button = rect<s32>(UpperLeft.X, UpperLeft.Y,
LowerRight.X, LowerRight.Y);
- m_starter.guibutton = m_guienv->addButton(current_button, 0, button_id, L"", 0);
+ m_starter.guibutton = m_guienv->addButton(current_button, nullptr, button_id, L"", nullptr);
m_starter.guibutton->grab();
m_starter.repeatcounter = -1;
m_starter.keycode = KEY_OEM_8; // use invalid keycode as it's not relevant
@@ -201,16 +200,14 @@ void AutoHideButtonBar::addButton(touch_gui_button_id button_id,
}
int button_size = 0;
- if ((m_dir == AHBB_Dir_Top_Bottom) || (m_dir == AHBB_Dir_Bottom_Top)) {
+ if ((m_dir == AHBB_Dir_Top_Bottom) || (m_dir == AHBB_Dir_Bottom_Top))
button_size = m_lower_right.X - m_upper_left.X;
- } else {
+ else
button_size = m_lower_right.Y - m_upper_left.Y;
- }
irr::core::rect<int> current_button;
if ((m_dir == AHBB_Dir_Right_Left) || (m_dir == AHBB_Dir_Left_Right)) {
-
int x_start = 0;
int x_end = 0;
@@ -227,8 +224,8 @@ void AutoHideButtonBar::addButton(touch_gui_button_id button_id,
current_button = rect<s32>(x_start, m_upper_left.Y, x_end,
m_lower_right.Y);
} else {
- int y_start = 0;
- int y_end = 0;
+ double y_start = 0;
+ double y_end = 0;
if (m_dir == AHBB_Dir_Top_Bottom) {
y_start = m_lower_right.X + (button_size * 1.25 * m_buttons.size())
@@ -240,12 +237,13 @@ void AutoHideButtonBar::addButton(touch_gui_button_id button_id,
y_start = y_end - button_size;
}
- current_button = rect<s32>(m_upper_left.X, y_start, m_lower_right.Y,
- y_end);
+ current_button = rect<s32>(m_upper_left.X, y_start,
+ m_lower_right.Y, y_end);
}
- button_info *btn = new button_info();
- btn->guibutton = m_guienv->addButton(current_button, 0, button_id, caption, 0);
+ auto *btn = new button_info();
+ btn->guibutton = m_guienv->addButton(current_button,
+ nullptr, button_id, caption, nullptr);
btn->guibutton->grab();
btn->guibutton->setVisible(false);
btn->guibutton->setEnabled(false);
@@ -275,26 +273,23 @@ bool AutoHideButtonBar::isButton(const SEvent &event)
{
IGUIElement *rootguielement = m_guienv->getRootGUIElement();
- if (rootguielement == NULL) {
+ if (rootguielement == nullptr)
return false;
- }
gui::IGUIElement *element = rootguielement->getElementFromPoint(
core::position2d<s32>(event.TouchInput.X, event.TouchInput.Y));
- if (element == NULL) {
+ if (element == nullptr)
return false;
- }
if (m_active) {
// check for all buttons in vector
-
- std::vector<button_info *>::iterator iter = m_buttons.begin();
+ auto iter = m_buttons.begin();
while (iter != m_buttons.end()) {
if ((*iter)->guibutton == element) {
- SEvent *translated = new SEvent();
+ auto *translated = new SEvent();
memset(translated, 0, sizeof(SEvent));
translated->EventType = irr::EET_KEY_INPUT_EVENT;
translated->KeyInput.Key = (*iter)->keycode;
@@ -341,7 +336,7 @@ bool AutoHideButtonBar::isButton(const SEvent &event)
m_active = true;
m_timeout = 0;
- std::vector<button_info*>::iterator iter = m_buttons.begin();
+ auto iter = m_buttons.begin();
while (iter != m_buttons.end()) {
(*iter)->guibutton->setVisible(true);
@@ -355,41 +350,13 @@ bool AutoHideButtonBar::isButton(const SEvent &event)
return false;
}
-bool AutoHideButtonBar::isReleaseButton(int eventID)
-{
- std::vector<int>::iterator id = std::find(m_starter.ids.begin(),
- m_starter.ids.end(), eventID);
-
- if (id != m_starter.ids.end()) {
- m_starter.ids.erase(id);
- return true;
- }
-
- std::vector<button_info *>::iterator iter = m_buttons.begin();
-
- while (iter != m_buttons.end()) {
- std::vector<int>::iterator id = std::find((*iter)->ids.begin(),
- (*iter)->ids.end(), eventID);
-
- if (id != (*iter)->ids.end()) {
- (*iter)->ids.erase(id);
- // TODO handle settings button release
- return true;
- }
- ++iter;
- }
-
- return false;
-}
-
void AutoHideButtonBar::step(float dtime)
{
if (m_active) {
m_timeout += dtime;
- if (m_timeout > m_timeout_value) {
+ if (m_timeout > m_timeout_value)
deactivate();
- }
}
}
@@ -401,11 +368,11 @@ void AutoHideButtonBar::deactivate()
}
m_active = false;
- std::vector<button_info *>::iterator iter = m_buttons.begin();
+ auto iter = m_buttons.begin();
while (iter != m_buttons.end()) {
- (*iter)->guibutton->setVisible(false);
- (*iter)->guibutton->setEnabled(false);
+ (*iter)->guibutton->setVisible(false);
+ (*iter)->guibutton->setEnabled(false);
++iter;
}
}
@@ -416,7 +383,7 @@ void AutoHideButtonBar::hide()
m_starter.guibutton->setVisible(false);
m_starter.guibutton->setEnabled(false);
- std::vector<button_info *>::iterator iter = m_buttons.begin();
+ auto iter = m_buttons.begin();
while (iter != m_buttons.end()) {
(*iter)->guibutton->setVisible(false);
@@ -430,7 +397,7 @@ void AutoHideButtonBar::show()
m_visible = true;
if (m_active) {
- std::vector<button_info *>::iterator iter = m_buttons.begin();
+ auto iter = m_buttons.begin();
while (iter != m_buttons.end()) {
(*iter)->guibutton->setVisible(true);
@@ -450,24 +417,26 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver *receiver)
m_settingsbar(device, receiver),
m_rarecontrolsbar(device, receiver)
{
- for (unsigned int i=0; i < after_last_element_id; i++) {
- m_buttons[i].guibutton = 0;
- m_buttons[i].repeatcounter = -1;
- m_buttons[i].repeatdelay = BUTTON_REPEAT_DELAY;
+ for (auto &button : m_buttons) {
+ button.guibutton = nullptr;
+ button.repeatcounter = -1;
+ button.repeatdelay = BUTTON_REPEAT_DELAY;
}
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_screensize = m_device->getVideoDriver()->getScreenSize();
+ button_size = MYMIN(m_screensize.Y / 4.5f,
+ porting::getDisplayDensity() *
+ g_settings->getFloat("hud_scaling") * 65.0f);
}
-void TouchScreenGUI::initButton(touch_gui_button_id id, rect<s32> button_rect,
- std::wstring caption, bool immediate_release, float repeat_delay)
+void TouchScreenGUI::initButton(touch_gui_button_id id, const rect<s32> &button_rect,
+ const std::wstring &caption, bool immediate_release, float repeat_delay)
{
-
button_info *btn = &m_buttons[id];
- btn->guibutton = m_guienv->addButton(button_rect, 0, id, caption.c_str());
+ btn->guibutton = m_guienv->addButton(button_rect, nullptr, id, caption.c_str());
btn->guibutton->grab();
btn->repeatcounter = -1;
btn->repeatdelay = repeat_delay;
@@ -475,42 +444,29 @@ void TouchScreenGUI::initButton(touch_gui_button_id id, rect<s32> button_rect,
btn->immediate_release = immediate_release;
btn->ids.clear();
- load_button_texture(btn, touchgui_button_imagenames[id], button_rect,
+ load_button_texture(btn, button_imagenames[id], button_rect,
m_texturesource, m_device->getVideoDriver());
}
-button_info *TouchScreenGUI::initJoystickButton(touch_gui_button_id id, rect<s32> button_rect,
- int texture_id, bool visible)
+button_info *TouchScreenGUI::initJoystickButton(touch_gui_button_id id,
+ const rect<s32> &button_rect, int texture_id, bool visible)
{
- button_info *btn = new button_info();
- btn->guibutton = m_guienv->addButton(button_rect, 0, id, L"O");
+ auto *btn = new button_info();
+ btn->guibutton = m_guienv->addButton(button_rect, nullptr, id, L"O");
btn->guibutton->setVisible(visible);
btn->guibutton->grab();
btn->ids.clear();
- load_button_texture(btn, touchgui_joystick_imagenames[texture_id], button_rect,
- m_texturesource, m_device->getVideoDriver());
+ load_button_texture(btn, joystick_imagenames[texture_id],
+ button_rect, m_texturesource, m_device->getVideoDriver());
return btn;
}
-static int getMaxControlPadSize(float density) {
- return 200 * density * g_settings->getFloat("hud_scaling");
-}
-
-int TouchScreenGUI::getGuiButtonSize()
-{
- u32 control_pad_size = MYMIN((2 * m_screensize.Y) / 3,
- getMaxControlPadSize(porting::getDisplayDensity()));
-
- return control_pad_size / 3;
-}
-
void TouchScreenGUI::init(ISimpleTextureSource *tsrc)
{
assert(tsrc);
- u32 button_size = getGuiButtonSize();
m_visible = true;
m_texturesource = tsrc;
@@ -608,35 +564,31 @@ void TouchScreenGUI::init(ISimpleTextureSource *tsrc)
m_rarecontrolsbar.addButton(chat_id, L"Chat", "chat_btn.png");
m_rarecontrolsbar.addButton(inventory_id, L"inv", "inventory_btn.png");
m_rarecontrolsbar.addButton(drop_id, L"drop", "drop_btn.png");
-
}
touch_gui_button_id TouchScreenGUI::getButtonID(s32 x, s32 y)
{
IGUIElement *rootguielement = m_guienv->getRootGUIElement();
- if (rootguielement != NULL) {
+ if (rootguielement != nullptr) {
gui::IGUIElement *element =
rootguielement->getElementFromPoint(core::position2d<s32>(x, y));
- if (element) {
- for (unsigned int i=0; i < after_last_element_id; i++) {
- if (element == m_buttons[i].guibutton) {
+ if (element)
+ for (unsigned int i = 0; i < after_last_element_id; i++)
+ if (element == m_buttons[i].guibutton)
return (touch_gui_button_id) i;
- }
- }
- }
}
+
return after_last_element_id;
}
-touch_gui_button_id TouchScreenGUI::getButtonID(int eventID)
+touch_gui_button_id TouchScreenGUI::getButtonID(size_t eventID)
{
- for (unsigned int i=0; i < after_last_element_id; i++) {
+ for (unsigned int i = 0; i < after_last_element_id; i++) {
button_info *btn = &m_buttons[i];
- std::vector<int>::iterator id =
- std::find(btn->ids.begin(), btn->ids.end(), eventID);
+ auto id = std::find(btn->ids.begin(), btn->ids.end(), eventID);
if (id != btn->ids.end())
return (touch_gui_button_id) i;
@@ -648,55 +600,30 @@ touch_gui_button_id TouchScreenGUI::getButtonID(int eventID)
bool TouchScreenGUI::isHUDButton(const SEvent &event)
{
// check if hud item is pressed
- for (std::map<int, rect<s32> >::iterator iter = m_hud_rects.begin();
- iter != m_hud_rects.end(); ++iter) {
- if (iter->second.isPointInside(
- v2s32(event.TouchInput.X,
- event.TouchInput.Y)
- )) {
- if ( iter->first < 8) {
- SEvent *translated = new SEvent();
- memset(translated, 0, sizeof(SEvent));
- translated->EventType = irr::EET_KEY_INPUT_EVENT;
- translated->KeyInput.Key = (irr::EKEY_CODE) (KEY_KEY_1 + iter->first);
- translated->KeyInput.Control = false;
- translated->KeyInput.Shift = false;
- translated->KeyInput.PressedDown = true;
- m_receiver->OnEvent(*translated);
- m_hud_ids[event.TouchInput.ID] = translated->KeyInput.Key;
- delete translated;
- return true;
- }
+ for (auto &hud_rect : m_hud_rects) {
+ if (hud_rect.second.isPointInside(v2s32(event.TouchInput.X,
+ event.TouchInput.Y))) {
+ auto *translated = new SEvent();
+ memset(translated, 0, sizeof(SEvent));
+ translated->EventType = irr::EET_KEY_INPUT_EVENT;
+ translated->KeyInput.Key = (irr::EKEY_CODE) (KEY_KEY_1 + hud_rect.first);
+ translated->KeyInput.Control = false;
+ translated->KeyInput.Shift = false;
+ translated->KeyInput.PressedDown = true;
+ m_receiver->OnEvent(*translated);
+ m_hud_ids[event.TouchInput.ID] = translated->KeyInput.Key;
+ delete translated;
+ return true;
}
}
return false;
}
-bool TouchScreenGUI::isReleaseHUDButton(int eventID)
-{
- std::map<int, irr::EKEY_CODE>::iterator iter = m_hud_ids.find(eventID);
-
- if (iter != m_hud_ids.end()) {
- SEvent *translated = new SEvent();
- memset(translated, 0, sizeof(SEvent));
- translated->EventType = irr::EET_KEY_INPUT_EVENT;
- translated->KeyInput.Key = iter->second;
- translated->KeyInput.PressedDown = false;
- translated->KeyInput.Control = false;
- translated->KeyInput.Shift = false;
- m_receiver->OnEvent(*translated);
- m_hud_ids.erase(iter);
- delete translated;
- return true;
- }
- return false;
-}
-
void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button,
- int eventID, bool action)
+ size_t eventID, bool action)
{
button_info *btn = &m_buttons[button];
- SEvent *translated = new SEvent();
+ auto *translated = new SEvent();
memset(translated, 0, sizeof(SEvent));
translated->EventType = irr::EET_KEY_INPUT_EVENT;
translated->KeyInput.Key = btn->keycode;
@@ -717,16 +644,16 @@ void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button,
translated->KeyInput.Key = btn->keycode;
m_receiver->OnEvent(*translated);
}
+
// remove event
if ((!action) || (btn->immediate_release)) {
-
- std::vector<int>::iterator pos =
- std::find(btn->ids.begin(), btn->ids.end(), eventID);
+ auto pos = std::find(btn->ids.begin(), btn->ids.end(), eventID);
// has to be in touch list
assert(pos != btn->ids.end());
btn->ids.erase(pos);
- if (btn->ids.size() > 0) { return; }
+ if (!btn->ids.empty())
+ return;
translated->KeyInput.PressedDown = false;
btn->repeatcounter = -1;
@@ -735,30 +662,21 @@ void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button,
delete translated;
}
-
-void TouchScreenGUI::handleReleaseEvent(int evt_id)
+void TouchScreenGUI::handleReleaseEvent(size_t evt_id)
{
touch_gui_button_id button = getButtonID(evt_id);
- // handle button events
+
if (button != after_last_element_id) {
+ // handle button events
handleButtonEvent(button, evt_id, false);
- }
- // handle hud button events
- else if (isReleaseHUDButton(evt_id)) {
- // nothing to do here
- } else if (m_settingsbar.isReleaseButton(evt_id)) {
- // nothing to do here
- } else if (m_rarecontrolsbar.isReleaseButton(evt_id)) {
- // nothing to do here
- }
- // handle the point used for moving view
- else if (evt_id == m_move_id) {
+ } else if (evt_id == m_move_id) {
+ // handle the point used for moving view
m_move_id = -1;
// if this pointer issued a mouse event issue symmetric release here
if (m_move_sent_as_mouse_event) {
- SEvent *translated = new SEvent;
+ auto *translated = new SEvent;
memset(translated, 0, sizeof(SEvent));
translated->EventType = EET_MOUSE_INPUT_EVENT;
translated->MouseInput.X = m_move_downlocation.X;
@@ -769,32 +687,31 @@ void TouchScreenGUI::handleReleaseEvent(int evt_id)
translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP;
m_receiver->OnEvent(*translated);
delete translated;
- }
- else {
+ } else {
// do double tap detection
doubleTapDetection();
}
}
+
// handle joystick
else if (evt_id == m_joystick_id) {
m_joystick_id = -1;
// reset joystick
- for (unsigned int i = 0; i < 4; i ++)
+ for (unsigned int i = 0; i < 4; i++)
m_joystick_status[i] = false;
applyJoystickStatus();
m_joystick_btn_off->guibutton->setVisible(true);
m_joystick_btn_bg->guibutton->setVisible(false);
m_joystick_btn_center->guibutton->setVisible(false);
- }
- else {
+ } else {
infostream
<< "TouchScreenGUI::translateEvent released unknown button: "
<< evt_id << std::endl;
}
- for (std::vector<id_status>::iterator iter = m_known_ids.begin();
+ for (auto iter = m_known_ids.begin();
iter != m_known_ids.end(); ++iter) {
if (iter->id == evt_id) {
m_known_ids.erase(iter);
@@ -806,27 +723,28 @@ void TouchScreenGUI::handleReleaseEvent(int evt_id)
void TouchScreenGUI::translateEvent(const SEvent &event)
{
if (!m_visible) {
- infostream << "TouchScreenGUI::translateEvent got event but not visible?!" << std::endl;
+ infostream
+ << "TouchScreenGUI::translateEvent got event but not visible!"
+ << std::endl;
return;
}
- if (event.EventType != EET_TOUCH_INPUT_EVENT) {
+ if (event.EventType != EET_TOUCH_INPUT_EVENT)
return;
- }
if (event.TouchInput.Event == ETIE_PRESSED_DOWN) {
-
- /* add to own copy of eventlist ...
- * android would provide this information but irrlicht guys don't
+ /*
+ * Add to own copy of event list...
+ * android would provide this information but Irrlicht guys don't
* wanna design a efficient interface
*/
- id_status toadd;
+ id_status toadd{};
toadd.id = event.TouchInput.ID;
toadd.X = event.TouchInput.X;
toadd.Y = event.TouchInput.Y;
m_known_ids.push_back(toadd);
- int eventID = event.TouchInput.ID;
+ size_t eventID = event.TouchInput.ID;
touch_gui_button_id button =
getButtonID(event.TouchInput.X, event.TouchInput.Y);
@@ -846,21 +764,19 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
} else if (m_rarecontrolsbar.isButton(event)) {
m_settingsbar.deactivate();
// already handled in isSettingsBarButton()
- }
- // handle non button events
- else {
+ } else {
+ // handle non button events
m_settingsbar.deactivate();
m_rarecontrolsbar.deactivate();
- u32 button_size = getGuiButtonSize();
- s32 dxj = event.TouchInput.X - button_size * 5 / 2;
- s32 dyj = event.TouchInput.Y - m_screensize.Y + button_size * 5 / 2;
+ s32 dxj = event.TouchInput.X - button_size * 5.0f / 2.0f;
+ s32 dyj = event.TouchInput.Y - m_screensize.Y + button_size * 5.0f / 2.0f;
/* Select joystick when left 1/3 of screen dragged or
* when joystick tapped (fixed joystick position)
*/
if ((m_fixed_joystick && dxj * dxj + dyj * dyj <= button_size * button_size * 1.5 * 1.5) ||
- (!m_fixed_joystick && event.TouchInput.X < m_screensize.X / 3)) {
+ (!m_fixed_joystick && event.TouchInput.X < m_screensize.X / 3.0f)) {
// If we don't already have a starting point for joystick make this the one.
if (m_joystick_id == -1) {
m_joystick_id = event.TouchInput.ID;
@@ -871,14 +787,14 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
m_joystick_btn_center->guibutton->setVisible(true);
// If it's a fixed joystick, don't move the joystick "button".
- if (!m_fixed_joystick) {
+ if (!m_fixed_joystick)
m_joystick_btn_bg->guibutton->setRelativePosition(v2s32(
- event.TouchInput.X - button_size * 3 / 2,
- event.TouchInput.Y - button_size * 3 / 2));
- }
+ event.TouchInput.X - button_size * 3.0f / 2.0f,
+ event.TouchInput.Y - button_size * 3.0f / 2.0f));
+
m_joystick_btn_center->guibutton->setRelativePosition(v2s32(
- event.TouchInput.X - button_size / 2,
- event.TouchInput.Y - button_size / 2));
+ event.TouchInput.X - button_size / 2.0f,
+ event.TouchInput.Y - button_size / 2.0f));
}
} else {
// If we don't already have a moving point make this the moving one.
@@ -895,17 +811,15 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
m_pointerpos[event.TouchInput.ID] = v2s32(event.TouchInput.X, event.TouchInput.Y);
}
else if (event.TouchInput.Event == ETIE_LEFT_UP) {
- verbosestream << "Up event for pointerid: " << event.TouchInput.ID << std::endl;
+ verbosestream
+ << "Up event for pointerid: " << event.TouchInput.ID << std::endl;
handleReleaseEvent(event.TouchInput.ID);
- }
- else {
+ } else {
assert(event.TouchInput.Event == ETIE_MOVED);
- int move_idx = event.TouchInput.ID;
if (m_pointerpos[event.TouchInput.ID] ==
- v2s32(event.TouchInput.X, event.TouchInput.Y)) {
+ v2s32(event.TouchInput.X, event.TouchInput.Y))
return;
- }
if (m_move_id != -1) {
if ((event.TouchInput.ID == m_move_id) &&
@@ -928,9 +842,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
s32 dy = Y - m_pointerpos[event.TouchInput.ID].Y;
// adapt to similar behaviour as pc screen
- double d = g_settings->getFloat("mouse_sensitivity") * 4;
- double old_yaw = m_camera_yaw_change;
- double old_pitch = m_camera_pitch;
+ double d = g_settings->getFloat("mouse_sensitivity") * 3.0f;
m_camera_yaw_change -= dx * d;
m_camera_pitch = MYMIN(MYMAX(m_camera_pitch + (dy * d), -180), 180);
@@ -942,8 +854,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
->getRayFromScreenCoordinates(v2s32(X, Y));
m_pointerpos[event.TouchInput.ID] = v2s32(X, Y);
}
- }
- else if ((event.TouchInput.ID == m_move_id) &&
+ } else if ((event.TouchInput.ID == m_move_id) &&
(m_move_sent_as_mouse_event)) {
m_shootline = m_device
->getSceneManager()
@@ -954,7 +865,6 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
}
if (m_joystick_id != -1 && event.TouchInput.ID == m_joystick_id) {
- u32 button_size = getGuiButtonSize();
s32 X = event.TouchInput.X;
s32 Y = event.TouchInput.Y;
@@ -967,8 +877,8 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
double distance_sq = dx * dx + dy * dy;
- s32 dxj = event.TouchInput.X - button_size * 5 / 2;
- s32 dyj = event.TouchInput.Y - m_screensize.Y + button_size * 5 / 2;
+ s32 dxj = event.TouchInput.X - button_size * 5.0f / 2.0f;
+ s32 dyj = event.TouchInput.Y - m_screensize.Y + button_size * 5.0f / 2.0f;
bool inside_joystick = (dxj * dxj + dyj * dyj <= button_size * button_size * 1.5 * 1.5);
if (m_joystick_has_really_moved ||
@@ -986,8 +896,8 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
angle = fmod(angle + 180 + 22.5, 360);
// reset state before applying
- for (unsigned int i = 0; i < 5; i ++)
- m_joystick_status[i] = false;
+ for (bool & joystick_status : m_joystick_status)
+ joystick_status = false;
if (distance <= m_touchscreen_threshold) {
// do nothing
@@ -1016,8 +926,8 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
if (distance > button_size) {
m_joystick_status[j_special1] = true;
// move joystick "button"
- s32 ndx = (s32) button_size * dx / distance - (s32) button_size / 2;
- s32 ndy = (s32) button_size * dy / distance - (s32) button_size / 2;
+ s32 ndx = button_size * dx / distance - button_size / 2.0f;
+ s32 ndy = button_size * dy / distance - button_size / 2.0f;
if (m_fixed_joystick) {
m_joystick_btn_center->guibutton->setRelativePosition(v2s32(
button_size * 5 / 2 + ndx,
@@ -1028,64 +938,54 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
m_pointerpos[event.TouchInput.ID].Y + ndy));
}
} else {
- m_joystick_btn_center->guibutton->setRelativePosition(v2s32(
- X - button_size / 2, Y - button_size / 2));
+ m_joystick_btn_center->guibutton->setRelativePosition(
+ v2s32(X - button_size / 2, Y - button_size / 2));
}
}
}
- if (m_move_id == -1 && m_joystick_id == -1) {
+ if (m_move_id == -1 && m_joystick_id == -1)
handleChangedButton(event);
- }
}
}
void TouchScreenGUI::handleChangedButton(const SEvent &event)
{
for (unsigned int i = 0; i < after_last_element_id; i++) {
-
- if (m_buttons[i].ids.empty()) {
+ if (m_buttons[i].ids.empty())
continue;
- }
- for (std::vector<int>::iterator iter = m_buttons[i].ids.begin();
- iter != m_buttons[i].ids.end(); ++iter) {
+ for (auto iter = m_buttons[i].ids.begin();
+ iter != m_buttons[i].ids.end(); ++iter) {
if (event.TouchInput.ID == *iter) {
-
int current_button_id =
getButtonID(event.TouchInput.X, event.TouchInput.Y);
- if (current_button_id == i) {
+ if (current_button_id == i)
continue;
- }
// remove old button
handleButtonEvent((touch_gui_button_id) i, *iter, false);
- if (current_button_id == after_last_element_id) {
+ if (current_button_id == after_last_element_id)
return;
- }
+
handleButtonEvent((touch_gui_button_id) current_button_id, *iter, true);
return;
-
}
}
}
int current_button_id = getButtonID(event.TouchInput.X, event.TouchInput.Y);
- if (current_button_id == after_last_element_id) {
+ if (current_button_id == after_last_element_id)
return;
- }
button_info *btn = &m_buttons[current_button_id];
if (std::find(btn->ids.begin(), btn->ids.end(), event.TouchInput.ID)
== btn->ids.end())
- {
handleButtonEvent((touch_gui_button_id) current_button_id,
event.TouchInput.ID, true);
- }
-
}
bool TouchScreenGUI::doubleTapDetection()
@@ -1102,14 +1002,15 @@ bool TouchScreenGUI::doubleTapDetection()
return false;
double distance = sqrt(
- (m_key_events[0].x - m_key_events[1].x) * (m_key_events[0].x - m_key_events[1].x) +
- (m_key_events[0].y - m_key_events[1].y) * (m_key_events[0].y - m_key_events[1].y));
-
+ (m_key_events[0].x - m_key_events[1].x) *
+ (m_key_events[0].x - m_key_events[1].x) +
+ (m_key_events[0].y - m_key_events[1].y) *
+ (m_key_events[0].y - m_key_events[1].y));
if (distance > (20 + m_touchscreen_threshold))
return false;
- SEvent *translated = new SEvent();
+ auto *translated = new SEvent();
memset(translated, 0, sizeof(SEvent));
translated->EventType = EET_MOUSE_INPUT_EVENT;
translated->MouseInput.X = m_key_events[0].x;
@@ -1129,17 +1030,16 @@ bool TouchScreenGUI::doubleTapDetection()
m_receiver->OnEvent(*translated);
translated->MouseInput.ButtonStates = 0;
- translated->MouseInput.Event = EMIE_RMOUSE_LEFT_UP;
+ translated->MouseInput.Event = EMIE_RMOUSE_LEFT_UP;
verbosestream << "TouchScreenGUI::translateEvent right click release" << std::endl;
m_receiver->OnEvent(*translated);
delete translated;
return true;
-
}
void TouchScreenGUI::applyJoystickStatus()
{
- for (unsigned int i = 0; i < 5; i ++) {
+ for (unsigned int i = 0; i < 5; i++) {
if (i == 4 && !m_joystick_triggers_special1)
continue;
@@ -1158,50 +1058,48 @@ void TouchScreenGUI::applyJoystickStatus()
TouchScreenGUI::~TouchScreenGUI()
{
- for (unsigned int i = 0; i < after_last_element_id; i++) {
- button_info *btn = &m_buttons[i];
- if (btn->guibutton) {
- btn->guibutton->drop();
- btn->guibutton = NULL;
+ for (auto &button : m_buttons) {
+ if (button.guibutton) {
+ button.guibutton->drop();
+ button.guibutton = nullptr;
}
}
if (m_joystick_btn_off->guibutton) {
m_joystick_btn_off->guibutton->drop();
- m_joystick_btn_off->guibutton = NULL;
+ m_joystick_btn_off->guibutton = nullptr;
}
if (m_joystick_btn_bg->guibutton) {
m_joystick_btn_bg->guibutton->drop();
- m_joystick_btn_bg->guibutton = NULL;
+ m_joystick_btn_bg->guibutton = nullptr;
}
if (m_joystick_btn_center->guibutton) {
m_joystick_btn_center->guibutton->drop();
- m_joystick_btn_center->guibutton = NULL;
+ m_joystick_btn_center->guibutton = nullptr;
}
}
void TouchScreenGUI::step(float dtime)
{
// simulate keyboard repeats
- for (unsigned int i = 0; i < after_last_element_id; i++) {
- button_info *btn = &m_buttons[i];
-
- if (btn->ids.size() > 0) {
- btn->repeatcounter += dtime;
+ for (auto &button : m_buttons) {
+ if (!button.ids.empty()) {
+ button.repeatcounter += dtime;
// in case we're moving around digging does not happen
if (m_move_id != -1)
m_move_has_really_moved = true;
- if (btn->repeatcounter < btn->repeatdelay) continue;
+ if (button.repeatcounter < button.repeatdelay)
+ continue;
- btn->repeatcounter = 0;
+ button.repeatcounter = 0;
SEvent translated;
memset(&translated, 0, sizeof(SEvent));
translated.EventType = irr::EET_KEY_INPUT_EVENT;
- translated.KeyInput.Key = btn->keycode;
+ translated.KeyInput.Key = button.keycode;
translated.KeyInput.PressedDown = false;
m_receiver->OnEvent(translated);
@@ -1211,7 +1109,12 @@ void TouchScreenGUI::step(float dtime)
}
// joystick
- applyJoystickStatus();
+ for (unsigned int i = 0; i < 4; i++) {
+ if (m_joystick_status[i]) {
+ applyJoystickStatus();
+ break;
+ }
+ }
// if a new placed pointer isn't moved for some time start digging
if ((m_move_id != -1) &&
@@ -1259,22 +1162,18 @@ void TouchScreenGUI::registerHudItem(int index, const rect<s32> &rect)
void TouchScreenGUI::Toggle(bool visible)
{
m_visible = visible;
- for (unsigned int i = 0; i < after_last_element_id; i++) {
- button_info *btn = &m_buttons[i];
- if (btn->guibutton) {
- btn->guibutton->setVisible(visible);
- }
+ for (auto &button : m_buttons) {
+ if (button.guibutton)
+ button.guibutton->setVisible(visible);
}
- if (m_joystick_btn_off->guibutton) {
+ if (m_joystick_btn_off->guibutton)
m_joystick_btn_off->guibutton->setVisible(visible);
- }
// clear all active buttons
if (!visible) {
- while (m_known_ids.size() > 0) {
+ while (!m_known_ids.empty())
handleReleaseEvent(m_known_ids.begin()->id);
- }
m_settingsbar.hide();
m_rarecontrolsbar.hide();
diff --git a/src/gui/touchscreengui.h b/src/gui/touchscreengui.h
index 2a3f24a3f..761d33207 100644
--- a/src/gui/touchscreengui.h
+++ b/src/gui/touchscreengui.h
@@ -80,21 +80,22 @@ typedef enum
} autohide_button_bar_dir;
#define MIN_DIG_TIME_MS 500
-#define MAX_TOUCH_COUNT 64
#define BUTTON_REPEAT_DELAY 0.2f
-
#define SETTINGS_BAR_Y_OFFSET 5
#define RARE_CONTROLS_BAR_Y_OFFSET 5
-extern const char **touchgui_button_imagenames;
-extern const char **touchgui_joystick_imagenames;
+// Very slow button repeat frequency
+#define SLOW_BUTTON_REPEAT 1.0f
+
+extern const char **button_imagenames;
+extern const char **joystick_imagenames;
struct button_info
{
float repeatcounter;
float repeatdelay;
irr::EKEY_CODE keycode;
- std::vector<int> ids;
+ std::vector<size_t> ids;
IGUIButton *guibutton = nullptr;
bool immediate_release;
@@ -109,8 +110,8 @@ public:
AutoHideButtonBar(IrrlichtDevice *device, IEventReceiver *receiver);
void init(ISimpleTextureSource *tsrc, const char *starter_img, int button_id,
- v2s32 UpperLeft, v2s32 LowerRight, autohide_button_bar_dir dir,
- float timeout);
+ const v2s32 &UpperLeft, const v2s32 &LowerRight,
+ autohide_button_bar_dir dir, float timeout);
~AutoHideButtonBar();
@@ -125,9 +126,6 @@ public:
// detect settings bar button events
bool isButton(const SEvent &event);
- // handle released hud buttons
- bool isReleaseButton(int eventID);
-
// step handler
void step(float dtime);
@@ -182,7 +180,7 @@ public:
double getPitch() { return m_camera_pitch; }
- /*!
+ /*
* Returns a line which describes what the player is pointing at.
* The starting point and looking direction are significant,
* the line should be scaled to match its length to the actual distance
@@ -206,9 +204,10 @@ private:
IEventReceiver *m_receiver;
ISimpleTextureSource *m_texturesource;
v2u32 m_screensize;
+ s32 button_size;
double m_touchscreen_threshold;
std::map<int, rect<s32>> m_hud_rects;
- std::map<int, irr::EKEY_CODE> m_hud_ids;
+ std::map<size_t, irr::EKEY_CODE> m_hud_ids;
bool m_visible; // is the gui visible
// value in degree
@@ -220,7 +219,7 @@ private:
forward_id, backward_id, left_id, right_id, special1_id};
bool m_joystick_status[5] = {false, false, false, false, false};
- /*!
+ /*
* A line starting at the camera and pointing towards the
* selected object.
* The line ends on the camera's far plane.
@@ -248,23 +247,24 @@ private:
touch_gui_button_id getButtonID(s32 x, s32 y);
// gui button by eventID
- touch_gui_button_id getButtonID(int eventID);
+ touch_gui_button_id getButtonID(size_t eventID);
// check if a button has changed
void handleChangedButton(const SEvent &event);
// initialize a button
- void initButton(touch_gui_button_id id, rect<s32> button_rect,
- std::wstring caption, bool immediate_release,
+ void initButton(touch_gui_button_id id, const rect<s32> &button_rect,
+ const std::wstring &caption, bool immediate_release,
float repeat_delay = BUTTON_REPEAT_DELAY);
// initialize a joystick button
- button_info *initJoystickButton(touch_gui_button_id id, rect<s32> button_rect,
- int texture_id, bool visible = true);
+ button_info *initJoystickButton(touch_gui_button_id id,
+ const rect<s32> &button_rect, int texture_id,
+ bool visible = true);
struct id_status
{
- int id;
+ size_t id;
int X;
int Y;
};
@@ -273,27 +273,21 @@ private:
std::vector<id_status> m_known_ids;
// handle a button event
- void handleButtonEvent(touch_gui_button_id bID, int eventID, bool action);
+ void handleButtonEvent(touch_gui_button_id bID, size_t eventID, bool action);
// handle pressed hud buttons
bool isHUDButton(const SEvent &event);
- // handle released hud buttons
- bool isReleaseHUDButton(int eventID);
-
// handle double taps
bool doubleTapDetection();
// handle release event
- void handleReleaseEvent(int evt_id);
+ void handleReleaseEvent(size_t evt_id);
// apply joystick status
void applyJoystickStatus();
- // get size of regular gui control button
- int getGuiButtonSize();
-
- // doubleclick detection variables
+ // double-click detection variables
struct key_event
{
u64 down_time;
@@ -302,9 +296,9 @@ private:
};
// array for saving last known position of a pointer
- v2s32 m_pointerpos[MAX_TOUCH_COUNT];
+ std::map<size_t, v2s32> m_pointerpos;
- // array for doubletap detection
+ // array for double tap detection
key_event m_key_events[2];
// settings bar
@@ -313,4 +307,5 @@ private:
// rare controls bar
AutoHideButtonBar m_rarecontrolsbar;
};
+
extern TouchScreenGUI *g_touchscreengui;
diff --git a/src/hud.cpp b/src/hud.cpp
index 7711e3a4a..3079b5cd8 100644
--- a/src/hud.cpp
+++ b/src/hud.cpp
@@ -27,6 +27,7 @@ const struct EnumString es_HudElementType[] =
{HUD_ELEM_STATBAR, "statbar"},
{HUD_ELEM_INVENTORY, "inventory"},
{HUD_ELEM_WAYPOINT, "waypoint"},
+ {HUD_ELEM_IMAGE_WAYPOINT, "image_waypoint"},
{0, NULL},
};
@@ -45,6 +46,7 @@ const struct EnumString es_HudElementStat[] =
{HUD_STAT_WORLD_POS, "world_pos"},
{HUD_STAT_SIZE, "size"},
{HUD_STAT_Z_INDEX, "z_index"},
+ {HUD_STAT_TEXT2, "text2"},
{0, NULL},
};
diff --git a/src/hud.h b/src/hud.h
index 23f189dff..e015baec1 100644
--- a/src/hud.h
+++ b/src/hud.h
@@ -18,8 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef HUD_HEADER
-#define HUD_HEADER
+#pragma once
#include "irrlichttypes_extrabloated.h"
#include <string>
@@ -61,6 +60,7 @@ enum HudElementType {
HUD_ELEM_STATBAR = 2,
HUD_ELEM_INVENTORY = 3,
HUD_ELEM_WAYPOINT = 4,
+ HUD_ELEM_IMAGE_WAYPOINT = 5
};
enum HudElementStat {
@@ -76,6 +76,7 @@ enum HudElementStat {
HUD_STAT_WORLD_POS,
HUD_STAT_SIZE,
HUD_STAT_Z_INDEX,
+ HUD_STAT_TEXT2,
};
struct HudElement {
@@ -92,10 +93,10 @@ struct HudElement {
v3f world_pos;
v2s32 size;
s16 z_index = 0;
+ std::string text2;
};
extern const EnumString es_HudElementType[];
extern const EnumString es_HudElementStat[];
extern const EnumString es_HudBuiltinElement[];
-#endif
diff --git a/src/inventory.cpp b/src/inventory.cpp
index 77ecf5876..349ee503d 100644
--- a/src/inventory.cpp
+++ b/src/inventory.cpp
@@ -56,28 +56,31 @@ ItemStack::ItemStack(const std::string &name_, u16 count_,
count = 1;
}
-void ItemStack::serialize(std::ostream &os) const
+void ItemStack::serialize(std::ostream &os, bool serialize_meta) const
{
if (empty())
return;
// Check how many parts of the itemstring are needed
int parts = 1;
- if(count != 1)
- parts = 2;
- if(wear != 0)
- parts = 3;
if (!metadata.empty())
parts = 4;
+ else if (wear != 0)
+ parts = 3;
+ else if (count != 1)
+ parts = 2;
- os<<serializeJsonStringIfNeeded(name);
- if(parts >= 2)
- os<<" "<<count;
- if(parts >= 3)
- os<<" "<<wear;
+ os << serializeJsonStringIfNeeded(name);
+ if (parts >= 2)
+ os << " " << count;
+ if (parts >= 3)
+ os << " " << wear;
if (parts >= 4) {
os << " ";
- metadata.serialize(os);
+ if (serialize_meta)
+ metadata.serialize(os);
+ else
+ os << "<metadata size=" << metadata.size() << ">";
}
}
@@ -240,10 +243,10 @@ void ItemStack::deSerialize(const std::string &str, IItemDefManager *itemdef)
deSerialize(is, itemdef);
}
-std::string ItemStack::getItemString() const
+std::string ItemStack::getItemString(bool include_meta) const
{
std::ostringstream os(std::ios::binary);
- serialize(os);
+ serialize(os, include_meta);
return os.str();
}
diff --git a/src/inventory.h b/src/inventory.h
index 2828d3e5a..67a7859ed 100644
--- a/src/inventory.h
+++ b/src/inventory.h
@@ -40,13 +40,13 @@ struct ItemStack
~ItemStack() = default;
// Serialization
- void serialize(std::ostream &os) const;
+ void serialize(std::ostream &os, bool serialize_meta = true) const;
// Deserialization. Pass itemdef unless you don't want aliases resolved.
void deSerialize(std::istream &is, IItemDefManager *itemdef = NULL);
void deSerialize(const std::string &s, IItemDefManager *itemdef = NULL);
// Returns the string used for inventory
- std::string getItemString() const;
+ std::string getItemString(bool include_meta = true) const;
// Returns the tooltip
std::string getDescription(IItemDefManager *itemdef) const;
diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp
index 5a24f95a4..b6f464901 100644
--- a/src/inventorymanager.cpp
+++ b/src/inventorymanager.cpp
@@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "serverenvironment.h"
#include "scripting_server.h"
-#include "serverobject.h"
+#include "server/serveractiveobject.h"
#include "settings.h"
#include "craftdef.h"
#include "rollback_interface.h"
diff --git a/src/itemdef.cpp b/src/itemdef.cpp
index 0d0afeb2b..8e0492827 100644
--- a/src/itemdef.cpp
+++ b/src/itemdef.cpp
@@ -270,17 +270,16 @@ public:
// Convert name according to possible alias
std::string name = getAlias(name_);
// Get the definition
- std::map<std::string, ItemDefinition*>::const_iterator i;
- i = m_item_definitions.find(name);
- if(i == m_item_definitions.end())
+ auto i = m_item_definitions.find(name);
+ if (i == m_item_definitions.cend())
i = m_item_definitions.find("unknown");
- assert(i != m_item_definitions.end());
+ assert(i != m_item_definitions.cend());
return *(i->second);
}
virtual const std::string &getAlias(const std::string &name) const
{
- StringMap::const_iterator it = m_aliases.find(name);
- if (it != m_aliases.end())
+ auto it = m_aliases.find(name);
+ if (it != m_aliases.cend())
return it->second;
return name;
}
@@ -300,8 +299,7 @@ public:
// Convert name according to possible alias
std::string name = getAlias(name_);
// Get the definition
- std::map<std::string, ItemDefinition*>::const_iterator i;
- return m_item_definitions.find(name) != m_item_definitions.end();
+ return m_item_definitions.find(name) != m_item_definitions.cend();
}
#ifndef SERVER
public:
@@ -422,13 +420,30 @@ public:
return get(stack.name).color;
}
#endif
+ void applyTextureOverrides(const std::vector<TextureOverride> &overrides)
+ {
+ infostream << "ItemDefManager::applyTextureOverrides(): Applying "
+ "overrides to textures" << std::endl;
+
+ for (const TextureOverride& texture_override : overrides) {
+ if (m_item_definitions.find(texture_override.id) == m_item_definitions.end()) {
+ continue; // Ignore unknown item
+ }
+
+ ItemDefinition* itemdef = m_item_definitions[texture_override.id];
+
+ if (texture_override.hasTarget(OverrideTarget::INVENTORY))
+ itemdef->inventory_image = texture_override.texture;
+
+ if (texture_override.hasTarget(OverrideTarget::WIELD))
+ itemdef->wield_image = texture_override.texture;
+ }
+ }
void clear()
{
- for(std::map<std::string, ItemDefinition*>::const_iterator
- i = m_item_definitions.begin();
- i != m_item_definitions.end(); ++i)
+ for (auto &i : m_item_definitions)
{
- delete i->second;
+ delete i.second;
}
m_item_definitions.clear();
m_aliases.clear();
@@ -463,7 +478,7 @@ public:
}
virtual void registerItem(const ItemDefinition &def)
{
- verbosestream<<"ItemDefManager: registering \""<<def.name<<"\""<<std::endl;
+ TRACESTREAM(<< "ItemDefManager: registering " << def.name << std::endl);
// Ensure that the "" item (the hand) always has ToolCapabilities
if (def.name.empty())
FATAL_ERROR_IF(!def.tool_capabilities, "Hand does not have ToolCapabilities");
@@ -490,8 +505,8 @@ public:
const std::string &convert_to)
{
if (m_item_definitions.find(name) == m_item_definitions.end()) {
- verbosestream<<"ItemDefManager: setting alias "<<name
- <<" -> "<<convert_to<<std::endl;
+ TRACESTREAM(<< "ItemDefManager: setting alias " << name
+ << " -> " << convert_to << std::endl);
m_aliases[name] = convert_to;
}
}
@@ -501,10 +516,8 @@ public:
u16 count = m_item_definitions.size();
writeU16(os, count);
- for (std::map<std::string, ItemDefinition *>::const_iterator
- it = m_item_definitions.begin();
- it != m_item_definitions.end(); ++it) {
- ItemDefinition *def = it->second;
+ for (const auto &it : m_item_definitions) {
+ ItemDefinition *def = it.second;
// Serialize ItemDefinition and write wrapped in a string
std::ostringstream tmp_os(std::ios::binary);
def->serialize(tmp_os, protocol_version);
@@ -513,11 +526,9 @@ public:
writeU16(os, m_aliases.size());
- for (StringMap::const_iterator
- it = m_aliases.begin();
- it != m_aliases.end(); ++it) {
- os << serializeString(it->first);
- os << serializeString(it->second);
+ for (const auto &it : m_aliases) {
+ os << serializeString(it.first);
+ os << serializeString(it.second);
}
}
void deSerialize(std::istream &is)
diff --git a/src/itemdef.h b/src/itemdef.h
index 45cff582a..f47e6cbe7 100644
--- a/src/itemdef.h
+++ b/src/itemdef.h
@@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <set>
#include "itemgroup.h"
#include "sound.h"
+#include "texture_override.h" // TextureOverride
class IGameDef;
class Client;
struct ToolCapabilities;
@@ -157,6 +158,10 @@ public:
Client *client) const=0;
#endif
+ // Replace the textures of registered nodes with the ones specified in
+ // the texture pack's override.txt files
+ virtual void applyTextureOverrides(const std::vector<TextureOverride> &overrides)=0;
+
// Remove all registered item and node definitions and aliases
// Then re-add the builtin item definitions
virtual void clear()=0;
diff --git a/src/log.cpp b/src/log.cpp
index 30344b4df..54442c39b 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "debug.h"
#include "gettime.h"
#include "porting.h"
+#include "settings.h"
#include "config.h"
#include "exceptions.h"
#include "util/numeric.h"
@@ -338,7 +339,80 @@ void FileLogOutput::setFile(const std::string &filename, s64 file_size_max)
"-------------\n" << std::endl;
}
+void StreamLogOutput::logRaw(LogLevel lev, const std::string &line)
+{
+ bool colored_message = (Logger::color_mode == LOG_COLOR_ALWAYS) ||
+ (Logger::color_mode == LOG_COLOR_AUTO && is_tty);
+ if (colored_message) {
+ switch (lev) {
+ case LL_ERROR:
+ // error is red
+ m_stream << "\033[91m";
+ break;
+ case LL_WARNING:
+ // warning is yellow
+ m_stream << "\033[93m";
+ break;
+ case LL_INFO:
+ // info is a bit dark
+ m_stream << "\033[37m";
+ break;
+ case LL_VERBOSE:
+ // verbose is darker than info
+ m_stream << "\033[2m";
+ break;
+ default:
+ // action is white
+ colored_message = false;
+ }
+ }
+ m_stream << line << std::endl;
+
+ if (colored_message) {
+ // reset to white color
+ m_stream << "\033[0m";
+ }
+}
+
+void LogOutputBuffer::updateLogLevel()
+{
+ const std::string &conf_loglev = g_settings->get("chat_log_level");
+ LogLevel log_level = Logger::stringToLevel(conf_loglev);
+ if (log_level == LL_MAX) {
+ warningstream << "Supplied unrecognized chat_log_level; "
+ "showing none." << std::endl;
+ log_level = LL_NONE;
+ }
+
+ m_logger.removeOutput(this);
+ m_logger.addOutputMaxLevel(this, log_level);
+}
+
+void LogOutputBuffer::logRaw(LogLevel lev, const std::string &line)
+{
+ std::string color;
+
+ if (!g_settings->getBool("disable_escape_sequences")) {
+ switch (lev) {
+ case LL_ERROR: // red
+ color = "\x1b(c@#F00)";
+ break;
+ case LL_WARNING: // yellow
+ color = "\x1b(c@#EE0)";
+ break;
+ case LL_INFO: // grey
+ color = "\x1b(c@#BBB)";
+ break;
+ case LL_VERBOSE: // dark grey
+ color = "\x1b(c@#888)";
+ break;
+ default: break;
+ }
+ }
+
+ m_buffer.push(color.append(line));
+}
////
//// *Buffer methods
diff --git a/src/log.h b/src/log.h
index 6350d8a86..856d3479b 100644
--- a/src/log.h
+++ b/src/log.h
@@ -124,39 +124,7 @@ public:
#endif
}
- void logRaw(LogLevel lev, const std::string &line)
- {
- bool colored_message = (Logger::color_mode == LOG_COLOR_ALWAYS) ||
- (Logger::color_mode == LOG_COLOR_AUTO && is_tty);
- if (colored_message)
- switch (lev) {
- case LL_ERROR:
- // error is red
- m_stream << "\033[91m";
- break;
- case LL_WARNING:
- // warning is yellow
- m_stream << "\033[93m";
- break;
- case LL_INFO:
- // info is a bit dark
- m_stream << "\033[37m";
- break;
- case LL_VERBOSE:
- // verbose is darker than info
- m_stream << "\033[2m";
- break;
- default:
- // action is white
- colored_message = false;
- }
-
- m_stream << line << std::endl;
-
- if (colored_message)
- // reset to white color
- m_stream << "\033[0m";
- }
+ void logRaw(LogLevel lev, const std::string &line);
private:
std::ostream &m_stream;
@@ -178,23 +146,27 @@ private:
class LogOutputBuffer : public ICombinedLogOutput {
public:
- LogOutputBuffer(Logger &logger, LogLevel lev) :
+ LogOutputBuffer(Logger &logger) :
m_logger(logger)
{
- m_logger.addOutput(this, lev);
- }
+ updateLogLevel();
+ };
- ~LogOutputBuffer()
+ virtual ~LogOutputBuffer()
{
m_logger.removeOutput(this);
}
- void logRaw(LogLevel lev, const std::string &line)
+ void updateLogLevel();
+
+ void logRaw(LogLevel lev, const std::string &line);
+
+ void clear()
{
- m_buffer.push(line);
+ m_buffer = std::queue<std::string>();
}
- bool empty()
+ bool empty() const
{
return m_buffer.empty();
}
diff --git a/src/main.cpp b/src/main.cpp
index 1993f7c24..af6d307dc 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -187,11 +187,17 @@ int main(int argc, char *argv[])
#ifndef __ANDROID__
// Run unit tests
if (cmd_args.getFlag("run-unittests")) {
+#if BUILD_UNITTESTS
return run_tests();
+#else
+ errorstream << "Unittest support is not enabled in this binary. "
+ << "If you want to enable it, compile project with BUILD_UNITTESTS=1 flag."
+ << std::endl;
+#endif
}
#endif
- GameParams game_params;
+ GameStartData game_params;
#ifdef SERVER
porting::attachOrCreateConsole();
game_params.is_dedicated_server = true;
@@ -207,9 +213,6 @@ int main(int argc, char *argv[])
sanity_check(!game_params.world_path.empty());
- infostream << "Using commanded world path ["
- << game_params.world_path << "]" << std::endl;
-
if (game_params.is_dedicated_server)
return run_dedicated_server(game_params, cmd_args) ? 0 : 1;
@@ -460,7 +463,6 @@ static bool create_userdata_path()
} else {
success = true;
}
- porting::copyAssets();
#else
// Create user data directory
success = fs::CreateDir(porting::path_user);
@@ -602,10 +604,14 @@ static bool game_configure(GameParams *game_params, const Settings &cmd_args)
static void game_configure_port(GameParams *game_params, const Settings &cmd_args)
{
- if (cmd_args.exists("port"))
+ if (cmd_args.exists("port")) {
game_params->socket_port = cmd_args.getU16("port");
- else
- game_params->socket_port = g_settings->getU16("port");
+ } else {
+ if (game_params->is_dedicated_server)
+ game_params->socket_port = g_settings->getU16("port");
+ else
+ game_params->socket_port = g_settings->getU16("remote_port");
+ }
if (game_params->socket_port == 0)
game_params->socket_port = DEFAULT_SERVER_PORT;
@@ -686,8 +692,6 @@ static bool auto_select_world(GameParams *game_params)
// No world was specified; try to select it automatically
// Get information about available worlds
- verbosestream << _("Determining world path") << std::endl;
-
std::vector<WorldSpec> worldspecs = getAvailableWorlds();
std::string world_path;
@@ -708,7 +712,7 @@ static bool auto_select_world(GameParams *game_params)
// This is the ultimate default world path
world_path = porting::path_user + DIR_DELIM + "worlds" +
DIR_DELIM + "world";
- infostream << "Creating default world at ["
+ infostream << "Using default world at ["
<< world_path << "]" << std::endl;
}
@@ -770,7 +774,6 @@ static bool determine_subgame(GameParams *game_params)
assert(game_params->world_path != ""); // Pre-condition
- verbosestream << _("Determining gameid/gamespec") << std::endl;
// If world doesn't exist
if (!game_params->world_path.empty()
&& !getWorldExists(game_params->world_path)) {
@@ -782,7 +785,7 @@ static bool determine_subgame(GameParams *game_params)
gamespec = findSubgame(g_settings->get("default_game"));
infostream << "Using default gameid [" << gamespec.id << "]" << std::endl;
if (!gamespec.isValid()) {
- errorstream << "Subgame specified in default_game ["
+ errorstream << "Game specified in default_game ["
<< g_settings->get("default_game")
<< "] is invalid." << std::endl;
return false;
@@ -807,7 +810,7 @@ static bool determine_subgame(GameParams *game_params)
}
if (!gamespec.isValid()) {
- errorstream << "Subgame [" << gamespec.id << "] could not be found."
+ errorstream << "Game [" << gamespec.id << "] could not be found."
<< std::endl;
return false;
}
@@ -888,7 +891,6 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings &
// Create server
Server server(game_params.world_path, game_params.game_spec,
false, bind_addr, true, &iface);
- server.init();
g_term_console.setup(&iface, &kill, admin_nick);
@@ -923,7 +925,6 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings &
// Create server
Server server(game_params.world_path, game_params.game_spec, false,
bind_addr, true);
- server.init();
server.start();
// Run server
diff --git a/src/map.cpp b/src/map.cpp
index 40aba067e..b9ab7c066 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -144,7 +144,7 @@ bool Map::isNodeUnderground(v3s16 p)
{
v3s16 blockpos = getNodeBlockPos(p);
MapBlock *block = getBlockNoCreateNoEx(blockpos);
- return block && block->getIsUnderground();
+ return block && block->getIsUnderground();
}
bool Map::isValidPosition(v3s16 p)
@@ -478,6 +478,16 @@ void Map::PrintInfo(std::ostream &out)
#define WATER_DROP_BOOST 4
+const static v3s16 liquid_6dirs[6] = {
+ // order: upper before same level before lower
+ v3s16( 0, 1, 0),
+ v3s16( 0, 0, 1),
+ v3s16( 1, 0, 0),
+ v3s16( 0, 0,-1),
+ v3s16(-1, 0, 0),
+ v3s16( 0,-1, 0)
+};
+
enum NeighborType : u8 {
NEIGHBOR_UPPER,
NEIGHBOR_SAME_LEVEL,
@@ -568,7 +578,7 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> &modified_blocks,
switch (liquid_type) {
case LIQUID_SOURCE:
liquid_level = LIQUID_LEVEL_SOURCE;
- liquid_kind = m_nodedef->getId(cf.liquid_alternative_flowing);
+ liquid_kind = cf.liquid_alternative_flowing_id;
break;
case LIQUID_FLOWING:
liquid_level = (n0.param2 & LIQUID_LEVEL_MASK);
@@ -587,7 +597,6 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> &modified_blocks,
/*
Collect information about the environment
*/
- const v3s16 *dirs = g_6dirs;
NodeNeighbor sources[6]; // surrounding sources
int num_sources = 0;
NodeNeighbor flows[6]; // surrounding flowing liquid nodes
@@ -601,16 +610,16 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> &modified_blocks,
for (u16 i = 0; i < 6; i++) {
NeighborType nt = NEIGHBOR_SAME_LEVEL;
switch (i) {
- case 1:
+ case 0:
nt = NEIGHBOR_UPPER;
break;
- case 4:
+ case 5:
nt = NEIGHBOR_LOWER;
break;
default:
break;
}
- v3s16 npos = p0 + dirs[i];
+ v3s16 npos = p0 + liquid_6dirs[i];
NodeNeighbor nb(getNode(npos), nt, npos);
const ContentFeatures &cfnb = m_nodedef->get(nb.n);
switch (m_nodedef->get(nb.n.getContent()).liquid_type) {
@@ -641,20 +650,24 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> &modified_blocks,
case LIQUID_SOURCE:
// if this node is not (yet) of a liquid type, choose the first liquid type we encounter
if (liquid_kind == CONTENT_AIR)
- liquid_kind = m_nodedef->getId(cfnb.liquid_alternative_flowing);
- if (m_nodedef->getId(cfnb.liquid_alternative_flowing) != liquid_kind) {
+ liquid_kind = cfnb.liquid_alternative_flowing_id;
+ if (cfnb.liquid_alternative_flowing_id != liquid_kind) {
neutrals[num_neutrals++] = nb;
} else {
// Do not count bottom source, it will screw things up
- if(dirs[i].Y != -1)
+ if(nt != NEIGHBOR_LOWER)
sources[num_sources++] = nb;
}
break;
case LIQUID_FLOWING:
- // if this node is not (yet) of a liquid type, choose the first liquid type we encounter
- if (liquid_kind == CONTENT_AIR)
- liquid_kind = m_nodedef->getId(cfnb.liquid_alternative_flowing);
- if (m_nodedef->getId(cfnb.liquid_alternative_flowing) != liquid_kind) {
+ if (nb.t != NEIGHBOR_SAME_LEVEL ||
+ (nb.n.param2 & LIQUID_FLOW_DOWN_MASK) != LIQUID_FLOW_DOWN_MASK) {
+ // if this node is not (yet) of a liquid type, choose the first liquid type we encounter
+ // but exclude falling liquids on the same level, they cannot flow here anyway
+ if (liquid_kind == CONTENT_AIR)
+ liquid_kind = cfnb.liquid_alternative_flowing_id;
+ }
+ if (cfnb.liquid_alternative_flowing_id != liquid_kind) {
neutrals[num_neutrals++] = nb;
} else {
flows[num_flows++] = nb;
@@ -680,7 +693,7 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> &modified_blocks,
// liquid_kind will be set to either the flowing alternative of the node (if it's a liquid)
// or the flowing alternative of the first of the surrounding sources (if it's air), so
// it's perfectly safe to use liquid_kind here to determine the new node content.
- new_node_content = m_nodedef->getId(m_nodedef->get(liquid_kind).liquid_alternative_source);
+ new_node_content = m_nodedef->get(liquid_kind).liquid_alternative_source_id;
} else if (num_sources >= 1 && sources[0].t != NEIGHBOR_LOWER) {
// liquid_kind is set properly, see above
max_node_level = new_node_level = LIQUID_LEVEL_MAX;
@@ -1187,7 +1200,7 @@ bool Map::isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes)
ServerMap
*/
ServerMap::ServerMap(const std::string &savedir, IGameDef *gamedef,
- EmergeManager *emerge):
+ EmergeManager *emerge, MetricsBackend *mb):
Map(dout_server, gamedef),
settings_mgr(g_settings, savedir + DIR_DELIM + "map_meta.txt"),
m_emerge(emerge)
@@ -1221,6 +1234,8 @@ ServerMap::ServerMap(const std::string &savedir, IGameDef *gamedef,
m_savedir = savedir;
m_map_saving_enabled = false;
+ m_save_time_counter = mb->addCounter("minetest_core_map_save_time", "Map save time (in nanoseconds)");
+
try {
// If directory exists, check contents and load if possible
if (fs::PathExists(m_savedir)) {
@@ -1777,6 +1792,8 @@ void ServerMap::save(ModifiedState save_level)
return;
}
+ u64 start_time = porting::getTimeNs();
+
if(save_level == MOD_STATE_CLEAN)
infostream<<"ServerMap: Saving whole map, this can take time."
<<std::endl;
@@ -1827,14 +1844,17 @@ void ServerMap::save(ModifiedState save_level)
*/
if(save_level == MOD_STATE_CLEAN
|| block_count != 0) {
- infostream<<"ServerMap: Written: "
- <<block_count<<" block files"
- <<", "<<block_count_all<<" blocks in memory."
- <<std::endl;
+ infostream << "ServerMap: Written: "
+ << block_count << " blocks"
+ << ", " << block_count_all << " blocks in memory."
+ << std::endl;
PrintInfo(infostream); // ServerMap/ClientMap:
infostream<<"Blocks modified by: "<<std::endl;
modprofiler.print(infostream);
}
+
+ auto end_time = porting::getTimeNs();
+ m_save_time_counter->increment(end_time - start_time);
}
void ServerMap::listAllLoadableBlocks(std::vector<v3s16> &dst)
diff --git a/src/map.h b/src/map.h
index da55fb432..4d9847063 100644
--- a/src/map.h
+++ b/src/map.h
@@ -31,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "voxel.h"
#include "modifiedstate.h"
#include "util/container.h"
+#include "util/metricsbackend.h"
#include "nodetimer.h"
#include "map_settings_manager.h"
#include "debug.h"
@@ -45,6 +46,7 @@ class NodeMetadata;
class IGameDef;
class IRollbackManager;
class EmergeManager;
+class MetricsBackend;
class ServerEnvironment;
struct BlockMakeData;
@@ -324,7 +326,7 @@ public:
/*
savedir: directory to which map data should be saved
*/
- ServerMap(const std::string &savedir, IGameDef *gamedef, EmergeManager *emerge);
+ ServerMap(const std::string &savedir, IGameDef *gamedef, EmergeManager *emerge, MetricsBackend *mb);
~ServerMap();
s32 mapType() const
@@ -448,6 +450,8 @@ private:
bool m_map_metadata_changed = true;
MapDatabase *dbase = nullptr;
MapDatabase *dbase_ro = nullptr;
+
+ MetricCounterPtr m_save_time_counter;
};
diff --git a/src/map_settings_manager.cpp b/src/map_settings_manager.cpp
index 7ef4bf12e..4f070e910 100644
--- a/src/map_settings_manager.cpp
+++ b/src/map_settings_manager.cpp
@@ -32,7 +32,6 @@ MapSettingsManager::MapSettingsManager(Settings *user_settings,
m_user_settings(user_settings)
{
assert(m_user_settings != NULL);
- Mapgen::setDefaultSettings(m_map_settings);
}
@@ -180,6 +179,16 @@ MapgenParams *MapSettingsManager::makeMapgenParams()
params->mgtype = mgtype;
+ // Load the mapgen param defaults
+ /* FIXME: Why is it done like this? MapgenParams should just
+ * set the defaults in its constructor instead. */
+ {
+ Settings default_settings;
+ Mapgen::setDefaultSettings(&default_settings);
+ params->MapgenParams::readParams(&default_settings);
+ params->readParams(&default_settings);
+ }
+
// Load the rest of the mapgen params from our active settings
params->MapgenParams::readParams(m_user_settings);
params->MapgenParams::readParams(m_map_settings);
diff --git a/src/mapgen/cavegen.cpp b/src/mapgen/cavegen.cpp
index a9df4506f..340079821 100644
--- a/src/mapgen/cavegen.cpp
+++ b/src/mapgen/cavegen.cpp
@@ -1,8 +1,8 @@
/*
Minetest
-Copyright (C) 2010-2018 celeron55, Perttu Ahola <celeron55@gmail.com>
-Copyright (C) 2010-2018 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
-Copyright (C) 2015-2018 paramat
+Copyright (C) 2010-2020 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2015-2020 paramat
+Copyright (C) 2010-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -69,7 +69,7 @@ CavesNoiseIntersection::~CavesNoiseIntersection()
void CavesNoiseIntersection::generateCaves(MMVManip *vm,
- v3s16 nmin, v3s16 nmax, u8 *biomemap)
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap)
{
assert(vm);
assert(biomemap);
diff --git a/src/mapgen/cavegen.h b/src/mapgen/cavegen.h
index ff09f9423..d678d365b 100644
--- a/src/mapgen/cavegen.h
+++ b/src/mapgen/cavegen.h
@@ -1,7 +1,7 @@
/*
Minetest
-Copyright (C) 2010-2018 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
-Copyright (C) 2015-2018 paramat
+Copyright (C) 2015-2020 paramat
+Copyright (C) 2010-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define VMANIP_FLAG_CAVE VOXELFLAG_CHECKED1
+typedef u16 biome_t; // copy from mg_biome.h to avoid an unnecessary include
+
class GenerateNotifier;
/*
@@ -44,7 +46,7 @@ public:
NoiseParams *np_cave2, s32 seed, float cave_width);
~CavesNoiseIntersection();
- void generateCaves(MMVManip *vm, v3s16 nmin, v3s16 nmax, u8 *biomemap);
+ void generateCaves(MMVManip *vm, v3s16 nmin, v3s16 nmax, biome_t *biomemap);
private:
const NodeDefManager *m_ndef;
diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp
index 79c429ff6..f57529082 100644
--- a/src/mapgen/mapgen.cpp
+++ b/src/mapgen/mapgen.cpp
@@ -28,7 +28,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "emerge.h"
#include "voxelalgorithms.h"
@@ -107,8 +106,8 @@ STATIC_ASSERT(
//// Mapgen
////
-Mapgen::Mapgen(int mapgenid, MapgenParams *params, EmergeManager *emerge) :
- gennotify(emerge->gen_notify_on, &emerge->gen_notify_on_deco_ids)
+Mapgen::Mapgen(int mapgenid, MapgenParams *params, EmergeParams *emerge) :
+ gennotify(emerge->gen_notify_on, emerge->gen_notify_on_deco_ids)
{
id = mapgenid;
water_level = params->water_level;
@@ -157,7 +156,7 @@ const char *Mapgen::getMapgenName(MapgenType mgtype)
Mapgen *Mapgen::createMapgen(MapgenType mgtype, MapgenParams *params,
- EmergeManager *emerge)
+ EmergeParams *emerge)
{
switch (mgtype) {
case MAPGEN_CARPATHIAN:
@@ -586,7 +585,7 @@ void Mapgen::spreadLight(const v3s16 &nmin, const v3s16 &nmax)
//// MapgenBasic
////
-MapgenBasic::MapgenBasic(int mapgenid, MapgenParams *params, EmergeManager *emerge)
+MapgenBasic::MapgenBasic(int mapgenid, MapgenParams *params, EmergeParams *emerge)
: Mapgen(mapgenid, params, emerge)
{
this->m_emerge = emerge;
@@ -629,6 +628,13 @@ MapgenBasic::MapgenBasic(int mapgenid, MapgenParams *params, EmergeManager *emer
// Lava falls back to water as both are suitable as cave liquids.
if (c_lava_source == CONTENT_IGNORE)
c_lava_source = c_water_source;
+
+ if (c_stone == CONTENT_IGNORE)
+ errorstream << "Mapgen: Mapgen alias 'mapgen_stone' is invalid!" << std::endl;
+ if (c_water_source == CONTENT_IGNORE)
+ errorstream << "Mapgen: Mapgen alias 'mapgen_water_source' is invalid!" << std::endl;
+ if (c_river_water_source == CONTENT_IGNORE)
+ warningstream << "Mapgen: Mapgen alias 'mapgen_river_water_source' is invalid!" << std::endl;
}
@@ -636,6 +642,8 @@ MapgenBasic::~MapgenBasic()
{
delete biomegen;
delete []heightmap;
+
+ delete m_emerge; // destroying EmergeParams is our responsibility
}
@@ -968,7 +976,7 @@ void MapgenBasic::generateDungeons(s16 max_stone_y)
////
GenerateNotifier::GenerateNotifier(u32 notify_on,
- std::set<u32> *notify_on_deco_ids)
+ const std::set<u32> *notify_on_deco_ids)
{
m_notify_on = notify_on;
m_notify_on_deco_ids = notify_on_deco_ids;
@@ -981,7 +989,8 @@ void GenerateNotifier::setNotifyOn(u32 notify_on)
}
-void GenerateNotifier::setNotifyOnDecoIds(std::set<u32> *notify_on_deco_ids)
+void GenerateNotifier::setNotifyOnDecoIds(
+ const std::set<u32> *notify_on_deco_ids)
{
m_notify_on_deco_ids = notify_on_deco_ids;
}
@@ -993,7 +1002,7 @@ bool GenerateNotifier::addEvent(GenNotifyType type, v3s16 pos, u32 id)
return false;
if (type == GENNOTIFY_DECORATION &&
- m_notify_on_deco_ids->find(id) == m_notify_on_deco_ids->end())
+ m_notify_on_deco_ids->find(id) == m_notify_on_deco_ids->cend())
return false;
GenNotifyEvent gne;
diff --git a/src/mapgen/mapgen.h b/src/mapgen/mapgen.h
index dc325c791..a92b3b0d0 100644
--- a/src/mapgen/mapgen.h
+++ b/src/mapgen/mapgen.h
@@ -1,8 +1,8 @@
/*
Minetest
-Copyright (C) 2010-2018 celeron55, Perttu Ahola <celeron55@gmail.com>
-Copyright (C) 2013-2018 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
-Copyright (C) 2015-2018 paramat
+Copyright (C) 2010-2020 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2015-2020 paramat
+Copyright (C) 2013-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -38,7 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define MG_DECORATIONS 0x20
#define MG_BIOMES 0x40
-typedef u8 biome_t; // copy from mg_biome.h to avoid an unnecessary include
+typedef u16 biome_t; // copy from mg_biome.h to avoid an unnecessary include
class Settings;
class MMVManip;
@@ -51,6 +51,7 @@ class Biome;
class BiomeGen;
struct BiomeParams;
class BiomeManager;
+class EmergeParams;
class EmergeManager;
class MapBlock;
class VoxelManipulator;
@@ -87,10 +88,10 @@ struct GenNotifyEvent {
class GenerateNotifier {
public:
GenerateNotifier() = default;
- GenerateNotifier(u32 notify_on, std::set<u32> *notify_on_deco_ids);
+ GenerateNotifier(u32 notify_on, const std::set<u32> *notify_on_deco_ids);
void setNotifyOn(u32 notify_on);
- void setNotifyOnDecoIds(std::set<u32> *notify_on_deco_ids);
+ void setNotifyOnDecoIds(const std::set<u32> *notify_on_deco_ids);
bool addEvent(GenNotifyType type, v3s16 pos, u32 id=0);
void getEvents(std::map<std::string, std::vector<v3s16> > &event_map);
@@ -98,7 +99,7 @@ public:
private:
u32 m_notify_on = 0;
- std::set<u32> *m_notify_on_deco_ids;
+ const std::set<u32> *m_notify_on_deco_ids;
std::list<GenNotifyEvent> m_notify_events;
};
@@ -176,7 +177,7 @@ public:
GenerateNotifier gennotify;
Mapgen() = default;
- Mapgen(int mapgenid, MapgenParams *params, EmergeManager *emerge);
+ Mapgen(int mapgenid, MapgenParams *params, EmergeParams *emerge);
virtual ~Mapgen() = default;
DISABLE_CLASS_COPY(Mapgen);
@@ -215,7 +216,7 @@ public:
static MapgenType getMapgenType(const std::string &mgname);
static const char *getMapgenName(MapgenType mgtype);
static Mapgen *createMapgen(MapgenType mgtype, MapgenParams *params,
- EmergeManager *emerge);
+ EmergeParams *emerge);
static MapgenParams *createMapgenParams(MapgenType mgtype);
static void getMapgenNames(std::vector<const char *> *mgnames, bool include_hidden);
static void setDefaultSettings(Settings *settings);
@@ -243,7 +244,7 @@ private:
*/
class MapgenBasic : public Mapgen {
public:
- MapgenBasic(int mapgenid, MapgenParams *params, EmergeManager *emerge);
+ MapgenBasic(int mapgenid, MapgenParams *params, EmergeParams *emerge);
virtual ~MapgenBasic();
virtual void generateBiomes();
@@ -254,7 +255,7 @@ public:
virtual void generateDungeons(s16 max_stone_y);
protected:
- EmergeManager *m_emerge;
+ EmergeParams *m_emerge;
BiomeManager *m_bmgr;
Noise *noise_filler_depth;
diff --git a/src/mapgen/mapgen_carpathian.cpp b/src/mapgen/mapgen_carpathian.cpp
index 0dc1d33be..feb9b428c 100644
--- a/src/mapgen/mapgen_carpathian.cpp
+++ b/src/mapgen/mapgen_carpathian.cpp
@@ -26,7 +26,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
@@ -50,7 +49,7 @@ FlagDesc flagdesc_mapgen_carpathian[] = {
///////////////////////////////////////////////////////////////////////////////
-MapgenCarpathian::MapgenCarpathian(MapgenCarpathianParams *params, EmergeManager *emerge)
+MapgenCarpathian::MapgenCarpathian(MapgenCarpathianParams *params, EmergeParams *emerge)
: MapgenBasic(MAPGEN_CARPATHIAN, params, emerge)
{
base_level = params->base_level;
diff --git a/src/mapgen/mapgen_carpathian.h b/src/mapgen/mapgen_carpathian.h
index acd379958..31b2b91d8 100644
--- a/src/mapgen/mapgen_carpathian.h
+++ b/src/mapgen/mapgen_carpathian.h
@@ -79,7 +79,7 @@ struct MapgenCarpathianParams : public MapgenParams
class MapgenCarpathian : public MapgenBasic
{
public:
- MapgenCarpathian(MapgenCarpathianParams *params, EmergeManager *emerge);
+ MapgenCarpathian(MapgenCarpathianParams *params, EmergeParams *emerge);
~MapgenCarpathian();
virtual MapgenType getType() const { return MAPGEN_CARPATHIAN; }
diff --git a/src/mapgen/mapgen_flat.cpp b/src/mapgen/mapgen_flat.cpp
index 879435948..369777ad2 100644
--- a/src/mapgen/mapgen_flat.cpp
+++ b/src/mapgen/mapgen_flat.cpp
@@ -25,7 +25,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
@@ -48,7 +47,7 @@ FlagDesc flagdesc_mapgen_flat[] = {
///////////////////////////////////////////////////////////////////////////////////////
-MapgenFlat::MapgenFlat(MapgenFlatParams *params, EmergeManager *emerge)
+MapgenFlat::MapgenFlat(MapgenFlatParams *params, EmergeParams *emerge)
: MapgenBasic(MAPGEN_FLAT, params, emerge)
{
spflags = params->spflags;
diff --git a/src/mapgen/mapgen_flat.h b/src/mapgen/mapgen_flat.h
index c314c7605..4902a802c 100644
--- a/src/mapgen/mapgen_flat.h
+++ b/src/mapgen/mapgen_flat.h
@@ -64,7 +64,7 @@ struct MapgenFlatParams : public MapgenParams
class MapgenFlat : public MapgenBasic
{
public:
- MapgenFlat(MapgenFlatParams *params, EmergeManager *emerge);
+ MapgenFlat(MapgenFlatParams *params, EmergeParams *emerge);
~MapgenFlat();
virtual MapgenType getType() const { return MAPGEN_FLAT; }
diff --git a/src/mapgen/mapgen_fractal.cpp b/src/mapgen/mapgen_fractal.cpp
index 96febb4f4..cb55bc288 100644
--- a/src/mapgen/mapgen_fractal.cpp
+++ b/src/mapgen/mapgen_fractal.cpp
@@ -26,7 +26,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
@@ -48,7 +47,7 @@ FlagDesc flagdesc_mapgen_fractal[] = {
///////////////////////////////////////////////////////////////////////////////////////
-MapgenFractal::MapgenFractal(MapgenFractalParams *params, EmergeManager *emerge)
+MapgenFractal::MapgenFractal(MapgenFractalParams *params, EmergeParams *emerge)
: MapgenBasic(MAPGEN_FRACTAL, params, emerge)
{
spflags = params->spflags;
diff --git a/src/mapgen/mapgen_fractal.h b/src/mapgen/mapgen_fractal.h
index 971dfd822..23af925bc 100644
--- a/src/mapgen/mapgen_fractal.h
+++ b/src/mapgen/mapgen_fractal.h
@@ -72,7 +72,7 @@ struct MapgenFractalParams : public MapgenParams
class MapgenFractal : public MapgenBasic
{
public:
- MapgenFractal(MapgenFractalParams *params, EmergeManager *emerge);
+ MapgenFractal(MapgenFractalParams *params, EmergeParams *emerge);
~MapgenFractal();
virtual MapgenType getType() const { return MAPGEN_FRACTAL; }
diff --git a/src/mapgen/mapgen_singlenode.cpp b/src/mapgen/mapgen_singlenode.cpp
index b64524e1c..cade9e7a8 100644
--- a/src/mapgen/mapgen_singlenode.cpp
+++ b/src/mapgen/mapgen_singlenode.cpp
@@ -29,7 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "emerge.h"
-MapgenSinglenode::MapgenSinglenode(MapgenParams *params, EmergeManager *emerge)
+MapgenSinglenode::MapgenSinglenode(MapgenParams *params, EmergeParams *emerge)
: Mapgen(MAPGEN_SINGLENODE, params, emerge)
{
const NodeDefManager *ndef = emerge->ndef;
diff --git a/src/mapgen/mapgen_singlenode.h b/src/mapgen/mapgen_singlenode.h
index c21089eda..e056d9ab1 100644
--- a/src/mapgen/mapgen_singlenode.h
+++ b/src/mapgen/mapgen_singlenode.h
@@ -38,7 +38,7 @@ public:
content_t c_node;
u8 set_light;
- MapgenSinglenode(MapgenParams *params, EmergeManager *emerge);
+ MapgenSinglenode(MapgenParams *params, EmergeParams *emerge);
~MapgenSinglenode() = default;
virtual MapgenType getType() const { return MAPGEN_SINGLENODE; }
diff --git a/src/mapgen/mapgen_v5.cpp b/src/mapgen/mapgen_v5.cpp
index 447fe8c50..124667e5d 100644
--- a/src/mapgen/mapgen_v5.cpp
+++ b/src/mapgen/mapgen_v5.cpp
@@ -25,7 +25,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
@@ -45,7 +44,7 @@ FlagDesc flagdesc_mapgen_v5[] = {
};
-MapgenV5::MapgenV5(MapgenV5Params *params, EmergeManager *emerge)
+MapgenV5::MapgenV5(MapgenV5Params *params, EmergeParams *emerge)
: MapgenBasic(MAPGEN_V5, params, emerge)
{
spflags = params->spflags;
diff --git a/src/mapgen/mapgen_v5.h b/src/mapgen/mapgen_v5.h
index 17bc466f0..cf4ee4899 100644
--- a/src/mapgen/mapgen_v5.h
+++ b/src/mapgen/mapgen_v5.h
@@ -64,7 +64,7 @@ struct MapgenV5Params : public MapgenParams
class MapgenV5 : public MapgenBasic
{
public:
- MapgenV5(MapgenV5Params *params, EmergeManager *emerge);
+ MapgenV5(MapgenV5Params *params, EmergeParams *emerge);
~MapgenV5();
virtual MapgenType getType() const { return MAPGEN_V5; }
diff --git a/src/mapgen/mapgen_v6.cpp b/src/mapgen/mapgen_v6.cpp
index 653adc8ec..e9692246c 100644
--- a/src/mapgen/mapgen_v6.cpp
+++ b/src/mapgen/mapgen_v6.cpp
@@ -27,8 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-//#include "serverobject.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
@@ -56,7 +54,7 @@ FlagDesc flagdesc_mapgen_v6[] = {
/////////////////////////////////////////////////////////////////////////////
-MapgenV6::MapgenV6(MapgenV6Params *params, EmergeManager *emerge)
+MapgenV6::MapgenV6(MapgenV6Params *params, EmergeParams *emerge)
: Mapgen(MAPGEN_V6, params, emerge)
{
m_emerge = emerge;
@@ -132,6 +130,21 @@ MapgenV6::MapgenV6(MapgenV6Params *params, EmergeManager *emerge)
c_stair_cobble = c_cobble;
if (c_stair_desert_stone == CONTENT_IGNORE)
c_stair_desert_stone = c_desert_stone;
+
+ if (c_stone == CONTENT_IGNORE)
+ errorstream << "Mapgen v6: Mapgen alias 'mapgen_stone' is invalid!" << std::endl;
+ if (c_dirt == CONTENT_IGNORE)
+ errorstream << "Mapgen v6: Mapgen alias 'mapgen_dirt' is invalid!" << std::endl;
+ if (c_dirt_with_grass == CONTENT_IGNORE)
+ errorstream << "Mapgen v6: Mapgen alias 'mapgen_dirt_with_grass' is invalid!" << std::endl;
+ if (c_sand == CONTENT_IGNORE)
+ errorstream << "Mapgen v6: Mapgen alias 'mapgen_sand' is invalid!" << std::endl;
+ if (c_water_source == CONTENT_IGNORE)
+ errorstream << "Mapgen v6: Mapgen alias 'mapgen_water_source' is invalid!" << std::endl;
+ if (c_lava_source == CONTENT_IGNORE)
+ errorstream << "Mapgen v6: Mapgen alias 'mapgen_lava_source' is invalid!" << std::endl;
+ if (c_cobble == CONTENT_IGNORE)
+ errorstream << "Mapgen v6: Mapgen alias 'mapgen_cobble' is invalid!" << std::endl;
}
@@ -147,6 +160,8 @@ MapgenV6::~MapgenV6()
delete noise_humidity;
delete[] heightmap;
+
+ delete m_emerge; // our responsibility
}
diff --git a/src/mapgen/mapgen_v6.h b/src/mapgen/mapgen_v6.h
index d8cdcb26f..ff565edec 100644
--- a/src/mapgen/mapgen_v6.h
+++ b/src/mapgen/mapgen_v6.h
@@ -83,7 +83,7 @@ struct MapgenV6Params : public MapgenParams {
class MapgenV6 : public Mapgen {
public:
- EmergeManager *m_emerge;
+ EmergeParams *m_emerge;
int ystride;
u32 spflags;
@@ -133,7 +133,7 @@ public:
content_t c_stair_cobble;
content_t c_stair_desert_stone;
- MapgenV6(MapgenV6Params *params, EmergeManager *emerge);
+ MapgenV6(MapgenV6Params *params, EmergeParams *emerge);
~MapgenV6();
virtual MapgenType getType() const { return MAPGEN_V6; }
diff --git a/src/mapgen/mapgen_v7.cpp b/src/mapgen/mapgen_v7.cpp
index 325c4957a..e93dc9140 100644
--- a/src/mapgen/mapgen_v7.cpp
+++ b/src/mapgen/mapgen_v7.cpp
@@ -1,7 +1,7 @@
/*
Minetest
-Copyright (C) 2013-2019 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
-Copyright (C) 2014-2019 paramat
+Copyright (C) 2014-2020 paramat
+Copyright (C) 2013-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -26,7 +26,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
@@ -52,11 +51,17 @@ FlagDesc flagdesc_mapgen_v7[] = {
////////////////////////////////////////////////////////////////////////////////
-MapgenV7::MapgenV7(MapgenV7Params *params, EmergeManager *emerge)
+MapgenV7::MapgenV7(MapgenV7Params *params, EmergeParams *emerge)
: MapgenBasic(MAPGEN_V7, params, emerge)
{
spflags = params->spflags;
mount_zero_level = params->mount_zero_level;
+ floatland_ymin = params->floatland_ymin;
+ floatland_ymax = params->floatland_ymax;
+ floatland_taper = params->floatland_taper;
+ float_taper_exp = params->float_taper_exp;
+ floatland_density = params->floatland_density;
+ floatland_ywater = params->floatland_ywater;
cave_width = params->cave_width;
large_cave_depth = params->large_cave_depth;
@@ -71,6 +76,9 @@ MapgenV7::MapgenV7(MapgenV7Params *params, EmergeManager *emerge)
dungeon_ymin = params->dungeon_ymin;
dungeon_ymax = params->dungeon_ymax;
+ // Allocate floatland noise offset cache
+ this->float_offset_cache = new float[csize.Y + 2];
+
// 2D noise
noise_terrain_base =
new Noise(&params->np_terrain_base, seed, csize.X, csize.Z);
@@ -101,6 +109,12 @@ MapgenV7::MapgenV7(MapgenV7Params *params, EmergeManager *emerge)
new Noise(&params->np_ridge, seed, csize.X, csize.Y + 2, csize.Z);
}
+ if (spflags & MGV7_FLOATLANDS) {
+ // 3D noise, 1 up, 1 down overgeneration
+ noise_floatland =
+ new Noise(&params->np_floatland, seed, csize.X, csize.Y + 2, csize.Z);
+ }
+
// 3D noise, 1 down overgeneration
MapgenBasic::np_cave1 = params->np_cave1;
MapgenBasic::np_cave2 = params->np_cave2;
@@ -127,6 +141,12 @@ MapgenV7::~MapgenV7()
delete noise_ridge_uwater;
delete noise_ridge;
}
+
+ if (spflags & MGV7_FLOATLANDS) {
+ delete noise_floatland;
+ }
+
+ delete []float_offset_cache;
}
@@ -140,6 +160,7 @@ MapgenV7Params::MapgenV7Params():
np_ridge_uwater (0.0, 1.0, v3f(1000, 1000, 1000), 85039, 5, 0.6, 2.0),
np_mountain (-0.6, 1.0, v3f(250, 350, 250), 5333, 5, 0.63, 2.0),
np_ridge (0.0, 1.0, v3f(100, 100, 100), 6467, 4, 0.75, 2.0),
+ np_floatland (0.0, 0.7, v3f(384, 96, 384), 1009, 4, 0.75, 1.618),
np_cavern (0.0, 1.0, v3f(384, 128, 384), 723, 5, 0.63, 2.0),
np_cave1 (0.0, 12.0, v3f(61, 61, 61), 52534, 3, 0.5, 2.0),
np_cave2 (0.0, 12.0, v3f(67, 67, 67), 10325, 3, 0.5, 2.0),
@@ -152,6 +173,13 @@ void MapgenV7Params::readParams(const Settings *settings)
{
settings->getFlagStrNoEx("mgv7_spflags", spflags, flagdesc_mapgen_v7);
settings->getS16NoEx("mgv7_mount_zero_level", mount_zero_level);
+ settings->getS16NoEx("mgv7_floatland_ymin", floatland_ymin);
+ settings->getS16NoEx("mgv7_floatland_ymax", floatland_ymax);
+ settings->getS16NoEx("mgv7_floatland_taper", floatland_taper);
+ settings->getFloatNoEx("mgv7_float_taper_exp", float_taper_exp);
+ settings->getFloatNoEx("mgv7_floatland_density", floatland_density);
+ settings->getS16NoEx("mgv7_floatland_ywater", floatland_ywater);
+
settings->getFloatNoEx("mgv7_cave_width", cave_width);
settings->getS16NoEx("mgv7_large_cave_depth", large_cave_depth);
settings->getU16NoEx("mgv7_small_cave_num_min", small_cave_num_min);
@@ -174,6 +202,7 @@ void MapgenV7Params::readParams(const Settings *settings)
settings->getNoiseParams("mgv7_np_ridge_uwater", np_ridge_uwater);
settings->getNoiseParams("mgv7_np_mountain", np_mountain);
settings->getNoiseParams("mgv7_np_ridge", np_ridge);
+ settings->getNoiseParams("mgv7_np_floatland", np_floatland);
settings->getNoiseParams("mgv7_np_cavern", np_cavern);
settings->getNoiseParams("mgv7_np_cave1", np_cave1);
settings->getNoiseParams("mgv7_np_cave2", np_cave2);
@@ -185,6 +214,13 @@ void MapgenV7Params::writeParams(Settings *settings) const
{
settings->setFlagStr("mgv7_spflags", spflags, flagdesc_mapgen_v7);
settings->setS16("mgv7_mount_zero_level", mount_zero_level);
+ settings->setS16("mgv7_floatland_ymin", floatland_ymin);
+ settings->setS16("mgv7_floatland_ymax", floatland_ymax);
+ settings->setS16("mgv7_floatland_taper", floatland_taper);
+ settings->setFloat("mgv7_float_taper_exp", float_taper_exp);
+ settings->setFloat("mgv7_floatland_density", floatland_density);
+ settings->setS16("mgv7_floatland_ywater", floatland_ywater);
+
settings->setFloat("mgv7_cave_width", cave_width);
settings->setS16("mgv7_large_cave_depth", large_cave_depth);
settings->setU16("mgv7_small_cave_num_min", small_cave_num_min);
@@ -207,6 +243,7 @@ void MapgenV7Params::writeParams(Settings *settings) const
settings->setNoiseParams("mgv7_np_ridge_uwater", np_ridge_uwater);
settings->setNoiseParams("mgv7_np_mountain", np_mountain);
settings->setNoiseParams("mgv7_np_ridge", np_ridge);
+ settings->setNoiseParams("mgv7_np_floatland", np_floatland);
settings->setNoiseParams("mgv7_np_cavern", np_cavern);
settings->setNoiseParams("mgv7_np_cave1", np_cave1);
settings->setNoiseParams("mgv7_np_cave2", np_cave2);
@@ -358,8 +395,9 @@ void MapgenV7::makeChunk(BlockMakeData *data)
updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
// Calculate lighting
- // TODO disable in and just below floatlands
- bool propagate_shadow = true;
+ // Limit floatland shadows
+ bool propagate_shadow = !((spflags & MGV7_FLOATLANDS) &&
+ node_max.Y >= floatland_ymin - csize.Y * 2 && node_min.Y <= floatland_ymax);
if (flags & MG_LIGHT)
calcLighting(node_min - v3s16(0, 1, 0), node_max + v3s16(0, 1, 0),
@@ -428,6 +466,12 @@ bool MapgenV7::getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y)
}
+bool MapgenV7::getFloatlandTerrainFromMap(int idx_xyz, float float_offset)
+{
+ return noise_floatland->result[idx_xyz] + floatland_density - float_offset >= 0.0f;
+}
+
+
int MapgenV7::generateTerrain()
{
MapNode n_air(CONTENT_AIR);
@@ -447,6 +491,35 @@ int MapgenV7::generateTerrain()
noise_mountain->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
}
+ //// Floatlands
+ // 'Generate floatlands in this mapchunk' bool for
+ // simplification of condition checks in y-loop.
+ bool gen_floatlands = false;
+ u8 cache_index = 0;
+ // Y values where floatland tapering starts
+ s16 float_taper_ymax = floatland_ymax - floatland_taper;
+ s16 float_taper_ymin = floatland_ymin + floatland_taper;
+
+ if ((spflags & MGV7_FLOATLANDS) &&
+ node_max.Y >= floatland_ymin && node_min.Y <= floatland_ymax) {
+ gen_floatlands = true;
+ // Calculate noise for floatland generation
+ noise_floatland->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
+
+ // Cache floatland noise offset values, for floatland tapering
+ for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++, cache_index++) {
+ float float_offset = 0.0f;
+ if (y > float_taper_ymax) {
+ float_offset = std::pow((y - float_taper_ymax) / (float)floatland_taper,
+ float_taper_exp) * 4.0f;
+ } else if (y < float_taper_ymin) {
+ float_offset = std::pow((float_taper_ymin - y) / (float)floatland_taper,
+ float_taper_exp) * 4.0f;
+ }
+ float_offset_cache[cache_index] = float_offset;
+ }
+ }
+
//// Place nodes
const v3s16 &em = vm->m_area.getExtent();
s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT;
@@ -458,13 +531,15 @@ int MapgenV7::generateTerrain()
if (surface_y > stone_surface_max_y)
stone_surface_max_y = surface_y;
+ cache_index = 0;
u32 vi = vm->m_area.index(x, node_min.Y - 1, z);
u32 index3d = (z - node_min.Z) * zstride_1u1d + (x - node_min.X);
for (s16 y = node_min.Y - 1; y <= node_max.Y + 1;
y++,
index3d += ystride,
- VoxelArea::add_y(em, vi, 1)) {
+ VoxelArea::add_y(em, vi, 1),
+ cache_index++) {
if (vm->m_data[vi].getContent() != CONTENT_IGNORE)
continue;
@@ -475,10 +550,18 @@ int MapgenV7::generateTerrain()
vm->m_data[vi] = n_stone; // Mountain terrain
if (y > stone_surface_max_y)
stone_surface_max_y = y;
- } else if (y <= water_level) {
+ } else if (gen_floatlands &&
+ getFloatlandTerrainFromMap(index3d,
+ float_offset_cache[cache_index])) {
+ vm->m_data[vi] = n_stone; // Floatland terrain
+ if (y > stone_surface_max_y)
+ stone_surface_max_y = y;
+ } else if (y <= water_level) { // Surface water
vm->m_data[vi] = n_water;
+ } else if (gen_floatlands && y >= float_taper_ymax && y <= floatland_ywater) {
+ vm->m_data[vi] = n_water; // Water for solid floatland layer only
} else {
- vm->m_data[vi] = n_air;
+ vm->m_data[vi] = n_air; // Air
}
}
}
@@ -489,8 +572,8 @@ int MapgenV7::generateTerrain()
void MapgenV7::generateRidgeTerrain()
{
- // TODO disable river canyons in floatlands
- if (node_max.Y < water_level - 16)
+ if (node_max.Y < water_level - 16 ||
+ (node_max.Y >= floatland_ymin && node_min.Y <= floatland_ymax))
return;
noise_ridge->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z);
diff --git a/src/mapgen/mapgen_v7.h b/src/mapgen/mapgen_v7.h
index 0605c5c97..4020cd935 100644
--- a/src/mapgen/mapgen_v7.h
+++ b/src/mapgen/mapgen_v7.h
@@ -1,7 +1,7 @@
/*
Minetest
-Copyright (C) 2013-2018 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
-Copyright (C) 2014-2018 paramat
+Copyright (C) 2014-2020 paramat
+Copyright (C) 2013-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -36,6 +36,12 @@ extern FlagDesc flagdesc_mapgen_v7[];
struct MapgenV7Params : public MapgenParams {
s16 mount_zero_level = 0;
+ s16 floatland_ymin = 1024;
+ s16 floatland_ymax = 4096;
+ s16 floatland_taper = 256;
+ float float_taper_exp = 2.0f;
+ float floatland_density = -0.6f;
+ s16 floatland_ywater = -31000;
float cave_width = 0.09f;
s16 large_cave_depth = -33;
@@ -59,6 +65,7 @@ struct MapgenV7Params : public MapgenParams {
NoiseParams np_ridge_uwater;
NoiseParams np_mountain;
NoiseParams np_ridge;
+ NoiseParams np_floatland;
NoiseParams np_cavern;
NoiseParams np_cave1;
NoiseParams np_cave2;
@@ -75,7 +82,7 @@ struct MapgenV7Params : public MapgenParams {
class MapgenV7 : public MapgenBasic {
public:
- MapgenV7(MapgenV7Params *params, EmergeManager *emerge);
+ MapgenV7(MapgenV7Params *params, EmergeParams *emerge);
~MapgenV7();
virtual MapgenType getType() const { return MAPGEN_V7; }
@@ -87,12 +94,21 @@ public:
float baseTerrainLevelFromMap(int index);
bool getMountainTerrainAtPoint(s16 x, s16 y, s16 z);
bool getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y);
+ bool getFloatlandTerrainFromMap(int idx_xyz, float float_offset);
int generateTerrain();
void generateRidgeTerrain();
private:
s16 mount_zero_level;
+ s16 floatland_ymin;
+ s16 floatland_ymax;
+ s16 floatland_taper;
+ float float_taper_exp;
+ float floatland_density;
+ s16 floatland_ywater;
+
+ float *float_offset_cache = nullptr;
Noise *noise_terrain_base;
Noise *noise_terrain_alt;
@@ -102,4 +118,5 @@ private:
Noise *noise_ridge_uwater;
Noise *noise_mountain;
Noise *noise_ridge;
+ Noise *noise_floatland;
};
diff --git a/src/mapgen/mapgen_valleys.cpp b/src/mapgen/mapgen_valleys.cpp
index 2b8703fa5..efcc8ee85 100644
--- a/src/mapgen/mapgen_valleys.cpp
+++ b/src/mapgen/mapgen_valleys.cpp
@@ -54,7 +54,7 @@ FlagDesc flagdesc_mapgen_valleys[] = {
};
-MapgenValleys::MapgenValleys(MapgenValleysParams *params, EmergeManager *emerge)
+MapgenValleys::MapgenValleys(MapgenValleysParams *params, EmergeParams *emerge)
: MapgenBasic(MAPGEN_VALLEYS, params, emerge)
{
// NOTE: MapgenValleys has a hard dependency on BiomeGenOriginal
@@ -390,7 +390,7 @@ int MapgenValleys::generateTerrain()
// Rivers are placed where 'river' is negative
if (river < 0.0f) {
- // Use the the function -sqrt(1-x^2) which models a circle
+ // Use the function -sqrt(1-x^2) which models a circle
float tr = river / river_size_factor + 1.0f;
float depth = (river_depth_bed *
std::sqrt(std::fmax(0.0f, 1.0f - tr * tr)));
diff --git a/src/mapgen/mapgen_valleys.h b/src/mapgen/mapgen_valleys.h
index 1aec68842..34a923dfa 100644
--- a/src/mapgen/mapgen_valleys.h
+++ b/src/mapgen/mapgen_valleys.h
@@ -84,7 +84,7 @@ class MapgenValleys : public MapgenBasic {
public:
MapgenValleys(MapgenValleysParams *params,
- EmergeManager *emerge);
+ EmergeParams *emerge);
~MapgenValleys();
virtual MapgenType getType() const { return MAPGEN_VALLEYS; }
diff --git a/src/mapgen/mg_biome.cpp b/src/mapgen/mg_biome.cpp
index 345bc8c6a..610c38594 100644
--- a/src/mapgen/mg_biome.cpp
+++ b/src/mapgen/mg_biome.cpp
@@ -78,7 +78,7 @@ void BiomeManager::clear()
EmergeManager *emerge = m_server->getEmergeManager();
// Remove all dangling references in Decorations
- DecorationManager *decomgr = emerge->decomgr;
+ DecorationManager *decomgr = emerge->getWritableDecorationManager();
for (size_t i = 0; i != decomgr->getNumObjects(); i++) {
Decoration *deco = (Decoration *)decomgr->getRaw(i);
deco->biomes.clear();
@@ -92,9 +92,19 @@ void BiomeManager::clear()
}
+BiomeManager *BiomeManager::clone() const
+{
+ auto mgr = new BiomeManager();
+ assert(mgr);
+ ObjDefManager::cloneTo(mgr);
+ mgr->m_server = m_server;
+ return mgr;
+}
+
+
// For BiomeGen type 'BiomeGenOriginal'
float BiomeManager::getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat,
- NoiseParams &np_heat_blend, u64 seed)
+ NoiseParams &np_heat_blend, u64 seed) const
{
return
NoisePerlin2D(&np_heat, pos.X, pos.Z, seed) +
@@ -104,7 +114,7 @@ float BiomeManager::getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat,
// For BiomeGen type 'BiomeGenOriginal'
float BiomeManager::getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity,
- NoiseParams &np_humidity_blend, u64 seed)
+ NoiseParams &np_humidity_blend, u64 seed) const
{
return
NoisePerlin2D(&np_humidity, pos.X, pos.Z, seed) +
@@ -113,7 +123,8 @@ float BiomeManager::getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity
// For BiomeGen type 'BiomeGenOriginal'
-Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat, float humidity, v3s16 pos)
+const Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat,
+ float humidity, v3s16 pos) const
{
Biome *biome_closest = nullptr;
Biome *biome_closest_blend = nullptr;
@@ -143,9 +154,11 @@ Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat, float humidity, v3s16
}
}
- mysrand(pos.Y + (heat + humidity) * 0.9f);
+ const u64 seed = pos.Y + (heat + humidity) * 0.9f;
+ PcgRandom rng(seed);
+
if (biome_closest_blend && dist_min_blend <= dist_min &&
- myrand_range(0, biome_closest_blend->vertical_blend) >=
+ rng.range(0, biome_closest_blend->vertical_blend) >=
pos.Y - biome_closest_blend->max_pos.Y)
return biome_closest_blend;
@@ -308,10 +321,11 @@ Biome *BiomeGenOriginal::calcBiomeFromNoise(float heat, float humidity, v3s16 po
// Carefully tune pseudorandom seed variation to avoid single node dither
// and create larger scale blending patterns similar to horizontal biome
// blend.
- mysrand(pos.Y + (heat + humidity) * 0.9f);
+ const u64 seed = pos.Y + (heat + humidity) * 0.9f;
+ PcgRandom rng(seed);
if (biome_closest_blend && dist_min_blend <= dist_min &&
- myrand_range(0, biome_closest_blend->vertical_blend) >=
+ rng.range(0, biome_closest_blend->vertical_blend) >=
pos.Y - biome_closest_blend->max_pos.Y)
return biome_closest_blend;
@@ -321,6 +335,41 @@ Biome *BiomeGenOriginal::calcBiomeFromNoise(float heat, float humidity, v3s16 po
////////////////////////////////////////////////////////////////////////////////
+ObjDef *Biome::clone() const
+{
+ auto obj = new Biome();
+ ObjDef::cloneTo(obj);
+ NodeResolver::cloneTo(obj);
+
+ obj->flags = flags;
+
+ obj->c_top = c_top;
+ obj->c_filler = c_filler;
+ obj->c_stone = c_stone;
+ obj->c_water_top = c_water_top;
+ obj->c_water = c_water;
+ obj->c_river_water = c_river_water;
+ obj->c_riverbed = c_riverbed;
+ obj->c_dust = c_dust;
+ obj->c_cave_liquid = c_cave_liquid;
+ obj->c_dungeon = c_dungeon;
+ obj->c_dungeon_alt = c_dungeon_alt;
+ obj->c_dungeon_stair = c_dungeon_stair;
+
+ obj->depth_top = depth_top;
+ obj->depth_filler = depth_filler;
+ obj->depth_water_top = depth_water_top;
+ obj->depth_riverbed = depth_riverbed;
+
+ obj->min_pos = min_pos;
+ obj->max_pos = max_pos;
+ obj->heat_point = heat_point;
+ obj->humidity_point = humidity_point;
+ obj->vertical_blend = vertical_blend;
+
+ return obj;
+}
+
void Biome::resolveNodeNames()
{
getIdFromNrBacklog(&c_top, "mapgen_stone", CONTENT_AIR, false);
diff --git a/src/mapgen/mg_biome.h b/src/mapgen/mg_biome.h
index ee148adbc..be4cfea4d 100644
--- a/src/mapgen/mg_biome.h
+++ b/src/mapgen/mg_biome.h
@@ -1,7 +1,7 @@
/*
Minetest
-Copyright (C) 2014-2018 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
-Copyright (C) 2014-2018 paramat
+Copyright (C) 2014-2020 paramat
+Copyright (C) 2014-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -32,7 +32,7 @@ class BiomeManager;
//// Biome
////
-typedef u8 biome_t;
+typedef u16 biome_t;
#define BIOME_NONE ((biome_t)0)
@@ -42,6 +42,8 @@ enum BiomeType {
class Biome : public ObjDef, public NodeResolver {
public:
+ ObjDef *clone() const;
+
u32 flags;
content_t c_top;
@@ -88,6 +90,7 @@ struct BiomeParams {
s32 seed;
};
+// WARNING: this class is not thread-safe
class BiomeGen {
public:
virtual ~BiomeGen() = default;
@@ -191,6 +194,8 @@ public:
BiomeManager(Server *server);
virtual ~BiomeManager() = default;
+ BiomeManager *clone() const;
+
const char *getObjectTitle() const
{
return "biome";
@@ -226,12 +231,15 @@ public:
// For BiomeGen type 'BiomeGenOriginal'
float getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat,
- NoiseParams &np_heat_blend, u64 seed);
+ NoiseParams &np_heat_blend, u64 seed) const;
float getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity,
- NoiseParams &np_humidity_blend, u64 seed);
- Biome *getBiomeFromNoiseOriginal(float heat, float humidity, v3s16 pos);
+ NoiseParams &np_humidity_blend, u64 seed) const;
+ const Biome *getBiomeFromNoiseOriginal(float heat, float humidity,
+ v3s16 pos) const;
private:
+ BiomeManager() {};
+
Server *m_server;
};
diff --git a/src/mapgen/mg_decoration.cpp b/src/mapgen/mg_decoration.cpp
index 28dde0209..a4cada396 100644
--- a/src/mapgen/mg_decoration.cpp
+++ b/src/mapgen/mg_decoration.cpp
@@ -67,6 +67,13 @@ size_t DecorationManager::placeAllDecos(Mapgen *mg, u32 blockseed,
return nplaced;
}
+DecorationManager *DecorationManager::clone() const
+{
+ auto mgr = new DecorationManager();
+ ObjDefManager::cloneTo(mgr);
+ return mgr;
+}
+
///////////////////////////////////////////////////////////////////////////////
@@ -199,8 +206,7 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
// All-surfaces decorations
// Check biome of column
if (mg->biomemap && !biomes.empty()) {
- std::unordered_set<u8>::const_iterator iter =
- biomes.find(mg->biomemap[mapindex]);
+ auto iter = biomes.find(mg->biomemap[mapindex]);
if (iter == biomes.end())
continue;
}
@@ -252,8 +258,7 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
continue;
if (mg->biomemap && !biomes.empty()) {
- std::unordered_set<u8>::const_iterator iter =
- biomes.find(mg->biomemap[mapindex]);
+ auto iter = biomes.find(mg->biomemap[mapindex]);
if (iter == biomes.end())
continue;
}
@@ -269,9 +274,42 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
}
+void Decoration::cloneTo(Decoration *def) const
+{
+ ObjDef::cloneTo(def);
+ def->flags = flags;
+ def->mapseed = mapseed;
+ def->c_place_on = c_place_on;
+ def->sidelen = sidelen;
+ def->y_min = y_min;
+ def->y_max = y_max;
+ def->fill_ratio = fill_ratio;
+ def->np = np;
+ def->c_spawnby = c_spawnby;
+ def->nspawnby = nspawnby;
+ def->place_offset_y = place_offset_y;
+ def->biomes = biomes;
+}
+
+
///////////////////////////////////////////////////////////////////////////////
+ObjDef *DecoSimple::clone() const
+{
+ auto def = new DecoSimple();
+ Decoration::cloneTo(def);
+
+ def->c_decos = c_decos;
+ def->deco_height = deco_height;
+ def->deco_height_max = deco_height_max;
+ def->deco_param2 = deco_param2;
+ def->deco_param2_max = deco_param2_max;
+
+ return def;
+}
+
+
void DecoSimple::resolveNodeNames()
{
Decoration::resolveNodeNames();
@@ -351,6 +389,31 @@ size_t DecoSimple::generate(MMVManip *vm, PcgRandom *pr, v3s16 p, bool ceiling)
///////////////////////////////////////////////////////////////////////////////
+DecoSchematic::~DecoSchematic()
+{
+ if (was_cloned)
+ delete schematic;
+}
+
+
+ObjDef *DecoSchematic::clone() const
+{
+ auto def = new DecoSchematic();
+ Decoration::cloneTo(def);
+ NodeResolver::cloneTo(def);
+
+ def->rotation = rotation;
+ /* FIXME: We do not own this schematic, yet we only have a pointer to it
+ * and not a handle. We are left with no option but to clone it ourselves.
+ * This is a waste of memory and should be replaced with an alternative
+ * approach sometime. */
+ def->schematic = dynamic_cast<Schematic*>(schematic->clone());
+ def->was_cloned = true;
+
+ return def;
+}
+
+
size_t DecoSchematic::generate(MMVManip *vm, PcgRandom *pr, v3s16 p, bool ceiling)
{
// Schematic could have been unloaded but not the decoration
diff --git a/src/mapgen/mg_decoration.h b/src/mapgen/mg_decoration.h
index 03fec04fd..1ea02a527 100644
--- a/src/mapgen/mg_decoration.h
+++ b/src/mapgen/mg_decoration.h
@@ -25,6 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "noise.h"
#include "nodedef.h"
+typedef u16 biome_t; // copy from mg_biome.h to avoid an unnecessary include
+
class Mapgen;
class MMVManip;
class PcgRandom;
@@ -72,12 +74,17 @@ public:
s16 nspawnby;
s16 place_offset_y = 0;
- std::unordered_set<u8> biomes;
+ std::unordered_set<biome_t> biomes;
+
+protected:
+ void cloneTo(Decoration *def) const;
};
class DecoSimple : public Decoration {
public:
+ ObjDef *clone() const;
+
virtual void resolveNodeNames();
virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p, bool ceiling);
@@ -91,12 +98,16 @@ public:
class DecoSchematic : public Decoration {
public:
+ ObjDef *clone() const;
+
DecoSchematic() = default;
+ virtual ~DecoSchematic();
virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p, bool ceiling);
Rotation rotation;
Schematic *schematic = nullptr;
+ bool was_cloned = false; // see FIXME inside DecoSchemtic::clone()
};
@@ -113,6 +124,8 @@ public:
DecorationManager(IGameDef *gamedef);
virtual ~DecorationManager() = default;
+ DecorationManager *clone() const;
+
const char *getObjectTitle() const
{
return "decoration";
@@ -133,4 +146,7 @@ public:
}
size_t placeAllDecos(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+
+private:
+ DecorationManager() {};
};
diff --git a/src/mapgen/mg_ore.cpp b/src/mapgen/mg_ore.cpp
index c36249cb9..b50ed6a32 100644
--- a/src/mapgen/mg_ore.cpp
+++ b/src/mapgen/mg_ore.cpp
@@ -1,7 +1,7 @@
/*
Minetest
-Copyright (C) 2014-2018 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
-Copyright (C) 2015-2018 paramat
+Copyright (C) 2015-2020 paramat
+Copyright (C) 2014-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -72,6 +72,14 @@ void OreManager::clear()
}
+OreManager *OreManager::clone() const
+{
+ auto mgr = new OreManager();
+ ObjDefManager::cloneTo(mgr);
+ return mgr;
+}
+
+
///////////////////////////////////////////////////////////////////////////////
@@ -106,11 +114,39 @@ size_t Ore::placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
}
+void Ore::cloneTo(Ore *def) const
+{
+ ObjDef::cloneTo(def);
+ NodeResolver::cloneTo(def);
+ def->c_ore = c_ore;
+ def->c_wherein = c_wherein;
+ def->clust_scarcity = clust_scarcity;
+ def->clust_num_ores = clust_num_ores;
+ def->clust_size = clust_size;
+ def->y_min = y_min;
+ def->y_max = y_max;
+ def->ore_param2 = ore_param2;
+ def->flags = flags;
+ def->nthresh = nthresh;
+ def->np = np;
+ def->noise = nullptr; // cannot be shared! so created on demand
+ def->biomes = biomes;
+}
+
+
///////////////////////////////////////////////////////////////////////////////
+ObjDef *OreScatter::clone() const
+{
+ auto def = new OreScatter();
+ Ore::cloneTo(def);
+ return def;
+}
+
+
void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap)
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap)
{
PcgRandom pr(blockseed);
MapNode n_ore(c_ore, 0, ore_param2);
@@ -134,7 +170,7 @@ void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed,
if (biomemap && !biomes.empty()) {
u32 index = sizex * (z0 - nmin.Z) + (x0 - nmin.X);
- std::unordered_set<u8>::const_iterator it = biomes.find(biomemap[index]);
+ auto it = biomes.find(biomemap[index]);
if (it == biomes.end())
continue;
}
@@ -158,8 +194,21 @@ void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed,
///////////////////////////////////////////////////////////////////////////////
+ObjDef *OreSheet::clone() const
+{
+ auto def = new OreSheet();
+ Ore::cloneTo(def);
+
+ def->column_height_max = column_height_max;
+ def->column_height_min = column_height_min;
+ def->column_midpoint_factor = column_midpoint_factor;
+
+ return def;
+}
+
+
void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap)
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap)
{
PcgRandom pr(blockseed + 4234);
MapNode n_ore(c_ore, 0, ore_param2);
@@ -188,7 +237,7 @@ void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed,
continue;
if (biomemap && !biomes.empty()) {
- std::unordered_set<u8>::const_iterator it = biomes.find(biomemap[index]);
+ auto it = biomes.find(biomemap[index]);
if (it == biomes.end())
continue;
}
@@ -221,8 +270,22 @@ OrePuff::~OrePuff()
}
+ObjDef *OrePuff::clone() const
+{
+ auto def = new OrePuff();
+ Ore::cloneTo(def);
+
+ def->np_puff_top = np_puff_top;
+ def->np_puff_bottom = np_puff_bottom;
+ def->noise_puff_top = nullptr; // cannot be shared, on-demand
+ def->noise_puff_bottom = nullptr;
+
+ return def;
+}
+
+
void OrePuff::generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap)
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap)
{
PcgRandom pr(blockseed + 4234);
MapNode n_ore(c_ore, 0, ore_param2);
@@ -249,7 +312,7 @@ void OrePuff::generate(MMVManip *vm, int mapseed, u32 blockseed,
continue;
if (biomemap && !biomes.empty()) {
- std::unordered_set<u8>::const_iterator it = biomes.find(biomemap[index]);
+ auto it = biomes.find(biomemap[index]);
if (it == biomes.end())
continue;
}
@@ -294,8 +357,16 @@ void OrePuff::generate(MMVManip *vm, int mapseed, u32 blockseed,
///////////////////////////////////////////////////////////////////////////////
+ObjDef *OreBlob::clone() const
+{
+ auto def = new OreBlob();
+ Ore::cloneTo(def);
+ return def;
+}
+
+
void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap)
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap)
{
PcgRandom pr(blockseed + 2404);
MapNode n_ore(c_ore, 0, ore_param2);
@@ -317,7 +388,7 @@ void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed,
if (biomemap && !biomes.empty()) {
u32 bmapidx = sizex * (z0 - nmin.Z) + (x0 - nmin.X);
- std::unordered_set<u8>::const_iterator it = biomes.find(biomemap[bmapidx]);
+ auto it = biomes.find(biomemap[bmapidx]);
if (it == biomes.end())
continue;
}
@@ -366,8 +437,21 @@ OreVein::~OreVein()
}
+ObjDef *OreVein::clone() const
+{
+ auto def = new OreVein();
+ Ore::cloneTo(def);
+
+ def->random_factor = random_factor;
+ def->noise2 = nullptr; // cannot be shared, on-demand
+ def->sizey_prev = sizey_prev;
+
+ return def;
+}
+
+
void OreVein::generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap)
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap)
{
PcgRandom pr(blockseed + 520);
MapNode n_ore(c_ore, 0, ore_param2);
@@ -401,7 +485,7 @@ void OreVein::generate(MMVManip *vm, int mapseed, u32 blockseed,
if (biomemap && !biomes.empty()) {
u32 bmapidx = sizex * (z - nmin.Z) + (x - nmin.X);
- std::unordered_set<u8>::const_iterator it = biomes.find(biomemap[bmapidx]);
+ auto it = biomes.find(biomemap[bmapidx]);
if (it == biomes.end())
continue;
}
@@ -434,8 +518,21 @@ OreStratum::~OreStratum()
}
+ObjDef *OreStratum::clone() const
+{
+ auto def = new OreStratum();
+ Ore::cloneTo(def);
+
+ def->np_stratum_thickness = np_stratum_thickness;
+ def->noise_stratum_thickness = nullptr; // cannot be shared, on-demand
+ def->stratum_thickness = stratum_thickness;
+
+ return def;
+}
+
+
void OreStratum::generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap)
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap)
{
PcgRandom pr(blockseed + 4234);
MapNode n_ore(c_ore, 0, ore_param2);
@@ -463,7 +560,7 @@ void OreStratum::generate(MMVManip *vm, int mapseed, u32 blockseed,
for (int z = nmin.Z; z <= nmax.Z; z++)
for (int x = nmin.X; x <= nmax.X; x++, index++) {
if (biomemap && !biomes.empty()) {
- std::unordered_set<u8>::const_iterator it = biomes.find(biomemap[index]);
+ auto it = biomes.find(biomemap[index]);
if (it == biomes.end())
continue;
}
diff --git a/src/mapgen/mg_ore.h b/src/mapgen/mg_ore.h
index d89360c3c..76420fab4 100644
--- a/src/mapgen/mg_ore.h
+++ b/src/mapgen/mg_ore.h
@@ -1,7 +1,7 @@
/*
Minetest
-Copyright (C) 2014-2018 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
-Copyright (C) 2015-2018 paramat
+Copyright (C) 2015-2020 paramat
+Copyright (C) 2014-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -25,6 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "noise.h"
#include "nodedef.h"
+typedef u16 biome_t; // copy from mg_biome.h to avoid an unnecessary include
+
class Noise;
class Mapgen;
class MMVManip;
@@ -64,7 +66,7 @@ public:
float nthresh; // threshold for noise at which an ore is placed
NoiseParams np; // noise for distribution of clusters (NULL for uniform scattering)
Noise *noise = nullptr;
- std::unordered_set<u8> biomes;
+ std::unordered_set<biome_t> biomes;
Ore() = default;;
virtual ~Ore();
@@ -73,33 +75,42 @@ public:
size_t placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap) = 0;
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap) = 0;
+
+protected:
+ void cloneTo(Ore *def) const;
};
class OreScatter : public Ore {
public:
static const bool NEEDS_NOISE = false;
+ ObjDef *clone() const;
+
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap);
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap);
};
class OreSheet : public Ore {
public:
static const bool NEEDS_NOISE = true;
+ ObjDef *clone() const;
+
u16 column_height_min;
u16 column_height_max;
float column_midpoint_factor;
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap);
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap);
};
class OrePuff : public Ore {
public:
static const bool NEEDS_NOISE = true;
+ ObjDef *clone() const;
+
NoiseParams np_puff_top;
NoiseParams np_puff_bottom;
Noise *noise_puff_top = nullptr;
@@ -109,21 +120,25 @@ public:
virtual ~OrePuff();
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap);
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap);
};
class OreBlob : public Ore {
public:
static const bool NEEDS_NOISE = true;
+ ObjDef *clone() const;
+
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap);
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap);
};
class OreVein : public Ore {
public:
static const bool NEEDS_NOISE = true;
+ ObjDef *clone() const;
+
float random_factor;
Noise *noise2 = nullptr;
int sizey_prev = 0;
@@ -132,13 +147,15 @@ public:
virtual ~OreVein();
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap);
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap);
};
class OreStratum : public Ore {
public:
static const bool NEEDS_NOISE = false;
+ ObjDef *clone() const;
+
NoiseParams np_stratum_thickness;
Noise *noise_stratum_thickness = nullptr;
u16 stratum_thickness;
@@ -147,7 +164,7 @@ public:
virtual ~OreStratum();
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
- v3s16 nmin, v3s16 nmax, u8 *biomemap);
+ v3s16 nmin, v3s16 nmax, biome_t *biomemap);
};
class OreManager : public ObjDefManager {
@@ -155,6 +172,8 @@ public:
OreManager(IGameDef *gamedef);
virtual ~OreManager() = default;
+ OreManager *clone() const;
+
const char *getObjectTitle() const
{
return "ore";
@@ -183,4 +202,7 @@ public:
void clear();
size_t placeAllOres(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+
+private:
+ OreManager() {};
};
diff --git a/src/mapgen/mg_schematic.cpp b/src/mapgen/mg_schematic.cpp
index c1acbfd9d..ba102d997 100644
--- a/src/mapgen/mg_schematic.cpp
+++ b/src/mapgen/mg_schematic.cpp
@@ -43,12 +43,21 @@ SchematicManager::SchematicManager(Server *server) :
}
+SchematicManager *SchematicManager::clone() const
+{
+ auto mgr = new SchematicManager();
+ assert(mgr);
+ ObjDefManager::cloneTo(mgr);
+ return mgr;
+}
+
+
void SchematicManager::clear()
{
EmergeManager *emerge = m_server->getEmergeManager();
// Remove all dangling references in Decorations
- DecorationManager *decomgr = emerge->decomgr;
+ DecorationManager *decomgr = emerge->getWritableDecorationManager();
for (size_t i = 0; i != decomgr->getNumObjects(); i++) {
Decoration *deco = (Decoration *)decomgr->getRaw(i);
@@ -77,6 +86,25 @@ Schematic::~Schematic()
delete []slice_probs;
}
+ObjDef *Schematic::clone() const
+{
+ auto def = new Schematic();
+ ObjDef::cloneTo(def);
+ NodeResolver::cloneTo(def);
+
+ def->c_nodes = c_nodes;
+ def->flags = flags;
+ def->size = size;
+ FATAL_ERROR_IF(!schemdata, "Schematic can only be cloned after loading");
+ u32 nodecount = size.X * size.Y * size.Z;
+ def->schemdata = new MapNode[nodecount];
+ memcpy(def->schemdata, schemdata, sizeof(MapNode) * nodecount);
+ def->slice_probs = new u8[size.Y];
+ memcpy(def->slice_probs, slice_probs, sizeof(u8) * size.Y);
+
+ return def;
+}
+
void Schematic::resolveNodeNames()
{
@@ -93,6 +121,7 @@ void Schematic::resolveNodeNames()
void Schematic::blitToVManip(MMVManip *vm, v3s16 p, Rotation rot, bool force_place)
{
+ assert(schemdata && slice_probs);
sanity_check(m_ndef != NULL);
int xstride = 1;
@@ -177,7 +206,7 @@ bool Schematic::placeOnVManip(MMVManip *vm, v3s16 p, u32 flags,
Rotation rot, bool force_place)
{
assert(vm != NULL);
- assert(schemdata != NULL);
+ assert(schemdata && slice_probs);
sanity_check(m_ndef != NULL);
//// Determine effective rotation and effective schematic dimensions
@@ -330,7 +359,7 @@ bool Schematic::deserializeFromMts(std::istream *is,
bool Schematic::serializeToMts(std::ostream *os,
- const std::vector<std::string> &names)
+ const std::vector<std::string> &names) const
{
std::ostream &ss = *os;
@@ -354,7 +383,8 @@ bool Schematic::serializeToMts(std::ostream *os,
bool Schematic::serializeToLua(std::ostream *os,
- const std::vector<std::string> &names, bool use_comments, u32 indent_spaces)
+ const std::vector<std::string> &names, bool use_comments,
+ u32 indent_spaces) const
{
std::ostream &ss = *os;
diff --git a/src/mapgen/mg_schematic.h b/src/mapgen/mg_schematic.h
index 371b37557..6b31251b6 100644
--- a/src/mapgen/mg_schematic.h
+++ b/src/mapgen/mg_schematic.h
@@ -95,6 +95,8 @@ public:
Schematic();
virtual ~Schematic();
+ ObjDef *clone() const;
+
virtual void resolveNodeNames();
bool loadSchematicFromFile(const std::string &filename,
@@ -104,9 +106,10 @@ public:
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);
+ 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);
+ 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);
@@ -128,6 +131,8 @@ public:
SchematicManager(Server *server);
virtual ~SchematicManager() = default;
+ SchematicManager *clone() const;
+
virtual void clear();
const char *getObjectTitle() const
@@ -141,6 +146,8 @@ public:
}
private:
+ SchematicManager() {};
+
Server *m_server;
};
diff --git a/src/mapgen/treegen.cpp b/src/mapgen/treegen.cpp
index 0d8af2851..e7e30c880 100644
--- a/src/mapgen/treegen.cpp
+++ b/src/mapgen/treegen.cpp
@@ -25,7 +25,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/numeric.h"
#include "map.h"
#include "mapblock.h"
-#include "serverenvironment.h"
#include "nodedef.h"
#include "treegen.h"
#include "voxelalgorithms.h"
@@ -44,6 +43,12 @@ void make_tree(MMVManip &vmanip, v3s16 p0, bool is_apple_tree,
MapNode treenode(ndef->getId("mapgen_tree"));
MapNode leavesnode(ndef->getId("mapgen_leaves"));
MapNode applenode(ndef->getId("mapgen_apple"));
+ if (treenode == CONTENT_IGNORE)
+ errorstream << "Treegen: Mapgen alias 'mapgen_tree' is invalid!" << std::endl;
+ if (leavesnode == CONTENT_IGNORE)
+ errorstream << "Treegen: Mapgen alias 'mapgen_leaves' is invalid!" << std::endl;
+ if (applenode == CONTENT_IGNORE)
+ errorstream << "Treegen: Mapgen alias 'mapgen_apple' is invalid!" << std::endl;
PseudoRandom pr(seed);
s16 trunk_h = pr.range(4, 5);
@@ -114,10 +119,9 @@ void make_tree(MMVManip &vmanip, v3s16 p0, bool is_apple_tree,
// L-System tree LUA spawner
-treegen::error spawn_ltree(ServerEnvironment *env, v3s16 p0,
+treegen::error spawn_ltree(ServerMap *map, v3s16 p0,
const NodeDefManager *ndef, const TreeDef &tree_definition)
{
- ServerMap *map = &env->getServerMap();
std::map<v3s16, MapBlock*> modified_blocks;
MMVManip vmanip(map);
v3s16 tree_blockp = getNodeBlockPos(p0);
@@ -144,7 +148,6 @@ treegen::error spawn_ltree(ServerEnvironment *env, v3s16 p0,
treegen::error make_ltree(MMVManip &vmanip, v3s16 p0,
const NodeDefManager *ndef, TreeDef tree_definition)
{
- MapNode dirtnode(ndef->getId("mapgen_dirt"));
s32 seed;
if (tree_definition.explicit_seed)
seed = tree_definition.seed + 14002;
@@ -222,43 +225,43 @@ treegen::error make_ltree(MMVManip &vmanip, v3s16 p0,
axiom = temp;
}
- //make sure tree is not floating in the air
+ // Add trunk nodes below a wide trunk to avoid gaps when tree is on sloping ground
if (tree_definition.trunk_type == "double") {
- tree_node_placement(
+ tree_trunk_placement(
vmanip,
v3f(position.X + 1, position.Y - 1, position.Z),
- dirtnode
+ tree_definition
);
- tree_node_placement(
+ tree_trunk_placement(
vmanip,
v3f(position.X, position.Y - 1, position.Z + 1),
- dirtnode
+ tree_definition
);
- tree_node_placement(
+ tree_trunk_placement(
vmanip,
v3f(position.X + 1, position.Y - 1, position.Z + 1),
- dirtnode
+ tree_definition
);
} else if (tree_definition.trunk_type == "crossed") {
- tree_node_placement(
+ tree_trunk_placement(
vmanip,
v3f(position.X + 1, position.Y - 1, position.Z),
- dirtnode
+ tree_definition
);
- tree_node_placement(
+ tree_trunk_placement(
vmanip,
v3f(position.X - 1, position.Y - 1, position.Z),
- dirtnode
+ tree_definition
);
- tree_node_placement(
+ tree_trunk_placement(
vmanip,
v3f(position.X, position.Y - 1, position.Z + 1),
- dirtnode
+ tree_definition
);
- tree_node_placement(
+ tree_trunk_placement(
vmanip,
v3f(position.X, position.Y - 1, position.Z - 1),
- dirtnode
+ tree_definition
);
}
@@ -365,7 +368,7 @@ treegen::error make_ltree(MMVManip &vmanip, v3s16 p0,
!tree_definition.thin_branches)) {
tree_trunk_placement(
vmanip,
- v3f(position.X +1 , position.Y, position.Z),
+ v3f(position.X + 1, position.Y, position.Z),
tree_definition
);
tree_trunk_placement(
@@ -662,6 +665,10 @@ void make_jungletree(MMVManip &vmanip, v3s16 p0, const NodeDefManager *ndef,
c_tree = ndef->getId("mapgen_tree");
if (c_leaves == CONTENT_IGNORE)
c_leaves = ndef->getId("mapgen_leaves");
+ if (c_tree == CONTENT_IGNORE)
+ errorstream << "Treegen: Mapgen alias 'mapgen_jungletree' is invalid!" << std::endl;
+ if (c_leaves == CONTENT_IGNORE)
+ errorstream << "Treegen: Mapgen alias 'mapgen_jungleleaves' is invalid!" << std::endl;
MapNode treenode(c_tree);
MapNode leavesnode(c_leaves);
@@ -765,6 +772,10 @@ void make_pine_tree(MMVManip &vmanip, v3s16 p0, const NodeDefManager *ndef,
c_leaves = ndef->getId("mapgen_leaves");
if (c_snow == CONTENT_IGNORE)
c_snow = CONTENT_AIR;
+ if (c_tree == CONTENT_IGNORE)
+ errorstream << "Treegen: Mapgen alias 'mapgen_pine_tree' is invalid!" << std::endl;
+ if (c_leaves == CONTENT_IGNORE)
+ errorstream << "Treegen: Mapgen alias 'mapgen_pine_needles' is invalid!" << std::endl;
MapNode treenode(c_tree);
MapNode leavesnode(c_leaves);
diff --git a/src/mapgen/treegen.h b/src/mapgen/treegen.h
index 5ab79f428..447baabb3 100644
--- a/src/mapgen/treegen.h
+++ b/src/mapgen/treegen.h
@@ -26,8 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class MMVManip;
class NodeDefManager;
-class ServerEnvironment;
-
+class ServerMap;
namespace treegen {
@@ -73,7 +72,7 @@ namespace treegen {
treegen::error make_ltree(MMVManip &vmanip, v3s16 p0,
const NodeDefManager *ndef, TreeDef tree_definition);
// Spawn L-systems tree from LUA
- treegen::error spawn_ltree (ServerEnvironment *env, v3s16 p0,
+ treegen::error spawn_ltree (ServerMap *map, v3s16 p0,
const NodeDefManager *ndef, const TreeDef &tree_definition);
// L-System tree gen helper functions
diff --git a/src/mapnode.cpp b/src/mapnode.cpp
index bf7e79a71..dcf1f6d6e 100644
--- a/src/mapnode.cpp
+++ b/src/mapnode.cpp
@@ -584,7 +584,7 @@ u8 MapNode::getMaxLevel(const NodeDefManager *nodemgr) const
if( f.liquid_type == LIQUID_FLOWING || f.param_type_2 == CPT2_FLOWINGLIQUID)
return LIQUID_LEVEL_MAX;
if(f.leveled || f.param_type_2 == CPT2_LEVELED)
- return LEVELED_MAX;
+ return f.leveled_max;
return 0;
}
@@ -603,14 +603,15 @@ u8 MapNode::getLevel(const NodeDefManager *nodemgr) const
if (level)
return level;
}
- if (f.leveled > LEVELED_MAX)
- return LEVELED_MAX;
+ // Return static value from nodedef if param2 isn't used for level
+ if (f.leveled > f.leveled_max)
+ return f.leveled_max;
return f.leveled;
}
-u8 MapNode::setLevel(const NodeDefManager *nodemgr, s8 level)
+s8 MapNode::setLevel(const NodeDefManager *nodemgr, s16 level)
{
- u8 rest = 0;
+ s8 rest = 0;
const ContentFeatures &f = nodemgr->get(*this);
if (f.param_type_2 == CPT2_FLOWINGLIQUID
|| f.liquid_type == LIQUID_FLOWING
@@ -621,28 +622,28 @@ u8 MapNode::setLevel(const NodeDefManager *nodemgr, s8 level)
}
if (level >= LIQUID_LEVEL_SOURCE) {
rest = level - LIQUID_LEVEL_SOURCE;
- setContent(nodemgr->getId(f.liquid_alternative_source));
+ setContent(f.liquid_alternative_source_id);
setParam2(0);
} else {
- setContent(nodemgr->getId(f.liquid_alternative_flowing));
+ setContent(f.liquid_alternative_flowing_id);
setParam2((level & LIQUID_LEVEL_MASK) | (getParam2() & ~LIQUID_LEVEL_MASK));
}
} else if (f.param_type_2 == CPT2_LEVELED) {
if (level < 0) { // zero means default for a leveled nodebox
rest = level;
level = 0;
- } else if (level > LEVELED_MAX) {
- rest = level - LEVELED_MAX;
- level = LEVELED_MAX;
+ } else if (level > f.leveled_max) {
+ rest = level - f.leveled_max;
+ level = f.leveled_max;
}
setParam2((level & LEVELED_MASK) | (getParam2() & ~LEVELED_MASK));
}
return rest;
}
-u8 MapNode::addLevel(const NodeDefManager *nodemgr, s8 add)
+s8 MapNode::addLevel(const NodeDefManager *nodemgr, s16 add)
{
- s8 level = getLevel(nodemgr);
+ s16 level = getLevel(nodemgr);
level += add;
return setLevel(nodemgr, level);
}
diff --git a/src/mapnode.h b/src/mapnode.h
index 7a3d30ddc..32ac1b4f6 100644
--- a/src/mapnode.h
+++ b/src/mapnode.h
@@ -268,12 +268,12 @@ struct MapNode
std::vector<aabb3f> *boxes, u8 neighbors = 0) const;
/*
- Liquid helpers
+ Liquid/leveled helpers
*/
u8 getMaxLevel(const NodeDefManager *nodemgr) const;
u8 getLevel(const NodeDefManager *nodemgr) const;
- u8 setLevel(const NodeDefManager *nodemgr, s8 level = 1);
- u8 addLevel(const NodeDefManager *nodemgr, s8 add = 1);
+ s8 setLevel(const NodeDefManager *nodemgr, s16 level = 1);
+ s8 addLevel(const NodeDefManager *nodemgr, s16 add = 1);
/*
Serialization functions
diff --git a/src/network/clientopcodes.cpp b/src/network/clientopcodes.cpp
index e3afc0e36..f812a08a1 100644
--- a/src/network/clientopcodes.cpp
+++ b/src/network/clientopcodes.cpp
@@ -68,7 +68,7 @@ const ToClientCommandHandler toClientCommandTable[TOCLIENT_NUM_MSG_TYPES] =
{ "TOCLIENT_TIME_OF_DAY", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_TimeOfDay }, // 0x29
{ "TOCLIENT_CSM_RESTRICTION_FLAGS", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_CSMRestrictionFlags }, // 0x2A
{ "TOCLIENT_PLAYER_SPEED", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_PlayerSpeed }, // 0x2B
- null_command_handler,
+ { "TOCLIENT_MEDIA_PUSH", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_MediaPush }, // 0x2C
null_command_handler,
null_command_handler,
{ "TOCLIENT_CHAT_MESSAGE", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_ChatMessage }, // 0x2F
@@ -122,11 +122,20 @@ const ToClientCommandHandler toClientCommandTable[TOCLIENT_NUM_MSG_TYPES] =
null_command_handler,
{ "TOCLIENT_SRP_BYTES_S_B", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_SrpBytesSandB }, // 0x60
{ "TOCLIENT_FORMSPEC_PREPEND", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_FormspecPrepend }, // 0x61,
- { "TOCLIENT_REDIRECT", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Redirect }, // 0x62,
};
const static ServerCommandFactory null_command_factory = { "TOSERVER_NULL", 0, false };
+/*
+ Channels used for Client -> Server communication
+ 2: Notifications back to the server (e.g. GOTBLOCKS)
+ 1: Init and Authentication
+ 0: everything else
+
+ Packet order is only guaranteed inside a channel, so packets that operate on
+ the same objects are *required* to be in the same channel.
+*/
+
const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] =
{
null_command_factory, // 0x00
@@ -144,7 +153,7 @@ const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] =
null_command_factory, // 0x0c
null_command_factory, // 0x0d
null_command_factory, // 0x0e
- null_command_factory, // 0x0F
+ null_command_factory, // 0x0f
null_command_factory, // 0x10
{ "TOSERVER_INIT2", 1, true }, // 0x11
null_command_factory, // 0x12
@@ -187,7 +196,7 @@ const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] =
{ "TOSERVER_PLAYERITEM", 0, true }, // 0x37
{ "TOSERVER_RESPAWN", 0, true }, // 0x38
{ "TOSERVER_INTERACT", 0, true }, // 0x39
- { "TOSERVER_REMOVED_SOUNDS", 1, true }, // 0x3a
+ { "TOSERVER_REMOVED_SOUNDS", 2, true }, // 0x3a
{ "TOSERVER_NODEMETA_FIELDS", 0, true }, // 0x3b
{ "TOSERVER_INVENTORY_FIELDS", 0, true }, // 0x3c
null_command_factory, // 0x3d
@@ -195,8 +204,8 @@ const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] =
null_command_factory, // 0x3f
{ "TOSERVER_REQUEST_MEDIA", 1, true }, // 0x40
null_command_factory, // 0x41
- { "TOSERVER_BREATH", 0, true }, // 0x42 old TOSERVER_BREATH. Ignored by servers
- { "TOSERVER_CLIENT_READY", 0, true }, // 0x43
+ null_command_factory, // 0x42
+ { "TOSERVER_CLIENT_READY", 1, true }, // 0x43
null_command_factory, // 0x44
null_command_factory, // 0x45
null_command_factory, // 0x46
diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp
index 97031a11c..5ca481880 100644
--- a/src/network/clientpackethandler.cpp
+++ b/src/network/clientpackethandler.cpp
@@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/client.h"
#include "util/base64.h"
+#include "client/camera.h"
#include "chatmessage.h"
#include "client/clientmedia.h"
#include "log.h"
@@ -38,6 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "script/scripting_client.h"
#include "util/serialize.h"
#include "util/srp.h"
+#include "util/sha1.h"
#include "tileanimation.h"
#include "gettext.h"
#include "skyparams.h"
@@ -206,6 +208,9 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt)
m_access_denied_reconnect = reconnect & 1;
} else if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) {
*pkt >> m_access_denied_reason;
+ } else if (denyCode == SERVER_ACCESSDENIED_TOO_MANY_USERS) {
+ m_access_denied_reason = accessDeniedStrings[denyCode];
+ m_access_denied_reconnect = true;
} else if (denyCode < SERVER_ACCESSDENIED_MAX) {
m_access_denied_reason = accessDeniedStrings[denyCode];
} else {
@@ -386,10 +391,10 @@ void Client::handleCommand_TimeOfDay(NetworkPacket* pkt)
m_env.setTimeOfDaySpeed(time_speed);
m_time_of_day_set = true;
- u32 dr = m_env.getDayNightRatio();
- infostream << "Client: time_of_day=" << time_of_day
- << " time_speed=" << time_speed
- << " dr=" << dr << std::endl;
+ //u32 dr = m_env.getDayNightRatio();
+ //infostream << "Client: time_of_day=" << time_of_day
+ // << " time_speed=" << time_speed
+ // << " dr=" << dr << std::endl;
}
void Client::handleCommand_ChatMessage(NetworkPacket *pkt)
@@ -530,11 +535,21 @@ void Client::handleCommand_Movement(NetworkPacket* pkt)
void Client::handleCommand_Fov(NetworkPacket *pkt)
{
f32 fov;
- bool is_multiplier;
+ bool is_multiplier = false;
+ f32 transition_time = 0.0f;
+
*pkt >> fov >> is_multiplier;
+ // Wrap transition_time extraction within a
+ // try-catch to preserve backwards compat
+ try {
+ *pkt >> transition_time;
+ } catch (PacketError &e) {};
+
LocalPlayer *player = m_env.getLocalPlayer();
- player->setFov({ fov, is_multiplier });
+ assert(player);
+ player->setFov({ fov, is_multiplier, transition_time });
+ m_camera->notifyFovChange();
}
void Client::handleCommand_HP(NetworkPacket *pkt)
@@ -947,114 +962,66 @@ void Client::handleCommand_SpawnParticle(NetworkPacket* pkt)
std::string datastring(pkt->getString(0), pkt->getSize());
std::istringstream is(datastring, std::ios_base::binary);
- v3f pos = readV3F32(is);
- v3f vel = readV3F32(is);
- v3f acc = readV3F32(is);
- float expirationtime = readF32(is);
- float size = readF32(is);
- bool collisiondetection = readU8(is);
- std::string texture = deSerializeLongString(is);
-
- bool vertical = false;
- bool collision_removal = false;
- TileAnimationParams animation;
- animation.type = TAT_NONE;
- u8 glow = 0;
- bool object_collision = false;
- try {
- vertical = readU8(is);
- collision_removal = readU8(is);
- animation.deSerialize(is, m_proto_ver);
- glow = readU8(is);
- object_collision = readU8(is);
- } catch (...) {}
+ ParticleParameters p;
+ p.deSerialize(is, m_proto_ver);
ClientEvent *event = new ClientEvent();
- event->type = CE_SPAWN_PARTICLE;
- event->spawn_particle.pos = new v3f (pos);
- event->spawn_particle.vel = new v3f (vel);
- event->spawn_particle.acc = new v3f (acc);
- event->spawn_particle.expirationtime = expirationtime;
- event->spawn_particle.size = size;
- event->spawn_particle.collisiondetection = collisiondetection;
- event->spawn_particle.collision_removal = collision_removal;
- event->spawn_particle.object_collision = object_collision;
- event->spawn_particle.vertical = vertical;
- event->spawn_particle.texture = new std::string(texture);
- event->spawn_particle.animation = animation;
- event->spawn_particle.glow = glow;
+ event->type = CE_SPAWN_PARTICLE;
+ event->spawn_particle = new ParticleParameters(p);
m_client_event_queue.push(event);
}
void Client::handleCommand_AddParticleSpawner(NetworkPacket* pkt)
{
- u16 amount;
- float spawntime;
- v3f minpos;
- v3f maxpos;
- v3f minvel;
- v3f maxvel;
- v3f minacc;
- v3f maxacc;
- float minexptime;
- float maxexptime;
- float minsize;
- float maxsize;
- bool collisiondetection;
- u32 server_id;
-
- *pkt >> amount >> spawntime >> minpos >> maxpos >> minvel >> maxvel
- >> minacc >> maxacc >> minexptime >> maxexptime >> minsize
- >> maxsize >> collisiondetection;
-
- std::string texture = pkt->readLongString();
-
- *pkt >> server_id;
-
- bool vertical = false;
- bool collision_removal = false;
- u16 attached_id = 0;
- TileAnimationParams animation;
- animation.type = TAT_NONE;
- u8 glow = 0;
- bool object_collision = false;
- try {
- *pkt >> vertical;
- *pkt >> collision_removal;
- *pkt >> attached_id;
+ std::string datastring(pkt->getString(0), pkt->getSize());
+ std::istringstream is(datastring, std::ios_base::binary);
- // This is horrible but required (why are there two ways to deserialize pkts?)
- std::string datastring(pkt->getRemainingString(), pkt->getRemainingBytes());
- std::istringstream is(datastring, std::ios_base::binary);
- animation.deSerialize(is, m_proto_ver);
- glow = readU8(is);
- object_collision = readU8(is);
- } catch (...) {}
+ ParticleSpawnerParameters p;
+ u32 server_id;
+ u16 attached_id = 0;
+
+ p.amount = readU16(is);
+ p.time = readF32(is);
+ p.minpos = readV3F32(is);
+ p.maxpos = readV3F32(is);
+ p.minvel = readV3F32(is);
+ p.maxvel = readV3F32(is);
+ p.minacc = readV3F32(is);
+ p.maxacc = readV3F32(is);
+ p.minexptime = readF32(is);
+ p.maxexptime = readF32(is);
+ p.minsize = readF32(is);
+ p.maxsize = readF32(is);
+ p.collisiondetection = readU8(is);
+ p.texture = deSerializeLongString(is);
+
+ server_id = readU32(is);
+
+ p.vertical = readU8(is);
+ p.collision_removal = readU8(is);
+
+ attached_id = readU16(is);
+
+ p.animation.deSerialize(is, m_proto_ver);
+ p.glow = readU8(is);
+ p.object_collision = readU8(is);
+
+ // This is kinda awful
+ do {
+ u16 tmp_param0 = readU16(is);
+ if (is.eof())
+ break;
+ p.node.param0 = tmp_param0;
+ p.node.param2 = readU8(is);
+ p.node_tile = readU8(is);
+ } while (0);
auto event = new ClientEvent();
- event->type = CE_ADD_PARTICLESPAWNER;
- event->add_particlespawner.amount = amount;
- event->add_particlespawner.spawntime = spawntime;
- event->add_particlespawner.minpos = new v3f (minpos);
- event->add_particlespawner.maxpos = new v3f (maxpos);
- event->add_particlespawner.minvel = new v3f (minvel);
- event->add_particlespawner.maxvel = new v3f (maxvel);
- event->add_particlespawner.minacc = new v3f (minacc);
- event->add_particlespawner.maxacc = new v3f (maxacc);
- event->add_particlespawner.minexptime = minexptime;
- event->add_particlespawner.maxexptime = maxexptime;
- event->add_particlespawner.minsize = minsize;
- event->add_particlespawner.maxsize = maxsize;
- event->add_particlespawner.collisiondetection = collisiondetection;
- event->add_particlespawner.collision_removal = collision_removal;
- event->add_particlespawner.object_collision = object_collision;
- event->add_particlespawner.attached_id = attached_id;
- event->add_particlespawner.vertical = vertical;
- event->add_particlespawner.texture = new std::string(texture);
- event->add_particlespawner.id = server_id;
- event->add_particlespawner.animation = animation;
- event->add_particlespawner.glow = glow;
+ event->type = CE_ADD_PARTICLESPAWNER;
+ event->add_particlespawner.p = new ParticleSpawnerParameters(p);
+ event->add_particlespawner.attached_id = attached_id;
+ event->add_particlespawner.id = server_id;
m_client_event_queue.push(event);
}
@@ -1091,22 +1058,16 @@ void Client::handleCommand_HudAdd(NetworkPacket* pkt)
v3f world_pos;
v2s32 size;
s16 z_index = 0;
+ std::string text2;
*pkt >> server_id >> type >> pos >> name >> scale >> text >> number >> item
>> dir >> align >> offset;
try {
*pkt >> world_pos;
- }
- catch(SerializationError &e) {};
-
- try {
*pkt >> size;
- } catch(SerializationError &e) {};
-
- try {
*pkt >> z_index;
- }
- catch(PacketError &e) {}
+ *pkt >> text2;
+ } catch(PacketError &e) {};
ClientEvent *event = new ClientEvent();
event->type = CE_HUDADD;
@@ -1124,6 +1085,7 @@ void Client::handleCommand_HudAdd(NetworkPacket* pkt)
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);
m_client_event_queue.push(event);
}
@@ -1160,7 +1122,7 @@ void Client::handleCommand_HudChange(NetworkPacket* pkt)
if (stat == HUD_STAT_POS || stat == HUD_STAT_SCALE ||
stat == HUD_STAT_ALIGN || stat == HUD_STAT_OFFSET)
*pkt >> v2fdata;
- else if (stat == HUD_STAT_NAME || stat == HUD_STAT_TEXT)
+ else if (stat == HUD_STAT_NAME || stat == HUD_STAT_TEXT || stat == HUD_STAT_TEXT2)
*pkt >> sdata;
else if (stat == HUD_STAT_WORLD_POS)
*pkt >> v3fdata;
@@ -1274,9 +1236,9 @@ void Client::handleCommand_HudSetSky(NetworkPacket* pkt)
// Fix for "regular" skies, as color isn't kept:
if (skybox.type == "regular") {
skybox.sky_color = sky_defaults.getSkyColorDefaults();
- skybox.tint_type = "default";
- skybox.moon_tint = video::SColor(255, 255, 255, 255);
- skybox.sun_tint = video::SColor(255, 255, 255, 255);
+ skybox.fog_tint_type = "default";
+ skybox.fog_moon_tint = video::SColor(255, 255, 255, 255);
+ skybox.fog_sun_tint = video::SColor(255, 255, 255, 255);
}
else {
sun.visible = false;
@@ -1311,7 +1273,7 @@ void Client::handleCommand_HudSetSky(NetworkPacket* pkt)
std::string texture;
*pkt >> skybox.bgcolor >> skybox.type >> skybox.clouds >>
- skybox.sun_tint >> skybox.moon_tint >> skybox.tint_type;
+ skybox.fog_sun_tint >> skybox.fog_moon_tint >> skybox.fog_tint_type;
if (skybox.type == "skybox") {
*pkt >> texture_count;
@@ -1502,14 +1464,6 @@ void Client::handleCommand_FormspecPrepend(NetworkPacket *pkt)
*pkt >> player->formspec_prepend;
}
-void Client::handleCommand_Redirect(NetworkPacket *pkt)
-{
- std::string address;
- u16 port;
- *pkt >> address >> port;
- errorstream << address << ":" << port << std::endl;
-}
-
void Client::handleCommand_CSMRestrictionFlags(NetworkPacket *pkt)
{
*pkt >> m_csm_restriction_flags >> m_csm_restriction_noderange;
@@ -1532,6 +1486,51 @@ void Client::handleCommand_PlayerSpeed(NetworkPacket *pkt)
player->addVelocity(added_vel);
}
+void Client::handleCommand_MediaPush(NetworkPacket *pkt)
+{
+ std::string raw_hash, filename, filedata;
+ bool cached;
+
+ *pkt >> raw_hash >> filename >> cached;
+ filedata = pkt->readLongString();
+
+ if (raw_hash.size() != 20 || filedata.empty() || filename.empty() ||
+ !string_allowed(filename, TEXTURENAME_ALLOWED_CHARS)) {
+ throw PacketError("Illegal filename, data or hash");
+ }
+
+ verbosestream << "Server pushes media file \"" << filename << "\" with "
+ << filedata.size() << " bytes of data (cached=" << cached
+ << ")" << std::endl;
+
+ if (m_media_pushed_files.count(filename) != 0) {
+ // Silently ignore for synchronization purposes
+ return;
+ }
+
+ // Compute and check checksum of data
+ std::string computed_hash;
+ {
+ SHA1 ctx;
+ ctx.addBytes(filedata.c_str(), filedata.size());
+ unsigned char *buf = ctx.getDigest();
+ computed_hash.assign((char*) buf, 20);
+ free(buf);
+ }
+ if (raw_hash != computed_hash) {
+ verbosestream << "Hash of file data mismatches, ignoring." << std::endl;
+ return;
+ }
+
+ // Actually load media
+ loadMedia(filedata, filename, true);
+ m_media_pushed_files.insert(filename);
+
+ // Cache file for the next time when this client joins the same server
+ if (cached)
+ clientMediaUpdateCache(raw_hash, filedata);
+}
+
/*
* Mod channels
*/
diff --git a/src/network/connection.cpp b/src/network/connection.cpp
index 36124ce3c..3692e45a9 100644
--- a/src/network/connection.cpp
+++ b/src/network/connection.cpp
@@ -924,7 +924,7 @@ UDPPeer::UDPPeer(u16 a_id, Address a_address, Connection* connection) :
Peer(a_address,a_id,connection)
{
for (Channel &channel : channels)
- channel.setWindowSize(g_settings->getU16("max_packets_per_iteration"));
+ channel.setWindowSize(START_RELIABLE_WINDOW_SIZE);
}
bool UDPPeer::getAddress(MTProtocols type,Address& toset)
@@ -975,22 +975,29 @@ void UDPPeer::PutReliableSendCommand(ConnectionCommand &c,
if (m_pending_disconnect)
return;
- if ( channels[c.channelnum].queued_commands.empty() &&
+ Channel &chan = channels[c.channelnum];
+
+ if (chan.queued_commands.empty() &&
/* don't queue more packets then window size */
- (channels[c.channelnum].queued_reliables.size()
- < (channels[c.channelnum].getWindowSize()/2))) {
+ (chan.queued_reliables.size() < chan.getWindowSize() / 2)) {
LOG(dout_con<<m_connection->getDesc()
<<" processing reliable command for peer id: " << c.peer_id
<<" data size: " << c.data.getSize() << std::endl);
if (!processReliableSendCommand(c,max_packet_size)) {
- channels[c.channelnum].queued_commands.push_back(c);
+ chan.queued_commands.push_back(c);
}
}
else {
LOG(dout_con<<m_connection->getDesc()
<<" Queueing reliable command for peer id: " << c.peer_id
<<" data size: " << c.data.getSize() <<std::endl);
- channels[c.channelnum].queued_commands.push_back(c);
+ chan.queued_commands.push_back(c);
+ if (chan.queued_commands.size() >= chan.getWindowSize() / 2) {
+ LOG(derr_con << m_connection->getDesc()
+ << "Possible packet stall to peer id: " << c.peer_id
+ << " queued_commands=" << chan.queued_commands.size()
+ << std::endl);
+ }
}
}
@@ -1001,6 +1008,8 @@ bool UDPPeer::processReliableSendCommand(
if (m_pending_disconnect)
return true;
+ Channel &chan = channels[c.channelnum];
+
u32 chunksize_max = max_packet_size
- BASE_HEADER_SIZE
- RELIABLE_HEADER_SIZE;
@@ -1008,13 +1017,13 @@ bool UDPPeer::processReliableSendCommand(
sanity_check(c.data.getSize() < MAX_RELIABLE_WINDOW_SIZE*512);
std::list<SharedBuffer<u8>> originals;
- u16 split_sequence_number = channels[c.channelnum].readNextSplitSeqNum();
+ u16 split_sequence_number = chan.readNextSplitSeqNum();
if (c.raw) {
originals.emplace_back(c.data);
} else {
makeAutoSplitPacket(c.data, chunksize_max,split_sequence_number, &originals);
- channels[c.channelnum].setNextSplitSeqNum(split_sequence_number);
+ chan.setNextSplitSeqNum(split_sequence_number);
}
bool have_sequence_number = true;
@@ -1023,7 +1032,7 @@ bool UDPPeer::processReliableSendCommand(
volatile u16 initial_sequence_number = 0;
for (SharedBuffer<u8> &original : originals) {
- u16 seqnum = channels[c.channelnum].getOutgoingSequenceNumber(have_sequence_number);
+ u16 seqnum = chan.getOutgoingSequenceNumber(have_sequence_number);
/* oops, we don't have enough sequence numbers to send this packet */
if (!have_sequence_number)
@@ -1055,10 +1064,10 @@ bool UDPPeer::processReliableSendCommand(
// << " channel: " << (c.channelnum&0xFF)
// << " seqnum: " << readU16(&p.data[BASE_HEADER_SIZE+1])
// << std::endl)
- channels[c.channelnum].queued_reliables.push(p);
+ chan.queued_reliables.push(p);
pcount++;
}
- sanity_check(channels[c.channelnum].queued_reliables.size() < 0xFFFF);
+ sanity_check(chan.queued_reliables.size() < 0xFFFF);
return true;
}
@@ -1073,7 +1082,7 @@ bool UDPPeer::processReliableSendCommand(
toadd.pop();
bool successfully_put_back_sequence_number
- = channels[c.channelnum].putBackSequenceNumber(
+ = chan.putBackSequenceNumber(
(initial_sequence_number+toadd.size() % (SEQNUM_MAX+1)));
FATAL_ERROR_IF(!successfully_put_back_sequence_number, "error");
@@ -1081,7 +1090,7 @@ bool UDPPeer::processReliableSendCommand(
// DO NOT REMOVE n_queued! It avoids a deadlock of async locked
// 'log_message_mutex' and 'm_list_mutex'.
- u32 n_queued = channels[c.channelnum].outgoing_reliables_sent.size();
+ u32 n_queued = chan.outgoing_reliables_sent.size();
LOG(dout_con<<m_connection->getDesc()
<< " Windowsize exceeded on reliable sending "
@@ -1164,7 +1173,9 @@ Connection::Connection(u32 protocol_id, u32 max_packet_size, float timeout,
m_bc_peerhandler(peerhandler)
{
- m_udpSocket.setTimeoutMs(5);
+ /* Amount of time Receive() will wait for data, this is entirely different
+ * from the connection timeout */
+ m_udpSocket.setTimeoutMs(500);
m_sendThread->setParent(this);
m_receiveThread->setParent(this);
diff --git a/src/network/connection.h b/src/network/connection.h
index 0b12bf701..47b0805ce 100644
--- a/src/network/connection.h
+++ b/src/network/connection.h
@@ -141,7 +141,6 @@ private:
=== NOTES ===
A packet is sent through a channel to a peer with a basic header:
-TODO: Should we have a receiver_peer_id also?
Header (7 bytes):
[0] u32 protocol_id
[4] session_t sender_peer_id
@@ -152,8 +151,7 @@ sender_peer_id:
value 1 (PEER_ID_SERVER) is reserved for server
these constants are defined in constants.h
channel:
- The lower the number, the higher the priority is.
- Only channels 0, 1 and 2 exist.
+ Channel numbers have no intrinsic meaning. Currently only 0, 1, 2 exist.
*/
#define BASE_HEADER_SIZE 7
#define CHANNEL_COUNT 3
@@ -386,12 +384,14 @@ struct ConnectionCommand
}
};
-/* maximum window size to use, 0xFFFF is theoretical maximum don't think about
+/* maximum window size to use, 0xFFFF is theoretical maximum. don't think about
* touching it, the less you're away from it the more likely data corruption
* will occur
*/
#define MAX_RELIABLE_WINDOW_SIZE 0x8000
- /* starting value for window size */
+/* starting value for window size */
+#define START_RELIABLE_WINDOW_SIZE 0x400
+/* minimum value for window size */
#define MIN_RELIABLE_WINDOW_SIZE 0x40
class Channel
@@ -555,15 +555,15 @@ class Peer {
bool isTimedOut(float timeout);
- unsigned int m_increment_packets_remaining = 9;
- unsigned int m_increment_bytes_remaining = 0;
+ unsigned int m_increment_packets_remaining = 0;
virtual u16 getNextSplitSequenceNumber(u8 channel) { return 0; };
virtual void setNextSplitSequenceNumber(u8 channel, u16 seqnum) {};
virtual SharedBuffer<u8> addSplitPacket(u8 channel, const BufferedPacket &toadd,
bool reliable)
{
- fprintf(stderr,"Peer: addSplitPacket called, this is supposed to be never called!\n");
+ errorstream << "Peer::addSplitPacket called,"
+ << " this is supposed to be never called!" << std::endl;
return SharedBuffer<u8>(0);
};
@@ -612,16 +612,16 @@ class Peer {
struct rttstats {
float jitter_min = FLT_MAX;
float jitter_max = 0.0f;
- float jitter_avg = -2.0f;
+ float jitter_avg = -1.0f;
float min_rtt = FLT_MAX;
float max_rtt = 0.0f;
- float avg_rtt = -2.0f;
+ float avg_rtt = -1.0f;
rttstats() = default;
};
rttstats m_rtt;
- float m_last_rtt = -2.0f;
+ float m_last_rtt = -1.0f;
// current usage count
unsigned int m_usage = 0;
diff --git a/src/network/connectionthreads.cpp b/src/network/connectionthreads.cpp
index f8b58c025..9a6617a1c 100644
--- a/src/network/connectionthreads.cpp
+++ b/src/network/connectionthreads.cpp
@@ -73,6 +73,7 @@ ConnectionSendThread::ConnectionSendThread(unsigned int max_packet_size,
m_timeout(timeout),
m_max_data_packets_per_iteration(g_settings->getU16("max_packets_per_iteration"))
{
+ SANITY_CHECK(m_max_data_packets_per_iteration > 1);
}
void *ConnectionSendThread::run()
@@ -107,8 +108,13 @@ void *ConnectionSendThread::run()
curtime = porting::getTimeMs();
float dtime = CALC_DTIME(lasttime, curtime);
- /* first do all the reliable stuff */
+ /* first resend timed-out packets */
runTimeouts(dtime);
+ if (m_iteration_packets_avaialble == 0) {
+ LOG(warningstream << m_connection->getDesc()
+ << " Packet quota used up after re-sending packets, "
+ << "max=" << m_max_data_packets_per_iteration << std::endl);
+ }
/* translate commands to packets */
ConnectionCommand c = m_connection->m_command_queue.pop_frontNoEx(0);
@@ -121,7 +127,7 @@ void *ConnectionSendThread::run()
c = m_connection->m_command_queue.pop_frontNoEx(0);
}
- /* send non reliable packets */
+ /* send queued packets */
sendPackets(dtime);
END_DEBUG_EXCEPTION_HANDLER
@@ -193,7 +199,6 @@ void ConnectionSendThread::runTimeouts(float dtime)
infostream << m_connection->getDesc()
<< "RunTimeouts(): Peer " << peer->id
<< " has timed out."
- << " (source=peer->timeout_counter)"
<< std::endl;
// Add peer to the list
timeouted_peers.push_back(peer->id);
@@ -286,7 +291,7 @@ void ConnectionSendThread::runTimeouts(float dtime)
// Remove timed out peers
for (u16 timeouted_peer : timeouted_peers) {
- LOG(derr_con << m_connection->getDesc()
+ LOG(dout_con << m_connection->getDesc()
<< "RunTimeouts(): Removing peer " << timeouted_peer << std::endl);
m_connection->deletePeer(timeouted_peer, true);
}
@@ -331,11 +336,9 @@ bool ConnectionSendThread::rawSendAsPacket(session_t peer_id, u8 channelnum,
{
PeerHelper peer = m_connection->getPeerNoEx(peer_id);
if (!peer) {
- LOG(dout_con << m_connection->getDesc()
- << " INFO: dropped packet for non existent peer_id: "
- << peer_id << std::endl);
- FATAL_ERROR_IF(!reliable,
- "Trying to send raw packet reliable but no peer found!");
+ LOG(errorstream << m_connection->getDesc()
+ << " dropped " << (reliable ? "reliable " : "")
+ << "packet for non existent peer_id: " << peer_id << std::endl);
return false;
}
Channel *channel = &(dynamic_cast<UDPPeer *>(&peer)->channels[channelnum]);
@@ -644,6 +647,9 @@ void ConnectionSendThread::sendPackets(float dtime)
std::list<session_t> pendingDisconnect;
std::map<session_t, bool> pending_unreliable;
+ const unsigned int peer_packet_quota = m_iteration_packets_avaialble
+ / MYMAX(peerIds.size(), 1);
+
for (session_t peerId : peerIds) {
PeerHelper peer = m_connection->getPeerNoEx(peerId);
//peer may have been removed
@@ -653,8 +659,7 @@ void ConnectionSendThread::sendPackets(float dtime)
<< std::endl);
continue;
}
- peer->m_increment_packets_remaining =
- m_iteration_packets_avaialble / m_connection->m_peers.size();
+ peer->m_increment_packets_remaining = peer_packet_quota;
UDPPeer *udpPeer = dynamic_cast<UDPPeer *>(&peer);
@@ -751,23 +756,30 @@ void ConnectionSendThread::sendPackets(float dtime)
}
/* send acks immediately */
- if (packet.ack) {
+ if (packet.ack || peer->m_increment_packets_remaining > 0 || stopRequested()) {
rawSendAsPacket(packet.peer_id, packet.channelnum,
packet.data, packet.reliable);
- peer->m_increment_packets_remaining =
- MYMIN(0, peer->m_increment_packets_remaining--);
- } else if (
- (peer->m_increment_packets_remaining > 0) ||
- (stopRequested())) {
- rawSendAsPacket(packet.peer_id, packet.channelnum,
- packet.data, packet.reliable);
- peer->m_increment_packets_remaining--;
+ if (peer->m_increment_packets_remaining > 0)
+ peer->m_increment_packets_remaining--;
} else {
m_outgoing_queue.push(packet);
pending_unreliable[packet.peer_id] = true;
}
}
+ if (peer_packet_quota > 0) {
+ for (session_t peerId : peerIds) {
+ PeerHelper peer = m_connection->getPeerNoEx(peerId);
+ if (!peer)
+ continue;
+ if (peer->m_increment_packets_remaining == 0) {
+ LOG(warningstream << m_connection->getDesc()
+ << " Packet quota used up for peer_id=" << peerId
+ << ", was " << peer_packet_quota << " pkts" << std::endl);
+ }
+ }
+ }
+
for (session_t peerId : pendingDisconnect) {
if (!pending_unreliable[peerId]) {
m_connection->deletePeer(peerId, false);
@@ -798,6 +810,14 @@ void *ConnectionReceiveThread::run()
ThreadIdentifier);
PROFILE(ThreadIdentifier << "ConnectionReceive: [" << m_connection->getDesc() << "]");
+ // use IPv6 minimum allowed MTU as receive buffer size as this is
+ // theoretical reliable upper boundary of a udp packet for all IPv6 enabled
+ // infrastructure
+ const unsigned int packet_maxsize = 1500;
+ SharedBuffer<u8> packetdata(packet_maxsize);
+
+ bool packet_queued = true;
+
#ifdef DEBUG_CONNECTION_KBPS
u64 curtime = porting::getTimeMs();
u64 lasttime = curtime;
@@ -816,7 +836,7 @@ void *ConnectionReceiveThread::run()
#endif
/* receive packets */
- receive();
+ receive(packetdata, packet_queued);
#ifdef DEBUG_CONNECTION_KBPS
debug_print_timer += dtime;
@@ -878,157 +898,142 @@ void *ConnectionReceiveThread::run()
}
// Receive packets from the network and buffers and create ConnectionEvents
-void ConnectionReceiveThread::receive()
+void ConnectionReceiveThread::receive(SharedBuffer<u8> &packetdata,
+ bool &packet_queued)
{
- // use IPv6 minimum allowed MTU as receive buffer size as this is
- // theoretical reliable upper boundary of a udp packet for all IPv6 enabled
- // infrastructure
- unsigned int packet_maxsize = 1500;
- SharedBuffer<u8> packetdata(packet_maxsize);
-
- bool packet_queued = true;
-
- unsigned int loop_count = 0;
-
- /* first of all read packets from socket */
- /* check for incoming data available */
- while ((loop_count < 10) &&
- (m_connection->m_udpSocket.WaitData(50))) {
- loop_count++;
- try {
- if (packet_queued) {
- bool data_left = true;
- session_t peer_id;
- SharedBuffer<u8> resultdata;
- while (data_left) {
- try {
- data_left = getFromBuffers(peer_id, resultdata);
- if (data_left) {
- ConnectionEvent e;
- e.dataReceived(peer_id, resultdata);
- m_connection->putEvent(e);
- }
- }
- catch (ProcessedSilentlyException &e) {
- /* try reading again */
+ try {
+ // First, see if there any buffered packets we can process now
+ if (packet_queued) {
+ bool data_left = true;
+ session_t peer_id;
+ SharedBuffer<u8> resultdata;
+ while (data_left) {
+ try {
+ data_left = getFromBuffers(peer_id, resultdata);
+ if (data_left) {
+ ConnectionEvent e;
+ e.dataReceived(peer_id, resultdata);
+ m_connection->putEvent(e);
}
}
- packet_queued = false;
- }
-
- Address sender;
- s32 received_size = m_connection->m_udpSocket.Receive(sender, *packetdata,
- packet_maxsize);
-
- if ((received_size < BASE_HEADER_SIZE) ||
- (readU32(&packetdata[0]) != m_connection->GetProtocolID())) {
- LOG(derr_con << m_connection->getDesc()
- << "Receive(): Invalid incoming packet, "
- << "size: " << received_size
- << ", protocol: "
- << ((received_size >= 4) ? readU32(&packetdata[0]) : -1)
- << std::endl);
- continue;
+ catch (ProcessedSilentlyException &e) {
+ /* try reading again */
+ }
}
+ packet_queued = false;
+ }
- session_t peer_id = readPeerId(*packetdata);
- u8 channelnum = readChannel(*packetdata);
+ // Call Receive() to wait for incoming data
+ Address sender;
+ s32 received_size = m_connection->m_udpSocket.Receive(sender,
+ *packetdata, packetdata.getSize());
+ if (received_size < 0)
+ return;
- if (channelnum > CHANNEL_COUNT - 1) {
- LOG(derr_con << m_connection->getDesc()
- << "Receive(): Invalid channel " << (u32)channelnum << std::endl);
- throw InvalidIncomingDataException("Channel doesn't exist");
- }
+ if ((received_size < BASE_HEADER_SIZE) ||
+ (readU32(&packetdata[0]) != m_connection->GetProtocolID())) {
+ LOG(derr_con << m_connection->getDesc()
+ << "Receive(): Invalid incoming packet, "
+ << "size: " << received_size
+ << ", protocol: "
+ << ((received_size >= 4) ? readU32(&packetdata[0]) : -1)
+ << std::endl);
+ return;
+ }
- /* Try to identify peer by sender address (may happen on join) */
- if (peer_id == PEER_ID_INEXISTENT) {
- peer_id = m_connection->lookupPeer(sender);
- // We do not have to remind the peer of its
- // peer id as the CONTROLTYPE_SET_PEER_ID
- // command was sent reliably.
- }
+ session_t peer_id = readPeerId(*packetdata);
+ u8 channelnum = readChannel(*packetdata);
- /* The peer was not found in our lists. Add it. */
- if (peer_id == PEER_ID_INEXISTENT) {
- peer_id = m_connection->createPeer(sender, MTP_MINETEST_RELIABLE_UDP, 0);
- }
+ if (channelnum > CHANNEL_COUNT - 1) {
+ LOG(derr_con << m_connection->getDesc()
+ << "Receive(): Invalid channel " << (u32)channelnum << std::endl);
+ return;
+ }
- PeerHelper peer = m_connection->getPeerNoEx(peer_id);
+ /* Try to identify peer by sender address (may happen on join) */
+ if (peer_id == PEER_ID_INEXISTENT) {
+ peer_id = m_connection->lookupPeer(sender);
+ // We do not have to remind the peer of its
+ // peer id as the CONTROLTYPE_SET_PEER_ID
+ // command was sent reliably.
+ }
- if (!peer) {
- LOG(dout_con << m_connection->getDesc()
- << " got packet from unknown peer_id: "
- << peer_id << " Ignoring." << std::endl);
- continue;
- }
+ /* The peer was not found in our lists. Add it. */
+ if (peer_id == PEER_ID_INEXISTENT) {
+ peer_id = m_connection->createPeer(sender, MTP_MINETEST_RELIABLE_UDP, 0);
+ }
- // Validate peer address
+ PeerHelper peer = m_connection->getPeerNoEx(peer_id);
+ if (!peer) {
+ LOG(dout_con << m_connection->getDesc()
+ << " got packet from unknown peer_id: "
+ << peer_id << " Ignoring." << std::endl);
+ return;
+ }
- Address peer_address;
+ // Validate peer address
- if (peer->getAddress(MTP_UDP, peer_address)) {
- if (peer_address != sender) {
- LOG(derr_con << m_connection->getDesc()
- << m_connection->getDesc()
- << " Peer " << peer_id << " sending from different address."
- " Ignoring." << std::endl);
- continue;
- }
- } else {
-
- bool invalid_address = true;
- if (invalid_address) {
- LOG(derr_con << m_connection->getDesc()
- << m_connection->getDesc()
- << " Peer " << peer_id << " unknown."
- " Ignoring." << std::endl);
- continue;
- }
+ Address peer_address;
+ if (peer->getAddress(MTP_UDP, peer_address)) {
+ if (peer_address != sender) {
+ LOG(derr_con << m_connection->getDesc()
+ << " Peer " << peer_id << " sending from different address."
+ " Ignoring." << std::endl);
+ return;
}
+ } else {
+ LOG(derr_con << m_connection->getDesc()
+ << " Peer " << peer_id << " doesn't have an address?!"
+ " Ignoring." << std::endl);
+ return;
+ }
- peer->ResetTimeout();
-
- Channel *channel = 0;
+ peer->ResetTimeout();
- if (dynamic_cast<UDPPeer *>(&peer) != 0) {
- channel = &(dynamic_cast<UDPPeer *>(&peer)->channels[channelnum]);
- }
+ Channel *channel = nullptr;
+ if (dynamic_cast<UDPPeer *>(&peer)) {
+ channel = &dynamic_cast<UDPPeer *>(&peer)->channels[channelnum];
+ } else {
+ LOG(derr_con << m_connection->getDesc()
+ << "Receive(): peer_id=" << peer_id << " isn't an UDPPeer?!"
+ " Ignoring." << std::endl);
+ return;
+ }
- if (channel != 0) {
- channel->UpdateBytesReceived(received_size);
- }
+ channel->UpdateBytesReceived(received_size);
- // Throw the received packet to channel->processPacket()
+ // Throw the received packet to channel->processPacket()
- // Make a new SharedBuffer from the data without the base headers
- SharedBuffer<u8> strippeddata(received_size - BASE_HEADER_SIZE);
- memcpy(*strippeddata, &packetdata[BASE_HEADER_SIZE],
- strippeddata.getSize());
+ // Make a new SharedBuffer from the data without the base headers
+ SharedBuffer<u8> strippeddata(received_size - BASE_HEADER_SIZE);
+ memcpy(*strippeddata, &packetdata[BASE_HEADER_SIZE],
+ strippeddata.getSize());
- try {
- // Process it (the result is some data with no headers made by us)
- SharedBuffer<u8> resultdata = processPacket
- (channel, strippeddata, peer_id, channelnum, false);
+ try {
+ // Process it (the result is some data with no headers made by us)
+ SharedBuffer<u8> resultdata = processPacket
+ (channel, strippeddata, peer_id, channelnum, false);
- LOG(dout_con << m_connection->getDesc()
- << " ProcessPacket from peer_id: " << peer_id
- << ", channel: " << (u32)channelnum << ", returned "
- << resultdata.getSize() << " bytes" << std::endl);
+ LOG(dout_con << m_connection->getDesc()
+ << " ProcessPacket from peer_id: " << peer_id
+ << ", channel: " << (u32)channelnum << ", returned "
+ << resultdata.getSize() << " bytes" << std::endl);
- ConnectionEvent e;
- e.dataReceived(peer_id, resultdata);
- m_connection->putEvent(e);
- }
- catch (ProcessedSilentlyException &e) {
- }
- catch (ProcessedQueued &e) {
- packet_queued = true;
- }
- }
- catch (InvalidIncomingDataException &e) {
+ ConnectionEvent e;
+ e.dataReceived(peer_id, resultdata);
+ m_connection->putEvent(e);
}
catch (ProcessedSilentlyException &e) {
}
+ catch (ProcessedQueued &e) {
+ // we set it to true anyway (see below)
+ }
+
+ /* Every time we receive a packet it can happen that a previously
+ * buffered packet is now ready to process. */
+ packet_queued = true;
+ }
+ catch (InvalidIncomingDataException &e) {
}
}
@@ -1175,7 +1180,8 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
m_connection->TriggerSend();
} catch (NotFoundException &e) {
LOG(derr_con << m_connection->getDesc()
- << "WARNING: ACKed packet not in outgoing queue" << std::endl);
+ << "WARNING: ACKed packet not in outgoing queue"
+ << " seqnum=" << seqnum << std::endl);
channel->UpdatePacketTooLateCounter();
}
diff --git a/src/network/connectionthreads.h b/src/network/connectionthreads.h
index da4ea92f5..612407c3b 100644
--- a/src/network/connectionthreads.h
+++ b/src/network/connectionthreads.h
@@ -101,7 +101,7 @@ public:
}
private:
- void receive();
+ void receive(SharedBuffer<u8> &packetdata, bool &packet_queued);
// Returns next data from a buffer if possible
// If found, returns true; if not, false.
diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h
index fc45804a7..3ac9b4af8 100644
--- a/src/network/networkprotocol.h
+++ b/src/network/networkprotocol.h
@@ -70,8 +70,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
PROTOCOL_VERSION 14:
Added transfer of player pressed keys to the server
Added new messages for mesh and bone animation, as well as attachments
- GENERIC_CMD_SET_ANIMATION
- GENERIC_CMD_SET_BONE_POSITION
+ AO_CMD_SET_ANIMATION
+ AO_CMD_SET_BONE_POSITION
GENERIC_CMD_SET_ATTACHMENT
PROTOCOL_VERSION 15:
Serialization format changes
@@ -87,7 +87,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
damageGroups added to ToolCapabilities
sound_place added to ItemDefinition
PROTOCOL_VERSION 19:
- GENERIC_CMD_SET_PHYSICS_OVERRIDE
+ AO_CMD_SET_PHYSICS_OVERRIDE
PROTOCOL_VERSION 20:
TOCLIENT_HUDADD
TOCLIENT_HUDRM
@@ -131,7 +131,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Add TOCLIENT_HELLO for presenting server to client after client
presentation
Add TOCLIENT_AUTH_ACCEPT to accept connection from client
- Rename GENERIC_CMD_SET_ATTACHMENT to GENERIC_CMD_ATTACH_TO
+ Rename GENERIC_CMD_SET_ATTACHMENT to AO_CMD_ATTACH_TO
PROTOCOL_VERSION 26:
Add TileDef tileable_horizontal, tileable_vertical flags
PROTOCOL_VERSION 27:
@@ -239,8 +239,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Formspec elements are drawn in the order of definition
bgcolor[]: use 3 parameters (bgcolor, formspec (now an enum), fbgcolor)
box[] and image[] elements enable clipping by default
+ new element: scroll_container[]
+ FORMSPEC VERSION 4:
+ Allow dropdown indexing events
*/
-#define FORMSPEC_API_VERSION 3
+#define FORMSPEC_API_VERSION 4
#define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-"
@@ -324,6 +327,15 @@ enum ToClientCommand
v3f added_vel
*/
+ TOCLIENT_MEDIA_PUSH = 0x2C,
+ /*
+ std::string raw_hash
+ std::string filename
+ bool should_be_cached
+ u32 len
+ char filedata[len]
+ */
+
// (oops, there is some gap here)
TOCLIENT_CHAT_MESSAGE = 0x2F,
@@ -385,8 +397,9 @@ enum ToClientCommand
/*
Sends an FOV override/multiplier to client.
- float fov
+ f32 fov
bool is_multiplier
+ f32 transition_time
*/
TOCLIENT_DEATHSCREEN = 0x37,
@@ -560,10 +573,10 @@ enum ToClientCommand
u32 id
u8 type
v2f1000 pos
- u32 len
+ u16 len
u8[len] name
v2f1000 scale
- u32 len2
+ u16 len2
u8[len2] text
u32 number
u32 item
@@ -573,6 +586,8 @@ enum ToClientCommand
v3f1000 world_pos
v2s32 size
s16 z_index
+ u16 len3
+ u8[len3] text2
*/
TOCLIENT_HUDRM = 0x4a,
@@ -634,9 +649,9 @@ enum ToClientCommand
u8[4] night_sky (ARGB)
u8[4] night_horizon (ARGB)
u8[4] indoors (ARGB)
- u8[4] sun_tint (ARGB)
- u8[4] moon_tint (ARGB)
- std::string tint_type
+ u8[4] fog_sun_tint (ARGB)
+ u8[4] fog_moon_tint (ARGB)
+ std::string fog_tint_type
*/
TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO = 0x50,
diff --git a/src/network/serveropcodes.cpp b/src/network/serveropcodes.cpp
index c12ee2b2e..61f0dfeeb 100644
--- a/src/network/serveropcodes.cpp
+++ b/src/network/serveropcodes.cpp
@@ -111,6 +111,16 @@ const ToServerCommandHandler toServerCommandTable[TOSERVER_NUM_MSG_TYPES] =
const static ClientCommandFactory null_command_factory = { "TOCLIENT_NULL", 0, false };
+/*
+ Channels used for Server -> Client communication
+ 2: Bulk data (mapblocks, media, ...)
+ 1: HUD packets
+ 0: everything else
+
+ Packet order is only guaranteed inside a channel, so packets that operate on
+ the same objects are *required* to be in the same channel.
+*/
+
const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] =
{
null_command_factory, // 0x00
@@ -157,13 +167,13 @@ const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] =
{ "TOCLIENT_TIME_OF_DAY", 0, true }, // 0x29
{ "TOCLIENT_CSM_RESTRICTION_FLAGS", 0, true }, // 0x2A
{ "TOCLIENT_PLAYER_SPEED", 0, true }, // 0x2B
- null_command_factory, // 0x2C
+ { "TOCLIENT_MEDIA_PUSH", 0, true }, // 0x2C (sent over channel 1 too)
null_command_factory, // 0x2D
null_command_factory, // 0x2E
{ "TOCLIENT_CHAT_MESSAGE", 0, true }, // 0x2F
null_command_factory, // 0x30
{ "TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD", 0, true }, // 0x31
- { "TOCLIENT_ACTIVE_OBJECT_MESSAGES", 0, true }, // 0x32 Special packet, sent by 0 (rel) and 1 (unrel) channel
+ { "TOCLIENT_ACTIVE_OBJECT_MESSAGES", 0, true }, // 0x32 (may be sent as unrel over channel 1 too)
{ "TOCLIENT_HP", 0, true }, // 0x33
{ "TOCLIENT_MOVE_PLAYER", 0, true }, // 0x34
{ "TOCLIENT_ACCESS_DENIED_LEGACY", 0, true }, // 0x35
@@ -176,7 +186,7 @@ const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] =
{ "TOCLIENT_ANNOUNCE_MEDIA", 0, true }, // 0x3C
{ "TOCLIENT_ITEMDEF", 0, true }, // 0x3D
null_command_factory, // 0x3E
- { "TOCLIENT_PLAY_SOUND", 0, true }, // 0x3f
+ { "TOCLIENT_PLAY_SOUND", 0, true }, // 0x3f (may be sent as unrel too)
{ "TOCLIENT_STOP_SOUND", 0, true }, // 0x40
{ "TOCLIENT_PRIVILEGES", 0, true }, // 0x41
{ "TOCLIENT_INVENTORY_FORMSPEC", 0, true }, // 0x42
@@ -188,9 +198,9 @@ const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] =
null_command_factory, // 0x48
{ "TOCLIENT_HUDADD", 1, true }, // 0x49
{ "TOCLIENT_HUDRM", 1, true }, // 0x4a
- { "TOCLIENT_HUDCHANGE", 0, true }, // 0x4b
- { "TOCLIENT_HUD_SET_FLAGS", 0, true }, // 0x4c
- { "TOCLIENT_HUD_SET_PARAM", 0, true }, // 0x4d
+ { "TOCLIENT_HUDCHANGE", 1, true }, // 0x4b
+ { "TOCLIENT_HUD_SET_FLAGS", 1, true }, // 0x4c
+ { "TOCLIENT_HUD_SET_PARAM", 1, true }, // 0x4d
{ "TOCLIENT_BREATH", 0, true }, // 0x4e
{ "TOCLIENT_SET_SKY", 0, true }, // 0x4f
{ "TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO", 0, true }, // 0x50
diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp
index 23bcc867f..b3008bb50 100644
--- a/src/network/serverpackethandler.cpp
+++ b/src/network/serverpackethandler.cpp
@@ -20,7 +20,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "chatmessage.h"
#include "server.h"
#include "log.h"
-#include "content_sao.h"
#include "emerge.h"
#include "mapblock.h"
#include "modchannels.h"
@@ -34,6 +33,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "network/connection.h"
#include "network/networkprotocol.h"
#include "network/serveropcodes.h"
+#include "server/player_sao.h"
+#include "server/serverinventorymgr.h"
#include "util/auth.h"
#include "util/base64.h"
#include "util/pointedthing.h"
@@ -52,11 +53,12 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
if(pkt->getSize() < 1)
return;
- RemoteClient* client = getClient(pkt->getPeerId(), CS_Created);
+ session_t peer_id = pkt->getPeerId();
+ RemoteClient *client = getClient(peer_id, CS_Created);
std::string addr_s;
try {
- Address address = getPeerAddress(pkt->getPeerId());
+ Address address = getPeerAddress(peer_id);
addr_s = address.serializeString();
}
catch (con::PeerNotFoundException &e) {
@@ -66,27 +68,27 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
* respond for some time, your server was overloaded or
* things like that.
*/
- infostream << "Server::ProcessData(): Canceling: peer "
- << pkt->getPeerId() << " not found" << std::endl;
+ infostream << "Server::ProcessData(): Canceling: peer " << peer_id <<
+ " not found" << std::endl;
return;
}
// If net_proto_version is set, this client has already been handled
if (client->getState() > CS_Created) {
- verbosestream << "Server: Ignoring multiple TOSERVER_INITs from "
- << addr_s << " (peer_id=" << pkt->getPeerId() << ")" << std::endl;
+ verbosestream << "Server: Ignoring multiple TOSERVER_INITs from " <<
+ addr_s << " (peer_id=" << peer_id << ")" << std::endl;
return;
}
- verbosestream << "Server: Got TOSERVER_INIT from " << addr_s << " (peer_id="
- << pkt->getPeerId() << ")" << std::endl;
+ verbosestream << "Server: Got TOSERVER_INIT from " << addr_s <<
+ " (peer_id=" << peer_id << ")" << std::endl;
// Do not allow multiple players in simple singleplayer mode.
// This isn't a perfect way to do it, but will suffice for now
if (m_simple_singleplayer_mode && m_clients.getClientIDs().size() > 1) {
- infostream << "Server: Not allowing another client (" << addr_s
- << ") to connect in simple singleplayer mode" << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SINGLEPLAYER);
+ infostream << "Server: Not allowing another client (" << addr_s <<
+ ") to connect in simple singleplayer mode" << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_SINGLEPLAYER);
return;
}
@@ -109,11 +111,9 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
depl_serial_v = SER_FMT_VER_INVALID;
if (depl_serial_v == SER_FMT_VER_INVALID) {
- actionstream << "Server: A mismatched client tried to connect from "
- << addr_s << std::endl;
- infostream<<"Server: Cannot negotiate serialization version with "
- << addr_s << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_VERSION);
+ actionstream << "Server: A mismatched client tried to connect from " <<
+ addr_s << " ser_fmt_max=" << (int)client_max << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_VERSION);
return;
}
@@ -146,9 +146,9 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
net_proto_version != LATEST_PROTOCOL_VERSION) ||
net_proto_version < SERVER_PROTOCOL_VERSION_MIN ||
net_proto_version > SERVER_PROTOCOL_VERSION_MAX) {
- actionstream << "Server: A mismatched client tried to connect from "
- << addr_s << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_VERSION);
+ actionstream << "Server: A mismatched client tried to connect from " <<
+ addr_s << " proto_max=" << (int)max_net_proto_version << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_VERSION);
return;
}
@@ -159,56 +159,56 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
size_t pns = playerName.size();
if (pns == 0 || pns > PLAYERNAME_SIZE) {
- actionstream << "Server: Player with "
- << ((pns > PLAYERNAME_SIZE) ? "a too long" : "an empty")
- << " name tried to connect from " << addr_s << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_NAME);
+ actionstream << "Server: Player with " <<
+ ((pns > PLAYERNAME_SIZE) ? "a too long" : "an empty") <<
+ " name tried to connect from " << addr_s << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_NAME);
return;
}
if (!string_allowed(playerName, PLAYERNAME_ALLOWED_CHARS)) {
- actionstream << "Server: Player with an invalid name "
- << "tried to connect from " << addr_s << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_CHARS_IN_NAME);
+ actionstream << "Server: Player with an invalid name tried to connect "
+ "from " << addr_s << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_CHARS_IN_NAME);
return;
}
- m_clients.setPlayerName(pkt->getPeerId(), playername);
+ m_clients.setPlayerName(peer_id, playername);
//TODO (later) case insensitivity
std::string legacyPlayerNameCasing = playerName;
if (!isSingleplayer() && strcasecmp(playername, "singleplayer") == 0) {
- actionstream << "Server: Player with the name \"singleplayer\" "
- << "tried to connect from " << addr_s << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_NAME);
+ actionstream << "Server: Player with the name \"singleplayer\" tried "
+ "to connect from " << addr_s << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_NAME);
return;
}
{
std::string reason;
if (m_script->on_prejoinplayer(playername, addr_s, &reason)) {
- actionstream << "Server: Player with the name \"" << playerName << "\" "
- << "tried to connect from " << addr_s << " "
- << "but it was disallowed for the following reason: "
- << reason << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_CUSTOM_STRING, reason);
+ actionstream << "Server: Player with the name \"" << playerName <<
+ "\" tried to connect from " << addr_s <<
+ " but it was disallowed for the following reason: " << reason <<
+ std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_CUSTOM_STRING, reason);
return;
}
}
- infostream << "Server: New connection: \"" << playerName << "\" from "
- << addr_s << " (peer_id=" << pkt->getPeerId() << ")" << std::endl;
+ infostream << "Server: New connection: \"" << playerName << "\" from " <<
+ addr_s << " (peer_id=" << peer_id << ")" << std::endl;
// Enforce user limit.
// Don't enforce for users that have some admin right or mod permits it.
if (m_clients.isUserLimitReached() &&
playername != g_settings->get("name") &&
!m_script->can_bypass_userlimit(playername, addr_s)) {
- actionstream << "Server: " << playername << " tried to join from "
- << addr_s << ", but there" << " are already max_users="
- << g_settings->getU16("max_users") << " players." << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_TOO_MANY_USERS);
+ actionstream << "Server: " << playername << " tried to join from " <<
+ addr_s << ", but there are already max_users=" <<
+ g_settings->getU16("max_users") << " players." << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_TOO_MANY_USERS);
return;
}
@@ -228,20 +228,19 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
auth_mechs |= AUTH_MECHANISM_SRP;
client->enc_pwd = encpwd;
} else {
- actionstream << "User " << playername
- << " tried to log in, but password field"
- << " was invalid (unknown mechcode)." << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SERVER_FAIL);
+ actionstream << "User " << playername << " tried to log in, "
+ "but password field was invalid (unknown mechcode)." <<
+ std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_SERVER_FAIL);
return;
}
} else if (base64_is_valid(encpwd)) {
auth_mechs |= AUTH_MECHANISM_LEGACY_PASSWORD;
client->enc_pwd = encpwd;
} else {
- actionstream << "User " << playername
- << " tried to log in, but password field"
- << " was invalid (invalid base64)." << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SERVER_FAIL);
+ actionstream << "User " << playername << " tried to log in, but "
+ "password field was invalid (invalid base64)." << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_SERVER_FAIL);
return;
}
} else {
@@ -264,8 +263,8 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
verbosestream << "Sending TOCLIENT_HELLO with auth method field: "
<< auth_mechs << std::endl;
- NetworkPacket resp_pkt(TOCLIENT_HELLO, 1 + 4
- + legacyPlayerNameCasing.size(), pkt->getPeerId());
+ NetworkPacket resp_pkt(TOCLIENT_HELLO,
+ 1 + 4 + legacyPlayerNameCasing.size(), peer_id);
u16 depl_compress_mode = NETPROTO_COMPRESSION_NONE;
resp_pkt << depl_serial_v << depl_compress_mode << net_proto_version
@@ -276,16 +275,16 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
client->allowed_auth_mechs = auth_mechs;
client->setDeployedCompressionMode(depl_compress_mode);
- m_clients.event(pkt->getPeerId(), CSE_Hello);
+ m_clients.event(peer_id, CSE_Hello);
}
void Server::handleCommand_Init2(NetworkPacket* pkt)
{
- verbosestream << "Server: Got TOSERVER_INIT2 from "
- << pkt->getPeerId() << std::endl;
+ session_t peer_id = pkt->getPeerId();
+ verbosestream << "Server: Got TOSERVER_INIT2 from " << peer_id << std::endl;
- m_clients.event(pkt->getPeerId(), CSE_GotInit2);
- u16 protocol_version = m_clients.getProtocolVersion(pkt->getPeerId());
+ m_clients.event(peer_id, CSE_GotInit2);
+ u16 protocol_version = m_clients.getProtocolVersion(peer_id);
std::string lang;
if (pkt->getSize() > 0)
@@ -295,45 +294,48 @@ void Server::handleCommand_Init2(NetworkPacket* pkt)
Send some initialization data
*/
- infostream << "Server: Sending content to "
- << getPlayerName(pkt->getPeerId()) << std::endl;
+ infostream << "Server: Sending content to " << getPlayerName(peer_id) <<
+ std::endl;
// Send item definitions
- SendItemDef(pkt->getPeerId(), m_itemdef, protocol_version);
+ SendItemDef(peer_id, m_itemdef, protocol_version);
// Send node definitions
- SendNodeDef(pkt->getPeerId(), m_nodedef, protocol_version);
+ SendNodeDef(peer_id, m_nodedef, protocol_version);
- m_clients.event(pkt->getPeerId(), CSE_SetDefinitionsSent);
+ m_clients.event(peer_id, CSE_SetDefinitionsSent);
// Send media announcement
- sendMediaAnnouncement(pkt->getPeerId(), lang);
+ sendMediaAnnouncement(peer_id, lang);
+
+ RemoteClient *client = getClient(peer_id, CS_InitDone);
- RemoteClient *client = getClient(pkt->getPeerId(), CS_InitDone);
+ // Keep client language for server translations
+ client->setLangCode(lang);
// Send active objects
{
- PlayerSAO *sao = getPlayerSAO(pkt->getPeerId());
+ PlayerSAO *sao = getPlayerSAO(peer_id);
if (client && sao)
SendActiveObjectRemoveAdd(client, sao);
}
// Send detached inventories
- sendDetachedInventories(pkt->getPeerId(), false);
+ sendDetachedInventories(peer_id, false);
// Send player movement settings
- SendMovement(pkt->getPeerId());
+ SendMovement(peer_id);
// Send time of day
u16 time = m_env->getTimeOfDay();
float time_speed = g_settings->getFloat("time_speed");
- SendTimeOfDay(pkt->getPeerId(), time, time_speed);
+ SendTimeOfDay(peer_id, time, time_speed);
- SendCSMRestrictionFlags(pkt->getPeerId());
+ SendCSMRestrictionFlags(peer_id);
// Warnings about protocol version can be issued here
if (client->net_proto_version < LATEST_PROTOCOL_VERSION) {
- SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
+ SendChatMessage(peer_id, ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
L"# Server: WARNING: YOUR CLIENT'S VERSION MAY NOT BE FULLY COMPATIBLE "
L"WITH THIS SERVER!"));
}
@@ -346,8 +348,9 @@ void Server::handleCommand_RequestMedia(NetworkPacket* pkt)
*pkt >> numfiles;
- infostream << "Sending " << numfiles << " files to "
- << getPlayerName(pkt->getPeerId()) << std::endl;
+ session_t peer_id = pkt->getPeerId();
+ infostream << "Sending " << numfiles << " files to " <<
+ getPlayerName(peer_id) << std::endl;
verbosestream << "TOSERVER_REQUEST_MEDIA: " << std::endl;
for (u16 i = 0; i < numfiles; i++) {
@@ -360,7 +363,7 @@ void Server::handleCommand_RequestMedia(NetworkPacket* pkt)
<< name << std::endl;
}
- sendRequestedMedia(pkt->getPeerId(), tosend);
+ sendRequestedMedia(peer_id, tosend);
}
void Server::handleCommand_ClientReady(NetworkPacket* pkt)
@@ -370,18 +373,16 @@ void Server::handleCommand_ClientReady(NetworkPacket* pkt)
PlayerSAO* playersao = StageTwoClientInit(peer_id);
if (playersao == NULL) {
- actionstream
- << "TOSERVER_CLIENT_READY stage 2 client init failed for peer_id: "
- << peer_id << std::endl;
+ errorstream << "TOSERVER_CLIENT_READY stage 2 client init failed "
+ "peer_id=" << peer_id << std::endl;
DisconnectPeer(peer_id);
return;
}
if (pkt->getSize() < 8) {
- errorstream
- << "TOSERVER_CLIENT_READY client sent inconsistent data, disconnecting peer_id: "
- << peer_id << std::endl;
+ errorstream << "TOSERVER_CLIENT_READY client sent inconsistent data, "
+ "disconnecting peer_id: " << peer_id << std::endl;
DisconnectPeer(peer_id);
return;
}
@@ -390,9 +391,8 @@ void Server::handleCommand_ClientReady(NetworkPacket* pkt)
std::string full_ver;
*pkt >> major_ver >> minor_ver >> patch_ver >> reserved >> full_ver;
- m_clients.setClientVersion(
- peer_id, major_ver, minor_ver, patch_ver,
- full_ver);
+ m_clients.setClientVersion(peer_id, major_ver, minor_ver, patch_ver,
+ full_ver);
if (pkt->getRemainingBytes() >= 2)
*pkt >> playersao->getPlayer()->formspec_version;
@@ -409,12 +409,15 @@ void Server::handleCommand_ClientReady(NetworkPacket* pkt)
// (u16) 1 + std::string represents a pseudo vector serialization representation
notice_pkt << (u8) PLAYER_LIST_ADD << (u16) 1 << std::string(playersao->getPlayer()->getName());
m_clients.sendToAll(&notice_pkt);
-
m_clients.event(peer_id, CSE_SetClientReady);
- m_script->on_joinplayer(playersao);
+
+ s64 last_login;
+ m_script->getAuth(playersao->getPlayer()->getName(), nullptr, nullptr, &last_login);
+ m_script->on_joinplayer(playersao, last_login);
+
// Send shutdown timer if shutdown has been scheduled
if (m_shutdown_state.isTimerRunning()) {
- SendChatMessage(pkt->getPeerId(), m_shutdown_state.getShutdownTimerMessage());
+ SendChatMessage(peer_id, m_shutdown_state.getShutdownTimerMessage());
}
}
@@ -498,6 +501,7 @@ void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao,
player->control.sneak = (keyPressed & 64);
player->control.LMB = (keyPressed & 128);
player->control.RMB = (keyPressed & 256);
+ player->control.zoom = (keyPressed & 512);
if (playersao->checkMovementCheat()) {
// Call callbacks
@@ -508,21 +512,22 @@ void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao,
void Server::handleCommand_PlayerPos(NetworkPacket* pkt)
{
- RemotePlayer *player = m_env->getPlayer(pkt->getPeerId());
+ session_t peer_id = pkt->getPeerId();
+ RemotePlayer *player = m_env->getPlayer(peer_id);
if (player == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
PlayerSAO *playersao = player->getPlayerSAO();
if (playersao == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player object for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player object for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
@@ -568,22 +573,23 @@ void Server::handleCommand_DeletedBlocks(NetworkPacket* pkt)
void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
{
- RemotePlayer *player = m_env->getPlayer(pkt->getPeerId());
+ session_t peer_id = pkt->getPeerId();
+ RemotePlayer *player = m_env->getPlayer(peer_id);
if (player == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
PlayerSAO *playersao = player->getPlayerSAO();
if (playersao == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player object for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player object for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
@@ -619,9 +625,9 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
ma->from_inv.applyCurrentPlayer(player->getName());
ma->to_inv.applyCurrentPlayer(player->getName());
- setInventoryModified(ma->from_inv);
+ m_inventory_mgr->setInventoryModified(ma->from_inv);
if (ma->from_inv != ma->to_inv)
- setInventoryModified(ma->to_inv);
+ m_inventory_mgr->setInventoryModified(ma->to_inv);
bool from_inv_is_current_player =
(ma->from_inv.type == InventoryLocation::PLAYER) &&
@@ -686,7 +692,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
da->from_inv.applyCurrentPlayer(player->getName());
- setInventoryModified(da->from_inv);
+ m_inventory_mgr->setInventoryModified(da->from_inv);
/*
Disable dropping items out of craftpreview
@@ -722,7 +728,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
ca->craft_inv.applyCurrentPlayer(player->getName());
- setInventoryModified(ca->craft_inv);
+ m_inventory_mgr->setInventoryModified(ca->craft_inv);
//bool craft_inv_is_current_player =
// (ca->craft_inv.type == InventoryLocation::PLAYER) &&
@@ -738,7 +744,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
}
// Do the action
- a->apply(this, playersao, this);
+ a->apply(m_inventory_mgr.get(), playersao, this);
// Eat the action
delete a;
}
@@ -761,12 +767,13 @@ void Server::handleCommand_ChatMessage(NetworkPacket* pkt)
message += (wchar_t)tmp_wchar;
}
- RemotePlayer *player = m_env->getPlayer(pkt->getPeerId());
+ session_t peer_id = pkt->getPeerId();
+ RemotePlayer *player = m_env->getPlayer(peer_id);
if (player == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
@@ -777,8 +784,8 @@ void Server::handleCommand_ChatMessage(NetworkPacket* pkt)
std::wstring answer_to_sender = handleChat(name, wname, message, true, player);
if (!answer_to_sender.empty()) {
// Send the answer to sender
- SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_NORMAL,
- answer_to_sender, wname));
+ SendChatMessage(peer_id, ChatMessage(CHATMESSAGE_TYPE_NORMAL,
+ answer_to_sender, wname));
}
}
@@ -788,22 +795,23 @@ void Server::handleCommand_Damage(NetworkPacket* pkt)
*pkt >> damage;
- RemotePlayer *player = m_env->getPlayer(pkt->getPeerId());
+ session_t peer_id = pkt->getPeerId();
+ RemotePlayer *player = m_env->getPlayer(peer_id);
if (player == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
PlayerSAO *playersao = player->getPlayerSAO();
if (playersao == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player object for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player object for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
@@ -825,105 +833,28 @@ void Server::handleCommand_Damage(NetworkPacket* pkt)
}
}
-void Server::handleCommand_Password(NetworkPacket* pkt)
-{
- if (pkt->getSize() != PASSWORD_SIZE * 2)
- return;
-
- std::string oldpwd;
- std::string newpwd;
-
- // Deny for clients using the new protocol
- RemoteClient* client = getClient(pkt->getPeerId(), CS_Created);
- if (client->net_proto_version >= 25) {
- infostream << "Server::handleCommand_Password(): Denying change: "
- << " Client protocol version for peer_id=" << pkt->getPeerId()
- << " too new!" << std::endl;
- return;
- }
-
- for (u16 i = 0; i < PASSWORD_SIZE - 1; i++) {
- char c = pkt->getChar(i);
- if (c == 0)
- break;
- oldpwd += c;
- }
-
- for (u16 i = 0; i < PASSWORD_SIZE - 1; i++) {
- char c = pkt->getChar(PASSWORD_SIZE + i);
- if (c == 0)
- break;
- newpwd += c;
- }
-
- RemotePlayer *player = m_env->getPlayer(pkt->getPeerId());
- if (player == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
- return;
- }
-
- if (!base64_is_valid(newpwd)) {
- infostream<<"Server: " << player->getName() <<
- " supplied invalid password hash" << std::endl;
- // Wrong old password supplied!!
- SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
- L"Invalid new password hash supplied. Password NOT changed."));
- return;
- }
-
- infostream << "Server: Client requests a password change from "
- << "'" << oldpwd << "' to '" << newpwd << "'" << std::endl;
-
- std::string playername = player->getName();
-
- std::string checkpwd;
- m_script->getAuth(playername, &checkpwd, NULL);
-
- if (oldpwd != checkpwd) {
- infostream << "Server: invalid old password" << std::endl;
- // Wrong old password supplied!!
- SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
- L"Invalid old password supplied. Password NOT changed."));
- return;
- }
-
- bool success = m_script->setPassword(playername, newpwd);
- if (success) {
- actionstream << player->getName() << " changes password" << std::endl;
- SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
- L"Password change successful."));
- } else {
- actionstream << player->getName() << " tries to change password but "
- << "it fails" << std::endl;
- SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
- L"Password change failed or unavailable."));
- }
-}
-
void Server::handleCommand_PlayerItem(NetworkPacket* pkt)
{
if (pkt->getSize() < 2)
return;
- RemotePlayer *player = m_env->getPlayer(pkt->getPeerId());
+ session_t peer_id = pkt->getPeerId();
+ RemotePlayer *player = m_env->getPlayer(peer_id);
if (player == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
PlayerSAO *playersao = player->getPlayerSAO();
if (playersao == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player object for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player object for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
@@ -936,12 +867,13 @@ void Server::handleCommand_PlayerItem(NetworkPacket* pkt)
void Server::handleCommand_Respawn(NetworkPacket* pkt)
{
- RemotePlayer *player = m_env->getPlayer(pkt->getPeerId());
+ session_t peer_id = pkt->getPeerId();
+ RemotePlayer *player = m_env->getPlayer(peer_id);
if (player == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
@@ -951,7 +883,7 @@ void Server::handleCommand_Respawn(NetworkPacket* pkt)
if (!playersao->isDead())
return;
- RespawnPlayer(pkt->getPeerId());
+ RespawnPlayer(peer_id);
actionstream << player->getName() << " respawns at "
<< PP(playersao->getBasePosition() / BS) << std::endl;
@@ -973,8 +905,8 @@ bool Server::checkInteractDistance(RemotePlayer *player, const f32 d, const std:
actionstream << "Player " << player->getName()
<< " tried to access " << what
<< " from too far: "
- << "d=" << d <<", max_d=" << max_d
- << ". ignoring." << std::endl;
+ << "d=" << d << ", max_d=" << max_d
+ << "; ignoring." << std::endl;
// Call callbacks
m_script->on_cheat(player->getPlayerSAO(), "interacted_too_far");
return false;
@@ -1006,31 +938,32 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
verbosestream << "TOSERVER_INTERACT: action=" << (int)action << ", item="
<< item_i << ", pointed=" << pointed.dump() << std::endl;
- RemotePlayer *player = m_env->getPlayer(pkt->getPeerId());
+ session_t peer_id = pkt->getPeerId();
+ RemotePlayer *player = m_env->getPlayer(peer_id);
if (player == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
PlayerSAO *playersao = player->getPlayerSAO();
if (playersao == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player object for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player object for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
if (playersao->isDead()) {
- actionstream << "Server: NoCheat: " << player->getName()
+ actionstream << "Server: " << player->getName()
<< " tried to interact while dead; ignoring." << std::endl;
if (pointed.type == POINTEDTHING_NODE) {
// Re-send block to revert change on client-side
- RemoteClient *client = getClient(pkt->getPeerId());
+ RemoteClient *client = getClient(peer_id);
v3s16 blockpos = getNodeBlockPos(pointed.node_undersurface);
client->SetBlockNotSent(blockpos);
}
@@ -1081,7 +1014,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
pointed.dump() << " without 'interact' privilege" << std::endl;
// Re-send block to revert change on client-side
- RemoteClient *client = getClient(pkt->getPeerId());
+ RemoteClient *client = getClient(peer_id);
// Digging completed -> under
if (action == INTERACT_DIGGING_COMPLETED) {
v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_under, BS));
@@ -1109,7 +1042,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
if (!checkInteractDistance(player, d, pointed.dump())) {
// Re-send block to revert change on client-side
- RemoteClient *client = getClient(pkt->getPeerId());
+ RemoteClient *client = getClient(peer_id);
v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_under, BS));
client->SetBlockNotSent(blockpos);
return;
@@ -1132,11 +1065,10 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
n = m_env->getMap().getNode(p_under, &pos_ok);
if (!pos_ok) {
- infostream << "Server: Not punching: Node not found."
- << " Adding block to emerge queue."
- << std::endl;
- m_emerge->enqueueBlockEmerge(pkt->getPeerId(),
- getNodeBlockPos(p_above), false);
+ infostream << "Server: Not punching: Node not found. "
+ "Adding block to emerge queue." << std::endl;
+ m_emerge->enqueueBlockEmerge(peer_id, getNodeBlockPos(p_above),
+ false);
}
if (n.getContent() != CONTENT_IGNORE)
@@ -1202,11 +1134,10 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
bool pos_ok;
MapNode n = m_env->getMap().getNode(p_under, &pos_ok);
if (!pos_ok) {
- infostream << "Server: Not finishing digging: Node not found."
- << " Adding block to emerge queue."
- << std::endl;
- m_emerge->enqueueBlockEmerge(pkt->getPeerId(),
- getNodeBlockPos(p_above), false);
+ infostream << "Server: Not finishing digging: Node not found. "
+ "Adding block to emerge queue." << std::endl;
+ m_emerge->enqueueBlockEmerge(peer_id, getNodeBlockPos(p_above),
+ false);
}
/* Cheat prevention */
@@ -1217,7 +1148,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
playersao->noCheatDigEnd();
// If player didn't start digging this, ignore dig
if (nocheat_p != p_under) {
- infostream << "Server: NoCheat: " << player->getName()
+ infostream << "Server: " << player->getName()
<< " started digging "
<< PP(nocheat_p) << " and completed digging "
<< PP(p_under) << "; not digging." << std::endl;
@@ -1241,9 +1172,9 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
}
// If can't dig, ignore dig
if (!params.diggable) {
- infostream << "Server: NoCheat: " << player->getName()
+ infostream << "Server: " << player->getName()
<< " completed digging " << PP(p_under)
- << ", which is not diggable with tool. not digging."
+ << ", which is not diggable with tool; not digging."
<< std::endl;
is_valid_dig = false;
// Call callbacks
@@ -1267,7 +1198,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
}
// Dig not possible
else {
- infostream << "Server: NoCheat: " << player->getName()
+ infostream << "Server: " << player->getName()
<< " completed digging " << PP(p_under)
<< "too fast; not digging." << std::endl;
is_valid_dig = false;
@@ -1282,7 +1213,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
m_script->node_on_dig(p_under, n, playersao);
v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_under, BS));
- RemoteClient *client = getClient(pkt->getPeerId());
+ RemoteClient *client = getClient(peer_id);
// Send unusual result (that is, node not being removed)
if (m_env->getMap().getNode(p_under).getContent() != CONTENT_AIR) {
// Re-send block to revert change on client-side
@@ -1304,7 +1235,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
// Reset build time counter
if (pointed.type == POINTEDTHING_NODE &&
selected_item.getDefinition(m_itemdef).type == ITEM_NODE)
- getClient(pkt->getPeerId())->m_time_from_building = 0.0;
+ getClient(peer_id)->m_time_from_building = 0.0;
if (pointed.type == POINTEDTHING_OBJECT) {
// Right click object
@@ -1338,7 +1269,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
// If item has node placement prediction, always send the
// blocks to make sure the client knows what exactly happened
- RemoteClient *client = getClient(pkt->getPeerId());
+ RemoteClient *client = getClient(peer_id);
v3s16 blockpos = getNodeBlockPos(floatToInt(pointed_pos_above, BS));
v3s16 blockpos2 = getNodeBlockPos(floatToInt(pointed_pos_under, BS));
if (!selected_item.getDefinition(m_itemdef).node_placement_prediction.empty()) {
@@ -1441,22 +1372,23 @@ void Server::handleCommand_NodeMetaFields(NetworkPacket* pkt)
fields[fieldname] = pkt->readLongString();
}
- RemotePlayer *player = m_env->getPlayer(pkt->getPeerId());
+ session_t peer_id = pkt->getPeerId();
+ RemotePlayer *player = m_env->getPlayer(peer_id);
if (player == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
PlayerSAO *playersao = player->getPlayerSAO();
if (playersao == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player object for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player object for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
@@ -1492,22 +1424,23 @@ void Server::handleCommand_InventoryFields(NetworkPacket* pkt)
fields[fieldname] = pkt->readLongString();
}
- RemotePlayer *player = m_env->getPlayer(pkt->getPeerId());
+ session_t peer_id = pkt->getPeerId();
+ RemotePlayer *player = m_env->getPlayer(peer_id);
if (player == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
PlayerSAO *playersao = player->getPlayerSAO();
if (playersao == NULL) {
- errorstream << "Server::ProcessData(): Canceling: "
- "No player object for peer_id=" << pkt->getPeerId()
- << " disconnecting peer!" << std::endl;
- DisconnectPeer(pkt->getPeerId());
+ errorstream <<
+ "Server::ProcessData(): Canceling: No player object for peer_id=" <<
+ peer_id << " disconnecting peer!" << std::endl;
+ DisconnectPeer(peer_id);
return;
}
@@ -1517,7 +1450,7 @@ void Server::handleCommand_InventoryFields(NetworkPacket* pkt)
}
// verify that we displayed the formspec to the user
- const auto peer_state_iterator = m_formspec_state_data.find(pkt->getPeerId());
+ const auto peer_state_iterator = m_formspec_state_data.find(peer_id);
if (peer_state_iterator != m_formspec_state_data.end()) {
const std::string &server_formspec_name = peer_state_iterator->second;
if (client_formspec_name == server_formspec_name) {
@@ -1543,7 +1476,8 @@ void Server::handleCommand_InventoryFields(NetworkPacket* pkt)
void Server::handleCommand_FirstSrp(NetworkPacket* pkt)
{
- RemoteClient* client = getClient(pkt->getPeerId(), CS_Invalid);
+ session_t peer_id = pkt->getPeerId();
+ RemoteClient *client = getClient(peer_id, CS_Invalid);
ClientState cstate = client->getState();
std::string playername = client->getName();
@@ -1551,7 +1485,7 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt)
std::string salt;
std::string verification_key;
- std::string addr_s = getPeerAddress(pkt->getPeerId()).serializeString();
+ std::string addr_s = getPeerAddress(peer_id).serializeString();
u8 is_empty;
*pkt >> salt >> verification_key >> is_empty;
@@ -1565,7 +1499,7 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt)
actionstream << "Server: Client from " << addr_s
<< " tried to set password without being "
<< "authenticated, or the username being new." << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA);
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA);
return;
}
@@ -1574,7 +1508,7 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt)
is_empty == 1) {
actionstream << "Server: " << playername
<< " supplied empty password from " << addr_s << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_EMPTY_PASSWORD);
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_EMPTY_PASSWORD);
return;
}
@@ -1582,8 +1516,9 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt)
initial_ver_key = encode_srp_verifier(verification_key, salt);
m_script->createAuth(playername, initial_ver_key);
+ m_script->on_authplayer(playername, addr_s, true);
- acceptAuth(pkt->getPeerId(), false);
+ acceptAuth(peer_id, false);
} else {
if (cstate < CS_SudoMode) {
infostream << "Server::ProcessData(): Ignoring TOSERVER_FIRST_SRP from "
@@ -1591,48 +1526,48 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt)
<< std::endl;
return;
}
- m_clients.event(pkt->getPeerId(), CSE_SudoLeave);
+ m_clients.event(peer_id, CSE_SudoLeave);
std::string pw_db_field = encode_srp_verifier(verification_key, salt);
bool success = m_script->setPassword(playername, pw_db_field);
if (success) {
actionstream << playername << " changes password" << std::endl;
- SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
- L"Password change successful."));
+ SendChatMessage(peer_id, ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
+ L"Password change successful."));
} else {
- actionstream << playername << " tries to change password but "
- << "it fails" << std::endl;
- SendChatMessage(pkt->getPeerId(), ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
- L"Password change failed or unavailable."));
+ actionstream << playername <<
+ " tries to change password but it fails" << std::endl;
+ SendChatMessage(peer_id, ChatMessage(CHATMESSAGE_TYPE_SYSTEM,
+ L"Password change failed or unavailable."));
}
}
}
void Server::handleCommand_SrpBytesA(NetworkPacket* pkt)
{
- RemoteClient* client = getClient(pkt->getPeerId(), CS_Invalid);
+ session_t peer_id = pkt->getPeerId();
+ RemoteClient *client = getClient(peer_id, CS_Invalid);
ClientState cstate = client->getState();
bool wantSudo = (cstate == CS_Active);
if (!((cstate == CS_HelloSent) || (cstate == CS_Active))) {
- actionstream << "Server: got SRP _A packet in wrong state "
- << cstate << " from "
- << getPeerAddress(pkt->getPeerId()).serializeString()
- << ". Ignoring." << std::endl;
+ actionstream << "Server: got SRP _A packet in wrong state " << cstate <<
+ " from " << getPeerAddress(peer_id).serializeString() <<
+ ". Ignoring." << std::endl;
return;
}
if (client->chosen_mech != AUTH_MECHANISM_NONE) {
- actionstream << "Server: got SRP _A packet, while auth"
- << "is already going on with mech " << client->chosen_mech
- << " from " << getPeerAddress(pkt->getPeerId()).serializeString()
- << " (wantSudo=" << wantSudo << "). Ignoring." << std::endl;
+ actionstream << "Server: got SRP _A packet, while auth is already "
+ "going on with mech " << client->chosen_mech << " from " <<
+ getPeerAddress(peer_id).serializeString() <<
+ " (wantSudo=" << wantSudo << "). Ignoring." << std::endl;
if (wantSudo) {
- DenySudoAccess(pkt->getPeerId());
+ DenySudoAccess(peer_id);
return;
}
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA);
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA);
return;
}
@@ -1649,19 +1584,19 @@ void Server::handleCommand_SrpBytesA(NetworkPacket* pkt)
if (wantSudo) {
if (!client->isSudoMechAllowed(chosen)) {
- actionstream << "Server: Player \"" << client->getName()
- << "\" at " << getPeerAddress(pkt->getPeerId()).serializeString()
- << " tried to change password using unallowed mech "
- << chosen << "." << std::endl;
- DenySudoAccess(pkt->getPeerId());
+ actionstream << "Server: Player \"" << client->getName() <<
+ "\" at " << getPeerAddress(peer_id).serializeString() <<
+ " tried to change password using unallowed mech " << chosen <<
+ "." << std::endl;
+ DenySudoAccess(peer_id);
return;
}
} else {
if (!client->isMechAllowed(chosen)) {
- actionstream << "Server: Client tried to authenticate from "
- << getPeerAddress(pkt->getPeerId()).serializeString()
- << " using unallowed mech " << chosen << "." << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA);
+ actionstream << "Server: Client tried to authenticate from " <<
+ getPeerAddress(peer_id).serializeString() <<
+ " using unallowed mech " << chosen << "." << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA);
return;
}
}
@@ -1677,10 +1612,10 @@ void Server::handleCommand_SrpBytesA(NetworkPacket* pkt)
&verifier, &salt);
} else if (!decode_srp_verifier_and_salt(client->enc_pwd, &verifier, &salt)) {
// Non-base64 errors should have been catched in the init handler
- actionstream << "Server: User " << client->getName()
- << " tried to log in, but srp verifier field"
- << " was invalid (most likely invalid base64)." << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SERVER_FAIL);
+ actionstream << "Server: User " << client->getName() <<
+ " tried to log in, but srp verifier field was invalid (most likely "
+ "invalid base64)." << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_SERVER_FAIL);
return;
}
@@ -1700,23 +1635,26 @@ void Server::handleCommand_SrpBytesA(NetworkPacket* pkt)
<< " tried to log in, SRP-6a safety check violated in _A handler."
<< std::endl;
if (wantSudo) {
- DenySudoAccess(pkt->getPeerId());
+ DenySudoAccess(peer_id);
return;
}
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA);
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA);
return;
}
- NetworkPacket resp_pkt(TOCLIENT_SRP_BYTES_S_B, 0, pkt->getPeerId());
+ NetworkPacket resp_pkt(TOCLIENT_SRP_BYTES_S_B, 0, peer_id);
resp_pkt << salt << std::string(bytes_B, len_B);
Send(&resp_pkt);
}
void Server::handleCommand_SrpBytesM(NetworkPacket* pkt)
{
- RemoteClient* client = getClient(pkt->getPeerId(), CS_Invalid);
+ session_t peer_id = pkt->getPeerId();
+ RemoteClient *client = getClient(peer_id, CS_Invalid);
ClientState cstate = client->getState();
+ std::string addr_s = getPeerAddress(pkt->getPeerId()).serializeString();
+ std::string playername = client->getName();
bool wantSudo = (cstate == CS_Active);
@@ -1724,8 +1662,7 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt)
if (!((cstate == CS_HelloSent) || (cstate == CS_Active))) {
actionstream << "Server: got SRP _M packet in wrong state "
- << cstate << " from "
- << getPeerAddress(pkt->getPeerId()).serializeString()
+ << cstate << " from " << addr_s
<< ". Ignoring." << std::endl;
return;
}
@@ -1733,15 +1670,14 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt)
if (client->chosen_mech != AUTH_MECHANISM_SRP &&
client->chosen_mech != AUTH_MECHANISM_LEGACY_PASSWORD) {
actionstream << "Server: got SRP _M packet, while auth"
- << "is going on with mech " << client->chosen_mech
- << " from " << getPeerAddress(pkt->getPeerId()).serializeString()
- << " (wantSudo=" << wantSudo << "). Denying." << std::endl;
+ << "is going on with mech " << client->chosen_mech << " from "
+ << addr_s << " (wantSudo=" << wantSudo << "). Denying." << std::endl;
if (wantSudo) {
- DenySudoAccess(pkt->getPeerId());
+ DenySudoAccess(peer_id);
return;
}
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA);
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA);
return;
}
@@ -1750,10 +1686,9 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt)
if (srp_verifier_get_session_key_length((SRPVerifier *) client->auth_data)
!= bytes_M.size()) {
- actionstream << "Server: User " << client->getName()
- << " at " << getPeerAddress(pkt->getPeerId()).serializeString()
+ actionstream << "Server: User " << playername << " at " << addr_s
<< " sent bytes_M with invalid length " << bytes_M.size() << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_UNEXPECTED_DATA);
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_UNEXPECTED_DATA);
return;
}
@@ -1764,39 +1699,36 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt)
if (!bytes_HAMK) {
if (wantSudo) {
- actionstream << "Server: User " << client->getName()
- << " at " << getPeerAddress(pkt->getPeerId()).serializeString()
+ actionstream << "Server: User " << playername << " at " << addr_s
<< " tried to change their password, but supplied wrong"
<< " (SRP) password for authentication." << std::endl;
- DenySudoAccess(pkt->getPeerId());
+ DenySudoAccess(peer_id);
return;
}
- std::string ip = getPeerAddress(pkt->getPeerId()).serializeString();
- actionstream << "Server: User " << client->getName()
- << " at " << ip
- << " supplied wrong password (auth mechanism: SRP)."
- << std::endl;
- m_script->on_auth_failure(client->getName(), ip);
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_PASSWORD);
+ actionstream << "Server: User " << playername << " at " << addr_s
+ << " supplied wrong password (auth mechanism: SRP)." << std::endl;
+ m_script->on_authplayer(playername, addr_s, false);
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_WRONG_PASSWORD);
return;
}
if (client->create_player_on_auth_success) {
- std::string playername = client->getName();
m_script->createAuth(playername, client->enc_pwd);
std::string checkpwd; // not used, but needed for passing something
if (!m_script->getAuth(playername, &checkpwd, NULL)) {
- actionstream << "Server: " << playername << " cannot be authenticated"
- << " (auth handler does not work?)" << std::endl;
- DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SERVER_FAIL);
+ actionstream << "Server: " << playername <<
+ " cannot be authenticated (auth handler does not work?)" <<
+ std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_SERVER_FAIL);
return;
}
client->create_player_on_auth_success = false;
}
- acceptAuth(pkt->getPeerId(), wantSudo);
+ m_script->on_authplayer(playername, addr_s, true);
+ acceptAuth(peer_id, wantSudo);
}
/*
@@ -1808,20 +1740,21 @@ void Server::handleCommand_ModChannelJoin(NetworkPacket *pkt)
std::string channel_name;
*pkt >> channel_name;
- NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL, 1 + 2 + channel_name.size(),
- pkt->getPeerId());
+ session_t peer_id = pkt->getPeerId();
+ NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL,
+ 1 + 2 + channel_name.size(), peer_id);
// Send signal to client to notify join succeed or not
if (g_settings->getBool("enable_mod_channels") &&
- m_modchannel_mgr->joinChannel(channel_name, pkt->getPeerId())) {
+ m_modchannel_mgr->joinChannel(channel_name, peer_id)) {
resp_pkt << (u8) MODCHANNEL_SIGNAL_JOIN_OK;
- infostream << "Peer " << pkt->getPeerId() << " joined channel " << channel_name
- << std::endl;
+ infostream << "Peer " << peer_id << " joined channel " <<
+ channel_name << std::endl;
}
else {
resp_pkt << (u8)MODCHANNEL_SIGNAL_JOIN_FAILURE;
- infostream << "Peer " << pkt->getPeerId() << " tried to join channel "
- << channel_name << ", but was already registered." << std::endl;
+ infostream << "Peer " << peer_id << " tried to join channel " <<
+ channel_name << ", but was already registered." << std::endl;
}
resp_pkt << channel_name;
Send(&resp_pkt);
@@ -1832,19 +1765,20 @@ void Server::handleCommand_ModChannelLeave(NetworkPacket *pkt)
std::string channel_name;
*pkt >> channel_name;
- NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL, 1 + 2 + channel_name.size(),
- pkt->getPeerId());
+ session_t peer_id = pkt->getPeerId();
+ NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL,
+ 1 + 2 + channel_name.size(), peer_id);
// Send signal to client to notify join succeed or not
if (g_settings->getBool("enable_mod_channels") &&
- m_modchannel_mgr->leaveChannel(channel_name, pkt->getPeerId())) {
+ m_modchannel_mgr->leaveChannel(channel_name, peer_id)) {
resp_pkt << (u8)MODCHANNEL_SIGNAL_LEAVE_OK;
- infostream << "Peer " << pkt->getPeerId() << " left channel " << channel_name
- << std::endl;
+ infostream << "Peer " << peer_id << " left channel " << channel_name <<
+ std::endl;
} else {
resp_pkt << (u8) MODCHANNEL_SIGNAL_LEAVE_FAILURE;
- infostream << "Peer " << pkt->getPeerId() << " left channel " << channel_name
- << ", but was not registered." << std::endl;
+ infostream << "Peer " << peer_id << " left channel " << channel_name <<
+ ", but was not registered." << std::endl;
}
resp_pkt << channel_name;
Send(&resp_pkt);
@@ -1855,8 +1789,10 @@ void Server::handleCommand_ModChannelMsg(NetworkPacket *pkt)
std::string channel_name, channel_msg;
*pkt >> channel_name >> channel_msg;
- verbosestream << "Mod channel message received from peer " << pkt->getPeerId()
- << " on channel " << channel_name << " message: " << channel_msg << std::endl;
+ session_t peer_id = pkt->getPeerId();
+ verbosestream << "Mod channel message received from peer " << peer_id <<
+ " on channel " << channel_name << " message: " << channel_msg <<
+ std::endl;
// If mod channels are not enabled, discard message
if (!g_settings->getBool("enable_mod_channels")) {
@@ -1865,8 +1801,8 @@ void Server::handleCommand_ModChannelMsg(NetworkPacket *pkt)
// If channel not registered, signal it and ignore message
if (!m_modchannel_mgr->channelRegistered(channel_name)) {
- NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL, 1 + 2 + channel_name.size(),
- pkt->getPeerId());
+ NetworkPacket resp_pkt(TOCLIENT_MODCHANNEL_SIGNAL,
+ 1 + 2 + channel_name.size(), peer_id);
resp_pkt << (u8)MODCHANNEL_SIGNAL_CHANNEL_NOT_REGISTERED << channel_name;
Send(&resp_pkt);
return;
@@ -1874,5 +1810,5 @@ void Server::handleCommand_ModChannelMsg(NetworkPacket *pkt)
// @TODO: filter, rate limit
- broadcastModChannelMessage(channel_name, channel_msg, pkt->getPeerId());
+ broadcastModChannelMessage(channel_name, channel_msg, peer_id);
}
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index 308cb7465..540ed6086 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -317,6 +317,18 @@ ContentFeatures::ContentFeatures()
reset();
}
+ContentFeatures::~ContentFeatures()
+{
+#ifndef SERVER
+ for (u16 j = 0; j < 6; j++) {
+ delete tiles[j].layers[0].frames;
+ delete tiles[j].layers[1].frames;
+ }
+ for (u16 j = 0; j < CF_SPECIAL_COUNT; j++)
+ delete special_tiles[j].layers[0].frames;
+#endif
+}
+
void ContentFeatures::reset()
{
/*
@@ -368,9 +380,12 @@ void ContentFeatures::reset()
floodable = false;
rightclickable = true;
leveled = 0;
+ leveled_max = LEVELED_MAX;
liquid_type = LIQUID_NONE;
liquid_alternative_flowing = "";
+ liquid_alternative_flowing_id = CONTENT_IGNORE;
liquid_alternative_source = "";
+ liquid_alternative_source_id = CONTENT_IGNORE;
liquid_viscosity = 0;
liquid_renewable = true;
liquid_range = LIQUID_LEVEL_MAX+1;
@@ -478,6 +493,7 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
writeU8(os, legacy_wallmounted);
os << serializeString(node_dig_prediction);
+ writeU8(os, leveled_max);
}
void ContentFeatures::correctAlpha(TileDef *tiles, int length)
@@ -586,6 +602,10 @@ void ContentFeatures::deSerialize(std::istream &is)
try {
node_dig_prediction = deSerializeString(is);
+ u8 tmp_leveled_max = readU8(is);
+ if (is.eof()) /* readU8 doesn't throw exceptions so we have to do this */
+ throw SerializationError("");
+ leveled_max = tmp_leveled_max;
} catch(SerializationError &e) {};
}
@@ -600,8 +620,9 @@ static void fillTileAttribs(ITextureSource *tsrc, TileLayer *layer,
layer->material_type = material_type;
bool has_scale = tiledef.scale > 0;
- if (((tsettings.autoscale_mode == AUTOSCALE_ENABLE) && !has_scale) ||
- (tsettings.autoscale_mode == AUTOSCALE_FORCE)) {
+ bool use_autoscale = tsettings.autoscale_mode == AUTOSCALE_FORCE ||
+ (tsettings.autoscale_mode == AUTOSCALE_ENABLE && !has_scale);
+ if (use_autoscale && layer->texture) {
auto texture_size = layer->texture->getOriginalSize();
float base_size = tsettings.node_texture_size;
float size = std::fmin(texture_size.Width, texture_size.Height);
@@ -653,7 +674,7 @@ static void fillTileAttribs(ITextureSource *tsrc, TileLayer *layer,
} else {
std::ostringstream os(std::ios::binary);
if (!layer->frames) {
- layer->frames = std::make_shared<std::vector<FrameSpec>>();
+ layer->frames = new std::vector<FrameSpec>();
}
layer->frames->resize(frame_count);
@@ -1320,60 +1341,35 @@ void NodeDefManager::updateAliases(IItemDefManager *idef)
}
}
-void NodeDefManager::applyTextureOverrides(const std::string &override_filepath)
+void NodeDefManager::applyTextureOverrides(const std::vector<TextureOverride> &overrides)
{
infostream << "NodeDefManager::applyTextureOverrides(): Applying "
- "overrides to textures from " << override_filepath << std::endl;
-
- std::ifstream infile(override_filepath.c_str());
- std::string line;
- int line_c = 0;
- while (std::getline(infile, line)) {
- line_c++;
- // Also trim '\r' on DOS-style files
- line = trim(line);
- if (line.empty())
- continue;
-
- std::vector<std::string> splitted = str_split(line, ' ');
- if (splitted.size() != 3) {
- errorstream << override_filepath
- << ":" << line_c << " Could not apply texture override \""
- << line << "\": Syntax error" << std::endl;
- continue;
- }
+ "overrides to textures" << std::endl;
+ for (const TextureOverride& texture_override : overrides) {
content_t id;
- if (!getId(splitted[0], id))
+ if (!getId(texture_override.id, id))
continue; // Ignore unknown node
ContentFeatures &nodedef = m_content_features[id];
- if (splitted[1] == "top")
- nodedef.tiledef[0].name = splitted[2];
- else if (splitted[1] == "bottom")
- nodedef.tiledef[1].name = splitted[2];
- else if (splitted[1] == "right")
- nodedef.tiledef[2].name = splitted[2];
- else if (splitted[1] == "left")
- nodedef.tiledef[3].name = splitted[2];
- else if (splitted[1] == "back")
- nodedef.tiledef[4].name = splitted[2];
- else if (splitted[1] == "front")
- nodedef.tiledef[5].name = splitted[2];
- else if (splitted[1] == "all" || splitted[1] == "*")
- for (TileDef &i : nodedef.tiledef)
- i.name = splitted[2];
- else if (splitted[1] == "sides")
- for (int i = 2; i < 6; i++)
- nodedef.tiledef[i].name = splitted[2];
- else {
- errorstream << override_filepath
- << ":" << line_c << " Could not apply texture override \""
- << line << "\": Unknown node side \""
- << splitted[1] << "\"" << std::endl;
- continue;
- }
+ if (texture_override.hasTarget(OverrideTarget::TOP))
+ nodedef.tiledef[0].name = texture_override.texture;
+
+ if (texture_override.hasTarget(OverrideTarget::BOTTOM))
+ nodedef.tiledef[1].name = texture_override.texture;
+
+ if (texture_override.hasTarget(OverrideTarget::RIGHT))
+ nodedef.tiledef[2].name = texture_override.texture;
+
+ if (texture_override.hasTarget(OverrideTarget::LEFT))
+ nodedef.tiledef[3].name = texture_override.texture;
+
+ if (texture_override.hasTarget(OverrideTarget::BACK))
+ nodedef.tiledef[4].name = texture_override.texture;
+
+ if (texture_override.hasTarget(OverrideTarget::FRONT))
+ nodedef.tiledef[5].name = texture_override.texture;
}
}
@@ -1474,11 +1470,15 @@ void NodeDefManager::deSerialize(std::istream &is)
m_content_features.resize((u32)(i) + 1);
m_content_features[i] = f;
addNameIdMapping(i, f.name);
- verbosestream << "deserialized " << f.name << std::endl;
+ TRACESTREAM(<< "NodeDef: deserialized " << f.name << std::endl);
getNodeBoxUnion(f.selection_box, f, &m_selection_box_union);
fixSelectionBoxIntUnion();
}
+
+ // Since liquid_alternative_flowing_id and liquid_alternative_source_id
+ // are not sent, resolve them client-side too.
+ resolveCrossrefs();
}
@@ -1539,15 +1539,28 @@ void NodeDefManager::resetNodeResolveState()
m_pending_resolve_callbacks.clear();
}
-void NodeDefManager::mapNodeboxConnections()
+static void removeDupes(std::vector<content_t> &list)
+{
+ std::sort(list.begin(), list.end());
+ auto new_end = std::unique(list.begin(), list.end());
+ list.erase(new_end, list.end());
+}
+
+void NodeDefManager::resolveCrossrefs()
{
for (ContentFeatures &f : m_content_features) {
+ if (f.liquid_type != LIQUID_NONE) {
+ f.liquid_alternative_flowing_id = getId(f.liquid_alternative_flowing);
+ f.liquid_alternative_source_id = getId(f.liquid_alternative_source);
+ continue;
+ }
if (f.drawtype != NDT_NODEBOX || f.node_box.type != NODEBOX_CONNECTED)
continue;
for (const std::string &name : f.connects_to) {
getIds(name, f.connects_to_ids);
}
+ removeDupes(f.connects_to_ids);
}
}
@@ -1613,6 +1626,18 @@ NodeResolver::~NodeResolver()
}
+void NodeResolver::cloneTo(NodeResolver *res) const
+{
+ FATAL_ERROR_IF(!m_resolve_done, "NodeResolver can only be cloned"
+ " after resolving has completed");
+ /* We don't actually do anything significant. Since the node resolving has
+ * already completed, the class that called us will already have the
+ * resolved IDs in its data structures (which it copies on its own) */
+ res->m_ndef = m_ndef;
+ res->m_resolve_done = true;
+}
+
+
void NodeResolver::nodeResolveInternal()
{
m_nodenames_idx = 0;
diff --git a/src/nodedef.h b/src/nodedef.h
index 1a12aae93..cf03abaae 100644
--- a/src/nodedef.h
+++ b/src/nodedef.h
@@ -33,6 +33,7 @@ class Client;
#include "itemgroup.h"
#include "sound.h" // SimpleSoundSpec
#include "constants.h" // BS
+#include "texture_override.h" // TextureOverride
#include "tileanimation.h"
// PROTOCOL_VERSION >= 37
@@ -325,8 +326,10 @@ struct ContentFeatures
std::vector<content_t> connects_to_ids;
// Post effect color, drawn when the camera is inside the node.
video::SColor post_effect_color;
- // Flowing liquid or snow, value = default level
+ // Flowing liquid or leveled nodebox, value = default level
u8 leveled;
+ // Maximum value for leveled nodes
+ u8 leveled_max;
// --- LIGHTING-RELATED ---
@@ -365,8 +368,10 @@ struct ContentFeatures
enum LiquidType liquid_type;
// If the content is liquid, this is the flowing version of the liquid.
std::string liquid_alternative_flowing;
+ content_t liquid_alternative_flowing_id;
// If the content is liquid, this is the source version of the liquid.
std::string liquid_alternative_source;
+ content_t liquid_alternative_source_id;
// Viscosity for fluid flow, ranging from 1 to 7, with
// 1 giving almost instantaneous propagation and 7 being
// the slowest possible
@@ -404,7 +409,7 @@ struct ContentFeatures
*/
ContentFeatures();
- ~ContentFeatures() = default;
+ ~ContentFeatures();
void reset();
void serialize(std::ostream &os, u16 protocol_version) const;
void deSerialize(std::istream &is);
@@ -425,7 +430,7 @@ struct ContentFeatures
}
bool sameLiquid(const ContentFeatures &f) const{
if(!isLiquid() || !f.isLiquid()) return false;
- return (liquid_alternative_flowing == f.liquid_alternative_flowing);
+ return (liquid_alternative_flowing_id == f.liquid_alternative_flowing_id);
}
int getGroup(const std::string &group) const
@@ -583,15 +588,12 @@ public:
void updateAliases(IItemDefManager *idef);
/*!
- * Reads the used texture pack's override.txt, and replaces the textures
- * of registered nodes with the ones specified there.
+ * Replaces the textures of registered nodes with the ones specified in
+ * the texturepack's override.txt file
*
- * Format of the input file: in each line
- * `node_name top|bottom|right|left|front|back|all|*|sides texture_name.png`
- *
- * @param override_filepath path to 'texturepack/override.txt'
+ * @param overrides the texture overrides
*/
- void applyTextureOverrides(const std::string &override_filepath);
+ void applyTextureOverrides(const std::vector<TextureOverride> &overrides);
/*!
* Only the client uses this. Loads textures and shaders required for
@@ -641,10 +643,11 @@ public:
void resetNodeResolveState();
/*!
- * Resolves the IDs to which connecting nodes connect from names.
+ * Resolves (caches the IDs) cross-references between nodes,
+ * like liquid alternatives.
* Must be called after node registration has finished!
*/
- void mapNodeboxConnections();
+ void resolveCrossrefs();
private:
/*!
@@ -741,6 +744,9 @@ public:
virtual ~NodeResolver();
virtual void resolveNodeNames() = 0;
+ // required because this class is used as mixin for ObjDef
+ void cloneTo(NodeResolver *res) const;
+
bool getIdFromNrBacklog(content_t *result_out,
const std::string &node_alt, content_t c_fallback,
bool error_on_fallback = true);
diff --git a/src/noise.cpp b/src/noise.cpp
index 9c91a6df4..5a1d989cb 100644
--- a/src/noise.cpp
+++ b/src/noise.cpp
@@ -46,11 +46,6 @@ typedef float (*Interp3dFxn)(
float v001, float v101, float v011, float v111,
float x, float y, float z);
-float cos_lookup[16] = {
- 1.0f, 0.9238f, 0.7071f, 0.3826f, .0f, -0.3826f, -0.7071f, -0.9238f,
- 1.0f, -0.9238f, -0.7071f, -0.3826f, .0f, 0.3826f, 0.7071f, 0.9238f
-};
-
FlagDesc flagdesc_noiseparams[] = {
{"defaults", NOISE_FLAG_DEFAULTS},
{"eased", NOISE_FLAG_EASED},
diff --git a/src/objdef.cpp b/src/objdef.cpp
index 08d6844fc..482544d37 100644
--- a/src/objdef.cpp
+++ b/src/objdef.cpp
@@ -182,3 +182,22 @@ bool ObjDefManager::decodeHandle(ObjDefHandle handle, u32 *index,
*uid = get_bits(handle, 24, 7);
return true;
}
+
+// Cloning
+
+void ObjDef::cloneTo(ObjDef *def) const
+{
+ def->index = index;
+ def->uid = uid;
+ def->handle = handle;
+ def->name = name;
+}
+
+void ObjDefManager::cloneTo(ObjDefManager *mgr) const
+{
+ mgr->m_ndef = m_ndef;
+ mgr->m_objects.reserve(m_objects.size());
+ for (const auto &obj : m_objects)
+ mgr->m_objects.push_back(obj->clone());
+ mgr->m_objtype = m_objtype;
+}
diff --git a/src/objdef.h b/src/objdef.h
index 9ab3df977..e40324a88 100644
--- a/src/objdef.h
+++ b/src/objdef.h
@@ -45,21 +45,36 @@ class ObjDef {
public:
virtual ~ObjDef() = default;
+ // Only implemented by child classes (leafs in class hierarchy)
+ // Should create new object of its own type, call cloneTo() of parent class
+ // and copy its own instance variables over
+ virtual ObjDef *clone() const = 0;
+
u32 index;
u32 uid;
ObjDefHandle handle;
std::string name;
+
+protected:
+ // Only implemented by classes that have children themselves
+ // by copying the defintion and changing that argument type (!!!)
+ // Should defer to parent class cloneTo() if applicable and then copy
+ // over its own properties
+ void cloneTo(ObjDef *def) const;
};
// WARNING: Ownership of ObjDefs is transferred to the ObjDefManager it is
// added/set to. Note that ObjDefs managed by ObjDefManager are NOT refcounted,
// so the same ObjDef instance must not be referenced multiple
+// TODO: const correctness for getter methods
class ObjDefManager {
public:
ObjDefManager(IGameDef *gamedef, ObjDefType type);
virtual ~ObjDefManager();
DISABLE_CLASS_COPY(ObjDefManager);
+ // T *clone() const; // implemented in child class with correct type
+
virtual const char *getObjectTitle() const { return "ObjDef"; }
virtual void clear();
@@ -88,6 +103,10 @@ public:
ObjDefType *type, u32 *uid);
protected:
+ ObjDefManager() {};
+ // Helper for child classes to implement clone()
+ void cloneTo(ObjDefManager *mgr) const;
+
const NodeDefManager *m_ndef;
std::vector<ObjDef *> m_objects;
ObjDefType m_objtype;
diff --git a/src/object_properties.cpp b/src/object_properties.cpp
index 4cf180b18..8d51bcbfa 100644
--- a/src/object_properties.cpp
+++ b/src/object_properties.cpp
@@ -68,6 +68,8 @@ std::string ObjectProperties::dump()
os << ", eye_height=" << eye_height;
os << ", zoom_fov=" << zoom_fov;
os << ", use_texture_alpha=" << use_texture_alpha;
+ os << ", damage_texture_modifier=" << damage_texture_modifier;
+ os << ", shaded=" << shaded;
return os.str();
}
@@ -114,6 +116,8 @@ void ObjectProperties::serialize(std::ostream &os) const
writeF32(os, eye_height);
writeF32(os, zoom_fov);
writeU8(os, use_texture_alpha);
+ os << serializeString(damage_texture_modifier);
+ writeU8(os, shaded);
// Add stuff only at the bottom.
// Never remove anything, because we don't want new versions of this
@@ -166,4 +170,11 @@ void ObjectProperties::deSerialize(std::istream &is)
eye_height = readF32(is);
zoom_fov = readF32(is);
use_texture_alpha = readU8(is);
+ try {
+ damage_texture_modifier = deSerializeString(is);
+ u8 tmp = readU8(is);
+ if (is.eof())
+ throw SerializationError("");
+ shaded = tmp;
+ } catch (SerializationError &e) {}
}
diff --git a/src/object_properties.h b/src/object_properties.h
index 3895f3379..f010c1daf 100644
--- a/src/object_properties.h
+++ b/src/object_properties.h
@@ -39,6 +39,7 @@ struct ObjectProperties
std::string mesh = "";
v3f visual_size = v3f(1, 1, 1);
std::vector<std::string> textures;
+ std::string damage_texture_modifier = "^[brighten";
std::vector<video::SColor> colors;
v2s16 spritediv = v2s16(1, 1);
v2s16 initial_sprite_basepos;
@@ -60,6 +61,7 @@ struct ObjectProperties
float eye_height = 1.625f;
float zoom_fov = 0.0f;
bool use_texture_alpha = false;
+ bool shaded = true;
ObjectProperties();
std::string dump();
diff --git a/src/particles.cpp b/src/particles.cpp
new file mode 100644
index 000000000..fd81238dc
--- /dev/null
+++ b/src/particles.cpp
@@ -0,0 +1,63 @@
+/*
+Minetest
+Copyright (C) 2020 sfan5 <sfan5@live.de>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "particles.h"
+#include "util/serialize.h"
+
+void ParticleParameters::serialize(std::ostream &os, u16 protocol_ver) const
+{
+ writeV3F32(os, pos);
+ writeV3F32(os, vel);
+ writeV3F32(os, acc);
+ writeF32(os, expirationtime);
+ writeF32(os, size);
+ writeU8(os, collisiondetection);
+ os << serializeLongString(texture);
+ writeU8(os, vertical);
+ writeU8(os, collision_removal);
+ animation.serialize(os, 6); /* NOT the protocol ver */
+ writeU8(os, glow);
+ writeU8(os, object_collision);
+ writeU16(os, node.param0);
+ writeU8(os, node.param2);
+ writeU8(os, node_tile);
+}
+
+void ParticleParameters::deSerialize(std::istream &is, u16 protocol_ver)
+{
+ pos = readV3F32(is);
+ vel = readV3F32(is);
+ acc = readV3F32(is);
+ expirationtime = readF32(is);
+ size = readF32(is);
+ collisiondetection = readU8(is);
+ texture = deSerializeLongString(is);
+ vertical = readU8(is);
+ collision_removal = readU8(is);
+ animation.deSerialize(is, 6); /* NOT the protocol ver */
+ glow = readU8(is);
+ object_collision = readU8(is);
+ // This is kinda awful
+ u16 tmp_param0 = readU16(is);
+ if (is.eof())
+ return;
+ node.param0 = tmp_param0;
+ node.param2 = readU8(is);
+ node_tile = readU8(is);
+}
diff --git a/src/particles.h b/src/particles.h
new file mode 100644
index 000000000..6f518b771
--- /dev/null
+++ b/src/particles.h
@@ -0,0 +1,79 @@
+/*
+Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#pragma once
+
+#include <string>
+#include "irrlichttypes_bloated.h"
+#include "tileanimation.h"
+#include "mapnode.h"
+
+// This file defines the particle-related structures that both the server and
+// client need. The ParticleManager and rendering is in client/particles.h
+
+struct CommonParticleParams {
+ bool collisiondetection = false;
+ bool collision_removal = false;
+ bool object_collision = false;
+ bool vertical = false;
+ std::string texture;
+ struct TileAnimationParams animation;
+ u8 glow = 0;
+ MapNode node;
+ u8 node_tile = 0;
+
+ CommonParticleParams() {
+ animation.type = TAT_NONE;
+ node.setContent(CONTENT_IGNORE);
+ }
+
+ /* This helper is useful for copying params from
+ * ParticleSpawnerParameters to ParticleParameters */
+ inline void copyCommon(CommonParticleParams &to) const {
+ to.collisiondetection = collisiondetection;
+ to.collision_removal = collision_removal;
+ to.object_collision = object_collision;
+ to.vertical = vertical;
+ to.texture = texture;
+ to.animation = animation;
+ to.glow = glow;
+ to.node = node;
+ to.node_tile = node_tile;
+ }
+};
+
+struct ParticleParameters : CommonParticleParams {
+ v3f pos;
+ v3f vel;
+ v3f acc;
+ f32 expirationtime = 1;
+ f32 size = 1;
+
+ void serialize(std::ostream &os, u16 protocol_ver) const;
+ void deSerialize(std::istream &is, u16 protocol_ver);
+};
+
+struct ParticleSpawnerParameters : CommonParticleParams {
+ u16 amount = 1;
+ v3f minpos, maxpos, minvel, maxvel, minacc, maxacc;
+ f32 time = 1;
+ f32 minexptime = 1, maxexptime = 1, minsize = 1, maxsize = 1;
+
+ // For historical reasons no (de-)serialization methods here
+};
diff --git a/src/pathfinder.cpp b/src/pathfinder.cpp
index 8195bd643..3f0b98c10 100644
--- a/src/pathfinder.cpp
+++ b/src/pathfinder.cpp
@@ -23,8 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/******************************************************************************/
#include "pathfinder.h"
-#include "serverenvironment.h"
-#include "server.h"
+#include "map.h"
#include "nodedef.h"
//#define PATHFINDER_DEBUG
@@ -180,10 +179,8 @@ private:
class Pathfinder {
public:
- /**
- * default constructor
- */
- Pathfinder() = default;
+ Pathfinder() = delete;
+ Pathfinder(Map *map, const NodeDefManager *ndef) : m_map(map), m_ndef(ndef) {}
~Pathfinder();
@@ -197,8 +194,7 @@ public:
* @param max_drop maximum number of blocks a path may drop
* @param algo Algorithm to use for finding a path
*/
- std::vector<v3s16> getPath(ServerEnvironment *env,
- v3s16 source,
+ std::vector<v3s16> getPath(v3s16 source,
v3s16 destination,
unsigned int searchdistance,
unsigned int max_jump,
@@ -328,7 +324,9 @@ private:
friend class GridNodeContainer;
GridNodeContainer *m_nodes_container = nullptr;
- ServerEnvironment *m_env = 0; /**< minetest environment pointer */
+ Map *m_map = nullptr;
+
+ const NodeDefManager *m_ndef = nullptr;
friend class PathfinderCompareHeuristic;
@@ -410,18 +408,15 @@ class PathfinderCompareHeuristic
/* implementation */
/******************************************************************************/
-std::vector<v3s16> get_path(ServerEnvironment* env,
- v3s16 source,
- v3s16 destination,
- unsigned int searchdistance,
- unsigned int max_jump,
- unsigned int max_drop,
- PathAlgorithm algo)
+std::vector<v3s16> get_path(Map* map, const NodeDefManager *ndef,
+ v3s16 source,
+ v3s16 destination,
+ unsigned int searchdistance,
+ unsigned int max_jump,
+ unsigned int max_drop,
+ PathAlgorithm algo)
{
- Pathfinder searchclass;
-
- return searchclass.getPath(env,
- source, destination,
+ return Pathfinder(map, ndef).getPath(source, destination,
searchdistance, max_jump, max_drop, algo);
}
@@ -521,13 +516,13 @@ void PathGridnode::setCost(v3s16 dir, const PathCost &cost)
void GridNodeContainer::initNode(v3s16 ipos, PathGridnode *p_node)
{
- const NodeDefManager *ndef = m_pathf->m_env->getGameDef()->ndef();
+ const NodeDefManager *ndef = m_pathf->m_ndef;
PathGridnode &elem = *p_node;
v3s16 realpos = m_pathf->getRealPos(ipos);
- MapNode current = m_pathf->m_env->getMap().getNode(realpos);
- MapNode below = m_pathf->m_env->getMap().getNode(realpos + v3s16(0, -1, 0));
+ MapNode current = m_pathf->m_map->getNode(realpos);
+ MapNode below = m_pathf->m_map->getNode(realpos + v3s16(0, -1, 0));
if ((current.param0 == CONTENT_IGNORE) ||
@@ -610,8 +605,7 @@ PathGridnode &MapGridNodeContainer::access(v3s16 p)
/******************************************************************************/
-std::vector<v3s16> Pathfinder::getPath(ServerEnvironment *env,
- v3s16 source,
+std::vector<v3s16> Pathfinder::getPath(v3s16 source,
v3s16 destination,
unsigned int searchdistance,
unsigned int max_jump,
@@ -624,15 +618,8 @@ std::vector<v3s16> Pathfinder::getPath(ServerEnvironment *env,
#endif
std::vector<v3s16> retval;
- //check parameters
- if (env == 0) {
- ERROR_TARGET << "Missing environment pointer" << std::endl;
- return retval;
- }
-
//initialization
m_searchdistance = searchdistance;
- m_env = env;
m_maxjump = max_jump;
m_maxdrop = max_drop;
m_start = source;
@@ -681,15 +668,14 @@ std::vector<v3s16> Pathfinder::getPath(ServerEnvironment *env,
#endif
//fail if source or destination is walkable
- const NodeDefManager *ndef = m_env->getGameDef()->ndef();
- MapNode node_at_pos = m_env->getMap().getNode(destination);
- if (ndef->get(node_at_pos).walkable) {
+ MapNode node_at_pos = m_map->getNode(destination);
+ if (m_ndef->get(node_at_pos).walkable) {
VERBOSE_TARGET << "Destination is walkable. " <<
"Pos: " << PP(destination) << std::endl;
return retval;
}
- node_at_pos = m_env->getMap().getNode(source);
- if (ndef->get(node_at_pos).walkable) {
+ node_at_pos = m_map->getNode(source);
+ if (m_ndef->get(node_at_pos).walkable) {
VERBOSE_TARGET << "Source is walkable. " <<
"Pos: " << PP(source) << std::endl;
return retval;
@@ -843,7 +829,6 @@ v3s16 Pathfinder::getRealPos(v3s16 ipos)
/******************************************************************************/
PathCost Pathfinder::calcCost(v3s16 pos, v3s16 dir)
{
- const NodeDefManager *ndef = m_env->getGameDef()->ndef();
PathCost retval;
retval.updated = true;
@@ -857,7 +842,7 @@ PathCost Pathfinder::calcCost(v3s16 pos, v3s16 dir)
return retval;
}
- MapNode node_at_pos2 = m_env->getMap().getNode(pos2);
+ MapNode node_at_pos2 = m_map->getNode(pos2);
//did we get information about node?
if (node_at_pos2.param0 == CONTENT_IGNORE ) {
@@ -866,9 +851,9 @@ PathCost Pathfinder::calcCost(v3s16 pos, v3s16 dir)
return retval;
}
- if (!ndef->get(node_at_pos2).walkable) {
+ if (!m_ndef->get(node_at_pos2).walkable) {
MapNode node_below_pos2 =
- m_env->getMap().getNode(pos2 + v3s16(0, -1, 0));
+ m_map->getNode(pos2 + v3s16(0, -1, 0));
//did we get information about node?
if (node_below_pos2.param0 == CONTENT_IGNORE ) {
@@ -878,7 +863,7 @@ PathCost Pathfinder::calcCost(v3s16 pos, v3s16 dir)
}
//test if the same-height neighbor is suitable
- if (ndef->get(node_below_pos2).walkable) {
+ if (m_ndef->get(node_below_pos2).walkable) {
//SUCCESS!
retval.valid = true;
retval.value = 1;
@@ -889,19 +874,19 @@ PathCost Pathfinder::calcCost(v3s16 pos, v3s16 dir)
else {
//test if we can fall a couple of nodes (m_maxdrop)
v3s16 testpos = pos2 + v3s16(0, -1, 0);
- MapNode node_at_pos = m_env->getMap().getNode(testpos);
+ MapNode node_at_pos = m_map->getNode(testpos);
while ((node_at_pos.param0 != CONTENT_IGNORE) &&
- (!ndef->get(node_at_pos).walkable) &&
+ (!m_ndef->get(node_at_pos).walkable) &&
(testpos.Y > m_limits.MinEdge.Y)) {
testpos += v3s16(0, -1, 0);
- node_at_pos = m_env->getMap().getNode(testpos);
+ node_at_pos = m_map->getNode(testpos);
}
//did we find surface?
if ((testpos.Y >= m_limits.MinEdge.Y) &&
(node_at_pos.param0 != CONTENT_IGNORE) &&
- (ndef->get(node_at_pos).walkable)) {
+ (m_ndef->get(node_at_pos).walkable)) {
if ((pos2.Y - testpos.Y - 1) <= m_maxdrop) {
//SUCCESS!
retval.valid = true;
@@ -927,34 +912,34 @@ PathCost Pathfinder::calcCost(v3s16 pos, v3s16 dir)
v3s16 targetpos = pos2; // position for jump target
v3s16 jumppos = pos; // position for checking if jumping space is free
- MapNode node_target = m_env->getMap().getNode(targetpos);
- MapNode node_jump = m_env->getMap().getNode(jumppos);
+ MapNode node_target = m_map->getNode(targetpos);
+ MapNode node_jump = m_map->getNode(jumppos);
bool headbanger = false; // true if anything blocks jumppath
while ((node_target.param0 != CONTENT_IGNORE) &&
- (ndef->get(node_target).walkable) &&
+ (m_ndef->get(node_target).walkable) &&
(targetpos.Y < m_limits.MaxEdge.Y)) {
//if the jump would hit any solid node, discard
if ((node_jump.param0 == CONTENT_IGNORE) ||
- (ndef->get(node_jump).walkable)) {
+ (m_ndef->get(node_jump).walkable)) {
headbanger = true;
break;
}
targetpos += v3s16(0, 1, 0);
jumppos += v3s16(0, 1, 0);
- node_target = m_env->getMap().getNode(targetpos);
- node_jump = m_env->getMap().getNode(jumppos);
+ node_target = m_map->getNode(targetpos);
+ node_jump = m_map->getNode(jumppos);
}
//check headbanger one last time
if ((node_jump.param0 == CONTENT_IGNORE) ||
- (ndef->get(node_jump).walkable)) {
+ (m_ndef->get(node_jump).walkable)) {
headbanger = true;
}
//did we find surface without banging our head?
if ((!headbanger) && (targetpos.Y <= m_limits.MaxEdge.Y) &&
- (!ndef->get(node_target).walkable)) {
+ (!m_ndef->get(node_target).walkable)) {
if (targetpos.Y - pos2.Y <= m_maxjump) {
//SUCCESS!
@@ -1254,21 +1239,20 @@ v3s16 Pathfinder::walkDownwards(v3s16 pos, unsigned int max_down) {
if (max_down == 0)
return pos;
v3s16 testpos = v3s16(pos);
- MapNode node_at_pos = m_env->getMap().getNode(testpos);
- const NodeDefManager *ndef = m_env->getGameDef()->ndef();
+ MapNode node_at_pos = m_map->getNode(testpos);
unsigned int down = 0;
while ((node_at_pos.param0 != CONTENT_IGNORE) &&
- (!ndef->get(node_at_pos).walkable) &&
+ (!m_ndef->get(node_at_pos).walkable) &&
(testpos.Y > m_limits.MinEdge.Y) &&
(down <= max_down)) {
testpos += v3s16(0, -1, 0);
down++;
- node_at_pos = m_env->getMap().getNode(testpos);
+ node_at_pos = m_map->getNode(testpos);
}
//did we find surface?
if ((testpos.Y >= m_limits.MinEdge.Y) &&
(node_at_pos.param0 != CONTENT_IGNORE) &&
- (ndef->get(node_at_pos).walkable)) {
+ (m_ndef->get(node_at_pos).walkable)) {
if (down == 0) {
pos = testpos;
} else if ((down - 1) <= max_down) {
diff --git a/src/pathfinder.h b/src/pathfinder.h
index 70f3d6bbc..526aa0ee8 100644
--- a/src/pathfinder.h
+++ b/src/pathfinder.h
@@ -29,7 +29,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/* Forward declarations */
/******************************************************************************/
-class ServerEnvironment;
+class NodeDefManager;
+class Map;
/******************************************************************************/
/* Typedefs and macros */
@@ -54,10 +55,10 @@ typedef enum {
/******************************************************************************/
/** c wrapper function to use from scriptapi */
-std::vector<v3s16> get_path(ServerEnvironment *env,
- v3s16 source,
- v3s16 destination,
- unsigned int searchdistance,
- unsigned int max_jump,
- unsigned int max_drop,
- PathAlgorithm algo);
+std::vector<v3s16> get_path(Map *map, const NodeDefManager *ndef,
+ v3s16 source,
+ v3s16 destination,
+ unsigned int searchdistance,
+ unsigned int max_jump,
+ unsigned int max_drop,
+ PathAlgorithm algo);
diff --git a/src/player.h b/src/player.h
index de7f427e9..3bc7762fa 100644
--- a/src/player.h
+++ b/src/player.h
@@ -35,7 +35,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
struct PlayerFovSpec
{
f32 fov;
+
+ // Whether to multiply the client's FOV or to override it
bool is_multiplier;
+
+ // The time to be take to trasition to the new FOV value.
+ // Transition is instantaneous if omitted. Omitted by default.
+ f32 transition_time;
};
struct PlayerControl
@@ -186,12 +192,12 @@ public:
void setFov(const PlayerFovSpec &spec)
{
- m_fov_spec = spec;
+ m_fov_override_spec = spec;
}
const PlayerFovSpec &getFov() const
{
- return m_fov_spec;
+ return m_fov_override_spec;
}
u32 keyPressed = 0;
@@ -208,7 +214,7 @@ protected:
char m_name[PLAYERNAME_SIZE];
v3f m_speed;
u16 m_wield_index = 0;
- PlayerFovSpec m_fov_spec = { 0.0f, false };
+ PlayerFovSpec m_fov_override_spec = { 0.0f, false, 0.0f };
std::vector<HudElement *> hud;
private:
diff --git a/src/porting.cpp b/src/porting.cpp
index 76fd592d6..d902d3737 100644
--- a/src/porting.cpp
+++ b/src/porting.cpp
@@ -28,27 +28,39 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
#include <sys/types.h>
#include <sys/sysctl.h>
+ extern char **environ;
#elif defined(_WIN32)
#include <windows.h>
#include <wincrypt.h>
#include <algorithm>
#include <shlwapi.h>
+ #include <shellapi.h>
#endif
#if !defined(_WIN32)
#include <unistd.h>
#include <sys/utsname.h>
+ #if !defined(__ANDROID__)
+ #include <spawn.h>
+ #endif
#endif
#if defined(__hpux)
#define _PSTAT64
#include <sys/pstat.h>
#endif
+#if defined(__ANDROID__)
+ #include "porting_android.h"
+#endif
+#if defined(__APPLE__)
+ // For _NSGetEnviron()
+ // Related: https://gitlab.haskell.org/ghc/ghc/issues/2458
+ #include <crt_externs.h>
+#endif
#include "config.h"
#include "debug.h"
#include "filesys.h"
#include "log.h"
#include "util/string.h"
-#include "settings.h"
#include <list>
#include <cstdarg>
#include <cstdio>
@@ -598,18 +610,18 @@ void initializePaths()
#if USE_GETTEXT
bool found_localedir = false;
# ifdef STATIC_LOCALEDIR
- if (STATIC_LOCALEDIR[0] && fs::PathExists(STATIC_LOCALEDIR)) {
+ /* STATIC_LOCALEDIR may be a generalized path such as /usr/share/locale that
+ * doesn't necessarily contain our locale files, so check data path first. */
+ path_locale = getDataPath("locale");
+ if (fs::PathExists(path_locale)) {
+ found_localedir = true;
+ infostream << "Using in-place locale directory " << path_locale
+ << " even though a static one was provided." << std::endl;
+ } else if (STATIC_LOCALEDIR[0] && fs::PathExists(STATIC_LOCALEDIR)) {
found_localedir = true;
path_locale = STATIC_LOCALEDIR;
- infostream << "Using locale directory " << STATIC_LOCALEDIR << std::endl;
- } else {
- path_locale = getDataPath("locale");
- if (fs::PathExists(path_locale)) {
- found_localedir = true;
- infostream << "Using in-place locale directory " << path_locale
- << " even though a static one was provided "
- << "(RUN_IN_PLACE or CUSTOM_LOCALEDIR)." << std::endl;
- }
+ infostream << "Using static locale directory " << STATIC_LOCALEDIR
+ << std::endl;
}
# else
path_locale = getDataPath("locale");
@@ -697,6 +709,29 @@ int mt_snprintf(char *buf, const size_t buf_size, const char *fmt, ...)
return c;
}
+bool openURL(const std::string &url)
+{
+ if ((url.substr(0, 7) != "http://" && url.substr(0, 8) != "https://") ||
+ url.find_first_of("\r\n") != std::string::npos) {
+ errorstream << "Invalid url: " << url << std::endl;
+ return false;
+ }
+
+#if defined(_WIN32)
+ return (intptr_t)ShellExecuteA(NULL, NULL, url.c_str(), NULL, NULL, SW_SHOWNORMAL) > 32;
+#elif defined(__ANDROID__)
+ openURLAndroid(url);
+ return true;
+#elif defined(__APPLE__)
+ const char *argv[] = {"open", url.c_str(), NULL};
+ return posix_spawnp(NULL, "open", NULL, NULL, (char**)argv,
+ (*_NSGetEnviron())) == 0;
+#else
+ const char *argv[] = {"xdg-open", url.c_str(), NULL};
+ return posix_spawnp(NULL, "xdg-open", NULL, NULL, (char**)argv, environ) == 0;
+#endif
+}
+
// Load performance counter frequency only once at startup
#ifdef _WIN32
diff --git a/src/porting.h b/src/porting.h
index 4d30a5970..f50f0a950 100644
--- a/src/porting.h
+++ b/src/porting.h
@@ -329,6 +329,9 @@ bool secure_rand_fill_buf(void *buf, size_t len);
void attachOrCreateConsole();
int mt_snprintf(char *buf, const size_t buf_size, const char *fmt, ...);
+
+bool openURL(const std::string &url);
+
} // namespace porting
#ifdef __ANDROID__
diff --git a/src/porting_android.cpp b/src/porting_android.cpp
index 7c74f7b5b..41b521ec2 100644
--- a/src/porting_android.cpp
+++ b/src/porting_android.cpp
@@ -47,8 +47,7 @@ void android_main(android_app *app)
Thread::setName("Main");
try {
- app_dummy();
- char *argv[] = {strdup(PROJECT_NAME), NULL};
+ char *argv[] = {strdup(PROJECT_NAME), nullptr};
main(ARRLEN(argv) - 1, argv);
free(argv[0]);
} catch (std::exception &e) {
@@ -64,96 +63,73 @@ void android_main(android_app *app)
exit(retval);
}
-/* handler for finished message box input */
-/* Intentionally NOT in namespace porting */
-/* TODO this doesn't work as expected, no idea why but there's a workaround */
-/* for it right now */
+/**
+ * Handler for finished message box input
+ * Intentionally NOT in namespace porting
+ * ToDo: this doesn't work as expected, there's a workaround for it right now
+ */
extern "C" {
- JNIEXPORT void JNICALL Java_net_minetest_MtNativeActivity_putMessageBoxResult(
- JNIEnv * env, jclass thiz, jstring text)
+ JNIEXPORT void JNICALL Java_net_minetest_minetest_GameActivity_putMessageBoxResult(
+ JNIEnv *env, jclass thiz, jstring text)
{
- errorstream << "Java_net_minetest_MtNativeActivity_putMessageBoxResult got: "
- << std::string((const char*)env->GetStringChars(text,0))
- << std::endl;
+ errorstream <<
+ "Java_net_minetest_minetest_GameActivity_putMessageBoxResult got: " <<
+ std::string((const char*) env->GetStringChars(text, nullptr)) << std::endl;
}
}
namespace porting {
-
-std::string path_storage = DIR_DELIM "sdcard" DIR_DELIM;
-
-android_app* app_global;
-JNIEnv* jnienv;
+android_app *app_global;
+JNIEnv *jnienv;
jclass nativeActivity;
-jclass findClass(std::string classname)
+jclass findClass(const std::string &classname)
{
- if (jnienv == 0) {
- return 0;
- }
+ if (jnienv == nullptr)
+ return nullptr;
jclass nativeactivity = jnienv->FindClass("android/app/NativeActivity");
- jmethodID getClassLoader =
- jnienv->GetMethodID(nativeactivity,"getClassLoader",
- "()Ljava/lang/ClassLoader;");
- jobject cls =
- jnienv->CallObjectMethod(app_global->activity->clazz, getClassLoader);
+ jmethodID getClassLoader = jnienv->GetMethodID(
+ nativeactivity, "getClassLoader", "()Ljava/lang/ClassLoader;");
+ jobject cls = jnienv->CallObjectMethod(
+ app_global->activity->clazz, getClassLoader);
jclass classLoader = jnienv->FindClass("java/lang/ClassLoader");
- jmethodID findClass =
- jnienv->GetMethodID(classLoader, "loadClass",
+ jmethodID findClass = jnienv->GetMethodID(classLoader, "loadClass",
"(Ljava/lang/String;)Ljava/lang/Class;");
- jstring strClassName =
- jnienv->NewStringUTF(classname.c_str());
+ jstring strClassName = jnienv->NewStringUTF(classname.c_str());
return (jclass) jnienv->CallObjectMethod(cls, findClass, strClassName);
}
-void copyAssets()
-{
- jmethodID assetcopy = jnienv->GetMethodID(nativeActivity,"copyAssets","()V");
-
- if (assetcopy == 0) {
- assert("porting::copyAssets unable to find copy assets method" == 0);
- }
-
- jnienv->CallVoidMethod(app_global->activity->clazz, assetcopy);
-}
-
void initAndroid()
{
- porting::jnienv = NULL;
+ porting::jnienv = nullptr;
JavaVM *jvm = app_global->activity->vm;
JavaVMAttachArgs lJavaVMAttachArgs;
lJavaVMAttachArgs.version = JNI_VERSION_1_6;
lJavaVMAttachArgs.name = PROJECT_NAME_C "NativeThread";
- lJavaVMAttachArgs.group = NULL;
-#ifdef NDEBUG
- // This is a ugly hack as arm v7a non debuggable builds crash without this
- // printf ... if someone finds out why please fix it!
- infostream << "Attaching native thread. " << std::endl;
-#endif
- if ( jvm->AttachCurrentThread(&porting::jnienv, &lJavaVMAttachArgs) == JNI_ERR) {
+ lJavaVMAttachArgs.group = nullptr;
+
+ if (jvm->AttachCurrentThread(&porting::jnienv, &lJavaVMAttachArgs) == JNI_ERR) {
errorstream << "Failed to attach native thread to jvm" << std::endl;
exit(-1);
}
- nativeActivity = findClass("net/minetest/minetest/MtNativeActivity");
- if (nativeActivity == 0) {
+ nativeActivity = findClass("net/minetest/minetest/GameActivity");
+ if (nativeActivity == nullptr)
errorstream <<
"porting::initAndroid unable to find java native activity class" <<
std::endl;
- }
#ifdef GPROF
- /* in the start-up code */
+ // in the start-up code
__android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME_C,
"Initializing GPROF profiler");
- monstartup("libminetest.so");
+ monstartup("libMinetest.so");
#endif
}
void cleanupAndroid()
{
-
#ifdef GPROF
errorstream << "Shutting down GPROF profiler" << std::endl;
setenv("CPUPROFILE", (path_user + DIR_DELIM + "gmon.out").c_str(), 1);
@@ -168,7 +144,7 @@ static std::string javaStringToUTF8(jstring js)
{
std::string str;
// Get string as a UTF-8 c-string
- const char *c_str = jnienv->GetStringUTFChars(js, NULL);
+ const char *c_str = jnienv->GetStringUTFChars(js, nullptr);
// Save it
str = c_str;
// And free the c-string
@@ -177,17 +153,15 @@ static std::string javaStringToUTF8(jstring js)
}
// Calls static method if obj is NULL
-static std::string getAndroidPath(jclass cls, jobject obj, jclass cls_File,
- jmethodID mt_getAbsPath, const char *getter)
+static std::string getAndroidPath(
+ jclass cls, jobject obj, jmethodID mt_getAbsPath, const char *getter)
{
// Get getter method
jmethodID mt_getter;
if (obj)
- mt_getter = jnienv->GetMethodID(cls, getter,
- "()Ljava/io/File;");
+ mt_getter = jnienv->GetMethodID(cls, getter, "()Ljava/io/File;");
else
- mt_getter = jnienv->GetStaticMethodID(cls, getter,
- "()Ljava/io/File;");
+ mt_getter = jnienv->GetStaticMethodID(cls, getter, "()Ljava/io/File;");
// Call getter
jobject ob_file;
@@ -197,8 +171,7 @@ static std::string getAndroidPath(jclass cls, jobject obj, jclass cls_File,
ob_file = jnienv->CallStaticObjectMethod(cls, mt_getter);
// Call getAbsolutePath
- jstring js_path = (jstring) jnienv->CallObjectMethod(ob_file,
- mt_getAbsPath);
+ auto js_path = (jstring) jnienv->CallObjectMethod(ob_file, mt_getAbsPath);
return javaStringToUTF8(js_path);
}
@@ -212,26 +185,24 @@ void initializePathsAndroid()
// Get getAbsolutePath method
jmethodID mt_getAbsPath = jnienv->GetMethodID(cls_File,
"getAbsolutePath", "()Ljava/lang/String;");
+ std::string path_storage = getAndroidPath(cls_Env, nullptr,
+ mt_getAbsPath, "getExternalStorageDirectory");
- path_cache = getAndroidPath(nativeActivity, app_global->activity->clazz,
- cls_File, mt_getAbsPath, "getCacheDir");
- path_storage = getAndroidPath(cls_Env, NULL, cls_File, mt_getAbsPath,
- "getExternalStorageDirectory");
path_user = path_storage + DIR_DELIM + PROJECT_NAME_C;
path_share = path_storage + DIR_DELIM + PROJECT_NAME_C;
-
+ path_cache = getAndroidPath(nativeActivity,
+ app_global->activity->clazz, mt_getAbsPath, "getCacheDir");
migrateCachePath();
}
-void showInputDialog(const std::string& acceptButton, const std::string& hint,
- const std::string& current, int editType)
+void showInputDialog(const std::string &acceptButton, const std::string &hint,
+ const std::string &current, int editType)
{
- jmethodID showdialog = jnienv->GetMethodID(nativeActivity,"showDialog",
+ jmethodID showdialog = jnienv->GetMethodID(nativeActivity, "showDialog",
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V");
- if (showdialog == 0) {
- assert("porting::showInputDialog unable to find java show dialog method" == 0);
- }
+ FATAL_ERROR_IF(showdialog == nullptr,
+ "porting::showInputDialog unable to find java show dialog method");
jstring jacceptButton = jnienv->NewStringUTF(acceptButton.c_str());
jstring jhint = jnienv->NewStringUTF(hint.c_str());
@@ -242,14 +213,25 @@ void showInputDialog(const std::string& acceptButton, const std::string& hint,
jacceptButton, jhint, jcurrent, jeditType);
}
+void openURLAndroid(const std::string &url)
+{
+ jmethodID url_open = jnienv->GetMethodID(nativeActivity, "openURL",
+ "(Ljava/lang/String;)V");
+
+ FATAL_ERROR_IF(url_open == nullptr,
+ "porting::openURLAndroid unable to find java openURL method");
+
+ jstring jurl = jnienv->NewStringUTF(url.c_str());
+ jnienv->CallVoidMethod(app_global->activity->clazz, url_open, jurl);
+}
+
int getInputDialogState()
{
jmethodID dialogstate = jnienv->GetMethodID(nativeActivity,
"getDialogState", "()I");
- if (dialogstate == 0) {
- assert("porting::getInputDialogState unable to find java dialog state method" == 0);
- }
+ FATAL_ERROR_IF(dialogstate == nullptr,
+ "porting::getInputDialogState unable to find java dialog state method");
return jnienv->CallIntMethod(app_global->activity->clazz, dialogstate);
}
@@ -259,14 +241,13 @@ std::string getInputDialogValue()
jmethodID dialogvalue = jnienv->GetMethodID(nativeActivity,
"getDialogValue", "()Ljava/lang/String;");
- if (dialogvalue == 0) {
- assert("porting::getInputDialogValue unable to find java dialog value method" == 0);
- }
+ FATAL_ERROR_IF(dialogvalue == nullptr,
+ "porting::getInputDialogValue unable to find java dialog value method");
jobject result = jnienv->CallObjectMethod(app_global->activity->clazz,
dialogvalue);
- const char* javachars = jnienv->GetStringUTFChars((jstring) result,0);
+ const char *javachars = jnienv->GetStringUTFChars((jstring) result, nullptr);
std::string text(javachars);
jnienv->ReleaseStringUTFChars((jstring) result, javachars);
@@ -280,12 +261,11 @@ float getDisplayDensity()
static float value = 0;
if (firstrun) {
- jmethodID getDensity = jnienv->GetMethodID(nativeActivity, "getDensity",
- "()F");
+ jmethodID getDensity = jnienv->GetMethodID(nativeActivity,
+ "getDensity", "()F");
- if (getDensity == 0) {
- assert("porting::getDisplayDensity unable to find java getDensity method" == 0);
- }
+ FATAL_ERROR_IF(getDensity == nullptr,
+ "porting::getDisplayDensity unable to find java getDensity method");
value = jnienv->CallFloatMethod(app_global->activity->clazz, getDensity);
firstrun = false;
@@ -302,9 +282,8 @@ v2u32 getDisplaySize()
jmethodID getDisplayWidth = jnienv->GetMethodID(nativeActivity,
"getDisplayWidth", "()I");
- if (getDisplayWidth == 0) {
- assert("porting::getDisplayWidth unable to find java getDisplayWidth method" == 0);
- }
+ FATAL_ERROR_IF(getDisplayWidth == nullptr,
+ "porting::getDisplayWidth unable to find java getDisplayWidth method");
retval.X = jnienv->CallIntMethod(app_global->activity->clazz,
getDisplayWidth);
@@ -312,9 +291,8 @@ v2u32 getDisplaySize()
jmethodID getDisplayHeight = jnienv->GetMethodID(nativeActivity,
"getDisplayHeight", "()I");
- if (getDisplayHeight == 0) {
- assert("porting::getDisplayHeight unable to find java getDisplayHeight method" == 0);
- }
+ FATAL_ERROR_IF(getDisplayHeight == nullptr,
+ "porting::getDisplayHeight unable to find java getDisplayHeight method");
retval.Y = jnienv->CallIntMethod(app_global->activity->clazz,
getDisplayHeight);
diff --git a/src/porting_android.h b/src/porting_android.h
index 0b3f2575e..6eb054041 100644
--- a/src/porting_android.h
+++ b/src/porting_android.h
@@ -30,16 +30,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
namespace porting {
-/** java app **/
+// java app
extern android_app *app_global;
-/** java <-> c++ interaction interface **/
+// java <-> c++ interaction interface
extern JNIEnv *jnienv;
-/**
- * do initialization required on android only
- */
+// do initialization required on android only
void initAndroid();
+
void cleanupAndroid();
/**
@@ -49,11 +48,6 @@ void cleanupAndroid();
void initializePathsAndroid();
/**
- * use java function to copy media from assets to external storage
- */
-void copyAssets();
-
-/**
* show text input dialog in java
* @param acceptButton text to display on accept button
* @param hint hint to show
@@ -61,8 +55,10 @@ void copyAssets();
* @param editType type of texfield
* (1==multiline text input; 2==single line text input; 3=password field)
*/
-void showInputDialog(const std::string& acceptButton,
- const std::string& hint, const std::string& current, int editType);
+void showInputDialog(const std::string &acceptButton,
+ const std::string &hint, const std::string &current, int editType);
+
+void openURLAndroid(const std::string &url);
/**
* WORKAROUND for not working callbacks from java -> c++
@@ -80,5 +76,4 @@ std::string getInputDialogValue();
float getDisplayDensity();
v2u32 getDisplaySize();
#endif
-
}
diff --git a/src/remoteplayer.cpp b/src/remoteplayer.cpp
index 1a8fec68c..bef60c792 100644
--- a/src/remoteplayer.cpp
+++ b/src/remoteplayer.cpp
@@ -20,13 +20,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "remoteplayer.h"
#include <json/json.h>
-#include "content_sao.h"
#include "filesys.h"
#include "gamedef.h"
#include "porting.h" // strlcpy
#include "server.h"
#include "settings.h"
#include "convert_json.h"
+#include "server/player_sao.h"
/*
RemotePlayer
@@ -74,9 +74,9 @@ RemotePlayer::RemotePlayer(const char *name, IItemDefManager *idef):
m_skybox_params.sky_color = sky_defaults.getSkyColorDefaults();
m_skybox_params.type = "regular";
m_skybox_params.clouds = true;
- m_skybox_params.sun_tint = video::SColor(255, 244, 125, 29);
- m_skybox_params.moon_tint = video::SColorf(0.5, 0.6, 0.8, 1).toSColor();
- m_skybox_params.tint_type = "default";
+ m_skybox_params.fog_sun_tint = video::SColor(255, 244, 125, 29);
+ m_skybox_params.fog_moon_tint = video::SColorf(0.5, 0.6, 0.8, 1).toSColor();
+ m_skybox_params.fog_tint_type = "default";
m_sun_params = sky_defaults.getSunDefaults();
m_moon_params = sky_defaults.getMoonDefaults();
diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp
index ccd74a18f..44b638ba7 100644
--- a/src/script/common/c_content.cpp
+++ b/src/script/common/c_content.cpp
@@ -21,7 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_types.h"
#include "nodedef.h"
#include "object_properties.h"
-#include "content_sao.h"
+#include "collision.h"
#include "cpp_api/s_node.h"
#include "lua_api/l_object.h"
#include "lua_api/l_item.h"
@@ -29,10 +29,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "server.h"
#include "log.h"
#include "tool.h"
-#include "serverobject.h"
#include "porting.h"
#include "mapgen/mg_schematic.h"
#include "noise.h"
+#include "server/player_sao.h"
#include "util/pointedthing.h"
#include "debug.h" // For FATAL_ERROR
#include <json/json.h>
@@ -103,7 +103,8 @@ void read_item_definition(lua_State* L, int index,
lua_pop(L, 1);
lua_getfield(L, index, "sounds");
- if(lua_istable(L, -1)){
+ if (!lua_isnil(L, -1)) {
+ luaL_checktype(L, -1, LUA_TTABLE);
lua_getfield(L, -1, "place");
read_soundspec(L, -1, def.sound_place);
lua_pop(L, 1);
@@ -163,7 +164,7 @@ void push_item_definition_full(lua_State *L, const ItemDefinition &i)
lua_setfield(L, -2, "usable");
lua_pushboolean(L, i.liquids_pointable);
lua_setfield(L, -2, "liquids_pointable");
- if (i.type == ITEM_TOOL) {
+ if (i.tool_capabilities) {
push_tool_capabilities(L, *i.tool_capabilities);
lua_setfield(L, -2, "tool_capabilities");
}
@@ -185,9 +186,11 @@ void read_object_properties(lua_State *L, int index,
{
if(index < 0)
index = lua_gettop(L) + 1 + index;
- if(!lua_istable(L, index))
+ if (lua_isnil(L, index))
return;
+ luaL_checktype(L, -1, LUA_TTABLE);
+
int hp_max = 0;
if (getintfield(L, -1, "hp_max", hp_max)) {
prop->hp_max = (u16)rangelim(hp_max, 0, U16_MAX);
@@ -326,6 +329,9 @@ void read_object_properties(lua_State *L, int index,
getfloatfield(L, -1, "zoom_fov", prop->zoom_fov);
getboolfield(L, -1, "use_texture_alpha", prop->use_texture_alpha);
+ getboolfield(L, -1, "shaded", prop->shaded);
+
+ getstringfield(L, -1, "damage_texture_modifier", prop->damage_texture_modifier);
}
/******************************************************************************/
@@ -353,7 +359,7 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
push_v3f(L, prop->visual_size);
lua_setfield(L, -2, "visual_size");
- lua_newtable(L);
+ lua_createtable(L, prop->textures.size(), 0);
u16 i = 1;
for (const std::string &texture : prop->textures) {
lua_pushlstring(L, texture.c_str(), texture.size());
@@ -361,7 +367,7 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
}
lua_setfield(L, -2, "textures");
- lua_newtable(L);
+ lua_createtable(L, prop->colors.size(), 0);
i = 1;
for (const video::SColor &color : prop->colors) {
push_ARGB8(L, color);
@@ -408,6 +414,10 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
lua_setfield(L, -2, "zoom_fov");
lua_pushboolean(L, prop->use_texture_alpha);
lua_setfield(L, -2, "use_texture_alpha");
+ lua_pushboolean(L, prop->shaded);
+ lua_setfield(L, -2, "shaded");
+ lua_pushlstring(L, prop->damage_texture_modifier.c_str(), prop->damage_texture_modifier.size());
+ lua_setfield(L, -2, "damage_texture_modifier");
}
/******************************************************************************/
@@ -689,6 +699,8 @@ ContentFeatures read_content_features(lua_State *L, int index)
f.liquid_range = getintfield_default(L, index,
"liquid_range", f.liquid_range);
f.leveled = getintfield_default(L, index, "leveled", f.leveled);
+ f.leveled_max = getintfield_default(L, index,
+ "leveled_max", f.leveled_max);
getboolfield(L, index, "liquid_renewable", f.liquid_renewable);
f.drowning = getintfield_default(L, index,
@@ -843,7 +855,7 @@ void push_content_features(lua_State *L, const ContentFeatures &c)
lua_pushnumber(L, c.connect_sides);
lua_setfield(L, -2, "connect_sides");
- lua_newtable(L);
+ lua_createtable(L, c.connects_to.size(), 0);
u16 i = 1;
for (const std::string &it : c.connects_to) {
lua_pushlstring(L, it.c_str(), it.size());
@@ -855,6 +867,8 @@ void push_content_features(lua_State *L, const ContentFeatures &c)
lua_setfield(L, -2, "post_effect_color");
lua_pushnumber(L, c.leveled);
lua_setfield(L, -2, "leveled");
+ lua_pushnumber(L, c.leveled_max);
+ lua_setfield(L, -2, "leveled_max");
lua_pushboolean(L, c.sunlight_propagates);
lua_setfield(L, -2, "sunlight_propagates");
lua_pushnumber(L, c.light_source);
@@ -966,7 +980,7 @@ void push_nodebox(lua_State *L, const NodeBox &box)
void push_box(lua_State *L, const std::vector<aabb3f> &box)
{
- lua_newtable(L);
+ lua_createtable(L, box.size(), 0);
u8 i = 1;
for (const aabb3f &it : box) {
push_aabb3f(L, it);
@@ -1030,20 +1044,22 @@ void read_soundspec(lua_State *L, int index, SimpleSoundSpec &spec)
{
if(index < 0)
index = lua_gettop(L) + 1 + index;
- if(lua_isnil(L, index)){
- } else if(lua_istable(L, index)){
+ if (lua_isnil(L, index))
+ return;
+
+ if (lua_istable(L, index)) {
getstringfield(L, index, "name", spec.name);
getfloatfield(L, index, "gain", spec.gain);
getfloatfield(L, index, "fade", spec.fade);
getfloatfield(L, index, "pitch", spec.pitch);
- } else if(lua_isstring(L, index)){
+ } else if (lua_isstring(L, index)) {
spec.name = lua_tostring(L, index);
}
}
void push_soundspec(lua_State *L, const SimpleSoundSpec &spec)
{
- lua_newtable(L);
+ lua_createtable(L, 0, 3);
lua_pushstring(L, spec.name.c_str());
lua_setfield(L, -2, "name");
lua_pushnumber(L, spec.gain);
@@ -1058,9 +1074,13 @@ void push_soundspec(lua_State *L, const SimpleSoundSpec &spec)
NodeBox read_nodebox(lua_State *L, int index)
{
NodeBox nodebox;
- if(lua_istable(L, -1)){
- nodebox.type = (NodeBoxType)getenumfield(L, index, "type",
- ScriptApiNode::es_NodeBoxType, NODEBOX_REGULAR);
+ if (lua_isnil(L, -1))
+ return nodebox;
+
+ luaL_checktype(L, -1, LUA_TTABLE);
+
+ nodebox.type = (NodeBoxType)getenumfield(L, index, "type",
+ ScriptApiNode::es_NodeBoxType, NODEBOX_REGULAR);
#define NODEBOXREAD(n, s){ \
lua_getfield(L, index, (s)); \
@@ -1070,30 +1090,30 @@ NodeBox read_nodebox(lua_State *L, int index)
}
#define NODEBOXREADVEC(n, s) \
- lua_getfield(L, index, (s)); \
- if (lua_istable(L, -1)) \
- (n) = read_aabb3f_vector(L, -1, BS); \
- lua_pop(L, 1);
+ lua_getfield(L, index, (s)); \
+ if (lua_istable(L, -1)) \
+ (n) = read_aabb3f_vector(L, -1, BS); \
+ lua_pop(L, 1);
+
+ NODEBOXREADVEC(nodebox.fixed, "fixed");
+ NODEBOXREAD(nodebox.wall_top, "wall_top");
+ NODEBOXREAD(nodebox.wall_bottom, "wall_bottom");
+ NODEBOXREAD(nodebox.wall_side, "wall_side");
+ NODEBOXREADVEC(nodebox.connect_top, "connect_top");
+ NODEBOXREADVEC(nodebox.connect_bottom, "connect_bottom");
+ NODEBOXREADVEC(nodebox.connect_front, "connect_front");
+ NODEBOXREADVEC(nodebox.connect_left, "connect_left");
+ NODEBOXREADVEC(nodebox.connect_back, "connect_back");
+ NODEBOXREADVEC(nodebox.connect_right, "connect_right");
+ NODEBOXREADVEC(nodebox.disconnected_top, "disconnected_top");
+ NODEBOXREADVEC(nodebox.disconnected_bottom, "disconnected_bottom");
+ NODEBOXREADVEC(nodebox.disconnected_front, "disconnected_front");
+ NODEBOXREADVEC(nodebox.disconnected_left, "disconnected_left");
+ NODEBOXREADVEC(nodebox.disconnected_back, "disconnected_back");
+ NODEBOXREADVEC(nodebox.disconnected_right, "disconnected_right");
+ NODEBOXREADVEC(nodebox.disconnected, "disconnected");
+ NODEBOXREADVEC(nodebox.disconnected_sides, "disconnected_sides");
- NODEBOXREADVEC(nodebox.fixed, "fixed");
- NODEBOXREAD(nodebox.wall_top, "wall_top");
- NODEBOXREAD(nodebox.wall_bottom, "wall_bottom");
- NODEBOXREAD(nodebox.wall_side, "wall_side");
- NODEBOXREADVEC(nodebox.connect_top, "connect_top");
- NODEBOXREADVEC(nodebox.connect_bottom, "connect_bottom");
- NODEBOXREADVEC(nodebox.connect_front, "connect_front");
- NODEBOXREADVEC(nodebox.connect_left, "connect_left");
- NODEBOXREADVEC(nodebox.connect_back, "connect_back");
- NODEBOXREADVEC(nodebox.connect_right, "connect_right");
- NODEBOXREADVEC(nodebox.disconnected_top, "disconnected_top");
- NODEBOXREADVEC(nodebox.disconnected_bottom, "disconnected_bottom");
- NODEBOXREADVEC(nodebox.disconnected_front, "disconnected_front");
- NODEBOXREADVEC(nodebox.disconnected_left, "disconnected_left");
- NODEBOXREADVEC(nodebox.disconnected_back, "disconnected_back");
- NODEBOXREADVEC(nodebox.disconnected_right, "disconnected_right");
- NODEBOXREADVEC(nodebox.disconnected, "disconnected");
- NODEBOXREADVEC(nodebox.disconnected_sides, "disconnected_sides");
- }
return nodebox;
}
@@ -1128,12 +1148,12 @@ MapNode readnode(lua_State *L, int index, const NodeDefManager *ndef)
/******************************************************************************/
void pushnode(lua_State *L, const MapNode &n, const NodeDefManager *ndef)
{
- lua_newtable(L);
+ lua_createtable(L, 0, 3);
lua_pushstring(L, ndef->get(n).name.c_str());
lua_setfield(L, -2, "name");
- lua_pushnumber(L, n.getParam1());
+ lua_pushinteger(L, n.getParam1());
lua_setfield(L, -2, "param1");
- lua_pushnumber(L, n.getParam2());
+ lua_pushinteger(L, n.getParam2());
lua_setfield(L, -2, "param2");
}
@@ -1166,7 +1186,7 @@ bool string_to_enum(const EnumString *spec, int &result,
{
const EnumString *esp = spec;
while(esp->str){
- if(str == std::string(esp->str)){
+ if (!strcmp(str.c_str(), esp->str)) {
result = esp->num;
return true;
}
@@ -1441,7 +1461,7 @@ ToolCapabilities read_tool_capabilities(
/******************************************************************************/
void push_dig_params(lua_State *L,const DigParams &params)
{
- lua_newtable(L);
+ lua_createtable(L, 0, 3);
setboolfield(L, -1, "diggable", params.diggable);
setfloatfield(L, -1, "time", params.time);
setintfield(L, -1, "wear", params.wear);
@@ -1450,7 +1470,7 @@ void push_dig_params(lua_State *L,const DigParams &params)
/******************************************************************************/
void push_hit_params(lua_State *L,const HitParams &params)
{
- lua_newtable(L);
+ lua_createtable(L, 0, 3);
setintfield(L, -1, "hp", params.hp);
setintfield(L, -1, "wear", params.wear);
}
@@ -1522,8 +1542,11 @@ void push_flags_string(lua_State *L, FlagDesc *flagdesc, u32 flags, u32 flagmask
/******************************************************************************/
void read_groups(lua_State *L, int index, ItemGroupList &result)
{
- if (!lua_istable(L,index))
+ if (lua_isnil(L, index))
return;
+
+ luaL_checktype(L, index, LUA_TTABLE);
+
result.clear();
lua_pushnil(L);
if (index < 0)
@@ -1543,9 +1566,9 @@ void read_groups(lua_State *L, int index, ItemGroupList &result)
/******************************************************************************/
void push_groups(lua_State *L, const ItemGroupList &groups)
{
- lua_newtable(L);
+ lua_createtable(L, 0, groups.size());
for (const auto &group : groups) {
- lua_pushnumber(L, group.second);
+ lua_pushinteger(L, group.second);
lua_setfield(L, -2, group.first.c_str());
}
}
@@ -1590,7 +1613,7 @@ void luaentity_get(lua_State *L, u16 id)
lua_getglobal(L, "core");
lua_getfield(L, -1, "luaentities");
luaL_checktype(L, -1, LUA_TTABLE);
- lua_pushnumber(L, id);
+ lua_pushinteger(L, id);
lua_gettable(L, -2);
lua_remove(L, -2); // Remove luaentities
lua_remove(L, -2); // Remove core
@@ -1674,10 +1697,10 @@ static bool push_json_value_helper(lua_State *L, const Json::Value &value,
lua_pushvalue(L, nullindex);
break;
case Json::intValue:
- lua_pushinteger(L, value.asInt());
+ lua_pushinteger(L, value.asLargestInt());
break;
case Json::uintValue:
- lua_pushinteger(L, value.asUInt());
+ lua_pushinteger(L, value.asLargestUInt());
break;
case Json::realValue:
lua_pushnumber(L, value.asDouble());
@@ -1692,7 +1715,7 @@ static bool push_json_value_helper(lua_State *L, const Json::Value &value,
lua_pushboolean(L, value.asInt());
break;
case Json::arrayValue:
- lua_newtable(L);
+ lua_createtable(L, value.size(), 0);
for (Json::Value::const_iterator it = value.begin();
it != value.end(); ++it) {
push_json_value_helper(L, *it, nullindex);
@@ -1700,10 +1723,10 @@ static bool push_json_value_helper(lua_State *L, const Json::Value &value,
}
break;
case Json::objectValue:
- lua_newtable(L);
+ lua_createtable(L, 0, value.size());
for (Json::Value::const_iterator it = value.begin();
it != value.end(); ++it) {
-#ifndef JSONCPP_STRING
+#if !defined(JSONCPP_STRING) && (JSONCPP_VERSION_MAJOR < 1 || JSONCPP_VERSION_MINOR < 9)
const char *str = it.memberName();
lua_pushstring(L, str ? str : "");
#else
@@ -1827,7 +1850,7 @@ void push_objectRef(lua_State *L, const u16 id)
lua_getglobal(L, "core");
lua_getfield(L, -1, "object_refs");
luaL_checktype(L, -1, LUA_TTABLE);
- lua_pushnumber(L, id);
+ lua_pushinteger(L, id);
lua_gettable(L, -2);
lua_remove(L, -2); // object_refs
lua_remove(L, -2); // core
@@ -1853,10 +1876,15 @@ void read_hud_element(lua_State *L, HudElement *elem)
elem->name = getstringfield_default(L, 2, "name", "");
elem->text = getstringfield_default(L, 2, "text", "");
elem->number = getintfield_default(L, 2, "number", 0);
- elem->item = getintfield_default(L, 2, "item", 0);
+ if (elem->type == HUD_ELEM_WAYPOINT)
+ // waypoints reuse the item field to store precision, item = precision + 1
+ elem->item = getintfield_default(L, 2, "precision", -1) + 1;
+ else
+ elem->item = getintfield_default(L, 2, "item", 0);
elem->dir = getintfield_default(L, 2, "direction", 0);
elem->z_index = MYMAX(S16_MIN, MYMIN(S16_MAX,
getintfield_default(L, 2, "z_index", 0)));
+ elem->text2 = getstringfield_default(L, 2, "text2", "");
// Deprecated, only for compatibility's sake
if (elem->dir == 0)
@@ -1925,6 +1953,9 @@ void push_hud_element(lua_State *L, HudElement *elem)
lua_pushnumber(L, elem->z_index);
lua_setfield(L, -2, "z_index");
+
+ lua_pushstring(L, elem->text2.c_str());
+ lua_setfield(L, -2, "text2");
}
HudElementStat read_hud_change(lua_State *L, HudElement *elem, void **value)
@@ -1986,6 +2017,66 @@ HudElementStat read_hud_change(lua_State *L, HudElement *elem, void **value)
elem->z_index = MYMAX(S16_MIN, MYMIN(S16_MAX, luaL_checknumber(L, 4)));
*value = &elem->z_index;
break;
+ case HUD_STAT_TEXT2:
+ elem->text2 = luaL_checkstring(L, 4);
+ *value = &elem->text2;
+ break;
}
return stat;
}
+
+/******************************************************************************/
+
+// Indices must match values in `enum CollisionType` exactly!!
+static const char *collision_type_str[] = {
+ "node",
+ "object",
+};
+
+// Indices must match values in `enum CollisionAxis` exactly!!
+static const char *collision_axis_str[] = {
+ "x",
+ "y",
+ "z",
+};
+
+void push_collision_move_result(lua_State *L, const collisionMoveResult &res)
+{
+ lua_createtable(L, 0, 4);
+
+ setboolfield(L, -1, "touching_ground", res.touching_ground);
+ setboolfield(L, -1, "collides", res.collides);
+ setboolfield(L, -1, "standing_on_object", res.standing_on_object);
+
+ /* collisions */
+ lua_createtable(L, res.collisions.size(), 0);
+ int i = 1;
+ for (const auto &c : res.collisions) {
+ lua_createtable(L, 0, 5);
+
+ lua_pushstring(L, collision_type_str[c.type]);
+ lua_setfield(L, -2, "type");
+
+ assert(c.axis != COLLISION_AXIS_NONE);
+ lua_pushstring(L, collision_axis_str[c.axis]);
+ lua_setfield(L, -2, "axis");
+
+ if (c.type == COLLISION_NODE) {
+ push_v3s16(L, c.node_p);
+ lua_setfield(L, -2, "node_pos");
+ } else if (c.type == COLLISION_OBJECT) {
+ push_objectRef(L, c.object->getId());
+ lua_setfield(L, -2, "object");
+ }
+
+ push_v3f(L, c.old_speed / BS);
+ lua_setfield(L, -2, "old_velocity");
+
+ push_v3f(L, c.new_speed / BS);
+ lua_setfield(L, -2, "new_velocity");
+
+ lua_rawseti(L, -2, i++);
+ }
+ lua_setfield(L, -2, "collisions");
+ /**/
+}
diff --git a/src/script/common/c_content.h b/src/script/common/c_content.h
index 9e755682f..8f32e58eb 100644
--- a/src/script/common/c_content.h
+++ b/src/script/common/c_content.h
@@ -63,7 +63,9 @@ struct EnumString;
struct NoiseParams;
class Schematic;
class ServerActiveObject;
+struct collisionMoveResult;
+extern struct EnumString es_TileAnimationType[];
ContentFeatures read_content_features (lua_State *L, int index);
void push_content_features (lua_State *L,
@@ -196,4 +198,4 @@ void push_hud_element (lua_State *L, HudElement *elem);
HudElementStat read_hud_change (lua_State *L, HudElement *elem, void **value);
-extern struct EnumString es_TileAnimationType[];
+void push_collision_move_result(lua_State *L, const collisionMoveResult &res);
diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp
index 3c2f75641..eb6ab5331 100644
--- a/src/script/common/c_converter.cpp
+++ b/src/script/common/c_converter.cpp
@@ -28,15 +28,15 @@ extern "C" {
#include "common/c_converter.h"
#include "common/c_internal.h"
#include "constants.h"
+#include <set>
#define CHECK_TYPE(index, name, type) { \
int t = lua_type(L, (index)); \
if (t != (type)) { \
- std::string traceback = script_get_backtrace(L); \
throw LuaError(std::string("Invalid ") + (name) + \
" (expected " + lua_typename(L, (type)) + \
- " got " + lua_typename(L, t) + ").\n" + traceback); \
+ " got " + lua_typename(L, t) + ")."); \
} \
}
#define CHECK_POS_COORD(name) CHECK_TYPE(-1, "position coordinate '" name "'", LUA_TNUMBER)
@@ -62,7 +62,7 @@ void push_float_string(lua_State *L, float value)
void push_v3f(lua_State *L, v3f p)
{
- lua_newtable(L);
+ lua_createtable(L, 0, 3);
lua_pushnumber(L, p.X);
lua_setfield(L, -2, "x");
lua_pushnumber(L, p.Y);
@@ -73,7 +73,7 @@ void push_v3f(lua_State *L, v3f p)
void push_v2f(lua_State *L, v2f p)
{
- lua_newtable(L);
+ lua_createtable(L, 0, 2);
lua_pushnumber(L, p.X);
lua_setfield(L, -2, "x");
lua_pushnumber(L, p.Y);
@@ -82,7 +82,7 @@ void push_v2f(lua_State *L, v2f p)
void push_v3_float_string(lua_State *L, v3f p)
{
- lua_newtable(L);
+ lua_createtable(L, 0, 3);
push_float_string(L, p.X);
lua_setfield(L, -2, "x");
push_float_string(L, p.Y);
@@ -93,7 +93,7 @@ void push_v3_float_string(lua_State *L, v3f p)
void push_v2_float_string(lua_State *L, v2f p)
{
- lua_newtable(L);
+ lua_createtable(L, 0, 2);
push_float_string(L, p.X);
lua_setfield(L, -2, "x");
push_float_string(L, p.Y);
@@ -115,19 +115,19 @@ v2s16 read_v2s16(lua_State *L, int index)
void push_v2s16(lua_State *L, v2s16 p)
{
- lua_newtable(L);
- lua_pushnumber(L, p.X);
+ lua_createtable(L, 0, 2);
+ lua_pushinteger(L, p.X);
lua_setfield(L, -2, "x");
- lua_pushnumber(L, p.Y);
+ lua_pushinteger(L, p.Y);
lua_setfield(L, -2, "y");
}
void push_v2s32(lua_State *L, v2s32 p)
{
- lua_newtable(L);
- lua_pushnumber(L, p.X);
+ lua_createtable(L, 0, 2);
+ lua_pushinteger(L, p.X);
lua_setfield(L, -2, "x");
- lua_pushnumber(L, p.Y);
+ lua_pushinteger(L, p.Y);
lua_setfield(L, -2, "y");
}
@@ -250,14 +250,14 @@ v3d check_v3d(lua_State *L, int index)
void push_ARGB8(lua_State *L, video::SColor color)
{
- lua_newtable(L);
- lua_pushnumber(L, color.getAlpha());
+ lua_createtable(L, 0, 4);
+ lua_pushinteger(L, color.getAlpha());
lua_setfield(L, -2, "a");
- lua_pushnumber(L, color.getRed());
+ lua_pushinteger(L, color.getRed());
lua_setfield(L, -2, "r");
- lua_pushnumber(L, color.getGreen());
+ lua_pushinteger(L, color.getGreen());
lua_setfield(L, -2, "g");
- lua_pushnumber(L, color.getBlue());
+ lua_pushinteger(L, color.getBlue());
lua_setfield(L, -2, "b");
}
@@ -274,12 +274,12 @@ v3f checkFloatPos(lua_State *L, int index)
void push_v3s16(lua_State *L, v3s16 p)
{
- lua_newtable(L);
- lua_pushnumber(L, p.X);
+ lua_createtable(L, 0, 3);
+ lua_pushinteger(L, p.X);
lua_setfield(L, -2, "x");
- lua_pushnumber(L, p.Y);
+ lua_pushinteger(L, p.Y);
lua_setfield(L, -2, "y");
- lua_pushnumber(L, p.Z);
+ lua_pushinteger(L, p.Z);
lua_setfield(L, -2, "z");
}
@@ -386,7 +386,7 @@ aabb3f read_aabb3f(lua_State *L, int index, f32 scale)
void push_aabb3f(lua_State *L, aabb3f box)
{
- lua_newtable(L);
+ lua_createtable(L, 6, 0);
lua_pushnumber(L, box.MinEdge.X);
lua_rawseti(L, -2, 1);
lua_pushnumber(L, box.MinEdge.Y);
@@ -457,12 +457,55 @@ size_t read_stringlist(lua_State *L, int index, std::vector<std::string> *result
Table field getters
*/
+#if defined(__MINGW32__) && !defined(__MINGW64__)
+/* MinGW 32-bit somehow crashes in the std::set destructor when this
+ * variable is thread-local, so just don't do that. */
+static std::set<u64> warned_msgs;
+#endif
+
+bool check_field_or_nil(lua_State *L, int index, int type, const char *fieldname)
+{
+#if !defined(__MINGW32__) || defined(__MINGW64__)
+ thread_local std::set<u64> warned_msgs;
+#endif
+
+ int t = lua_type(L, index);
+ if (t == LUA_TNIL)
+ return false;
+
+ if (t == type)
+ return true;
+
+ // Check coercion types
+ if (type == LUA_TNUMBER) {
+ if (lua_isnumber(L, index))
+ return true;
+ } else if (type == LUA_TSTRING) {
+ if (lua_isstring(L, index))
+ return true;
+ }
+
+ // Types mismatch. Log unique line.
+ std::string backtrace = std::string("Invalid field ") + fieldname +
+ " (expected " + lua_typename(L, type) +
+ " got " + lua_typename(L, t) + ").\n" + script_get_backtrace(L);
+
+ u64 hash = murmur_hash_64_ua(backtrace.data(), backtrace.length(), 0xBADBABE);
+ if (warned_msgs.find(hash) == warned_msgs.end()) {
+ errorstream << backtrace << std::endl;
+ warned_msgs.insert(hash);
+ }
+
+ return false;
+}
+
bool getstringfield(lua_State *L, int table,
const char *fieldname, std::string &result)
{
lua_getfield(L, table, fieldname);
bool got = false;
- if(lua_isstring(L, -1)){
+
+ if (check_field_or_nil(L, -1, LUA_TSTRING, fieldname)) {
size_t len = 0;
const char *ptr = lua_tolstring(L, -1, &len);
if (ptr) {
@@ -479,7 +522,8 @@ bool getfloatfield(lua_State *L, int table,
{
lua_getfield(L, table, fieldname);
bool got = false;
- if(lua_isnumber(L, -1)){
+
+ if (check_field_or_nil(L, -1, LUA_TNUMBER, fieldname)) {
result = lua_tonumber(L, -1);
got = true;
}
@@ -492,7 +536,8 @@ bool getboolfield(lua_State *L, int table,
{
lua_getfield(L, table, fieldname);
bool got = false;
- if(lua_isboolean(L, -1)){
+
+ if (check_field_or_nil(L, -1, LUA_TBOOLEAN, fieldname)){
result = lua_toboolean(L, -1);
got = true;
}
@@ -511,17 +556,6 @@ size_t getstringlistfield(lua_State *L, int table, const char *fieldname,
return num_strings_read;
}
-std::string checkstringfield(lua_State *L, int table,
- const char *fieldname)
-{
- lua_getfield(L, table, fieldname);
- CHECK_TYPE(-1, std::string("field \"") + fieldname + '"', LUA_TSTRING);
- size_t len;
- const char *s = lua_tolstring(L, -1, &len);
- lua_pop(L, 1);
- return std::string(s, len);
-}
-
std::string getstringfield_default(lua_State *L, int table,
const char *fieldname, const std::string &default_)
{
diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h
index 9620bf75a..a4a7079fd 100644
--- a/src/script/common/c_converter.h
+++ b/src/script/common/c_converter.h
@@ -45,13 +45,15 @@ float getfloatfield_default(lua_State *L, int table,
int getintfield_default(lua_State *L, int table,
const char *fieldname, int default_);
+bool check_field_or_nil(lua_State *L, int index, int type, const char *fieldname);
+
template<typename T>
bool getintfield(lua_State *L, int table,
const char *fieldname, T &result)
{
lua_getfield(L, table, fieldname);
bool got = false;
- if (lua_isnumber(L, -1)){
+ if (check_field_or_nil(L, -1, LUA_TNUMBER, fieldname)){
result = lua_tointeger(L, -1);
got = true;
}
@@ -87,8 +89,6 @@ bool getboolfield(lua_State *L, int table,
const char *fieldname, bool &result);
bool getfloatfield(lua_State *L, int table,
const char *fieldname, float &result);
-std::string checkstringfield(lua_State *L, int table,
- const char *fieldname);
void setstringfield(lua_State *L, int table,
const char *fieldname, const std::string &value);
diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp
index a7dcf9b5f..6df1f8b7b 100644
--- a/src/script/common/c_internal.cpp
+++ b/src/script/common/c_internal.cpp
@@ -47,7 +47,7 @@ int script_exception_wrapper(lua_State *L, lua_CFunction f)
/*
* Note that we can't get tracebacks for LUA_ERRMEM or LUA_ERRERR (without
* hacking Lua internals). For LUA_ERRMEM, this is because memory errors will
- * not execute the the error handler, and by the time lua_pcall returns the
+ * not execute the error handler, and by the time lua_pcall returns the
* execution stack will have already been unwound. For LUA_ERRERR, there was
* another error while trying to generate a backtrace from a LUA_ERRRUN. It is
* presumed there is an error with the internal Lua state and thus not possible
@@ -157,9 +157,9 @@ static void script_log(lua_State *L, const std::string &message,
void log_deprecated(lua_State *L, const std::string &message, int stack_depth)
{
- static bool configured = false;
- static bool do_log = false;
- static bool do_error = false;
+ static thread_local bool configured = false;
+ static thread_local bool do_log = false;
+ static thread_local bool do_error = false;
// Only read settings on first call
if (!configured) {
@@ -167,9 +167,10 @@ void log_deprecated(lua_State *L, const std::string &message, int stack_depth)
if (value == "log") {
do_log = true;
} else if (value == "error") {
- do_log = true;
+ do_log = true;
do_error = true;
}
+ configured = true;
}
if (do_log)
diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h
index d8cf3fe76..442546332 100644
--- a/src/script/common/c_internal.h
+++ b/src/script/common/c_internal.h
@@ -31,6 +31,7 @@ extern "C" {
#include <lauxlib.h>
}
+#include "config.h"
#include "common/c_types.h"
@@ -54,6 +55,15 @@ extern "C" {
#define CUSTOM_RIDX_CURRENT_MOD_NAME (CUSTOM_RIDX_BASE + 2)
#define CUSTOM_RIDX_BACKTRACE (CUSTOM_RIDX_BASE + 3)
+// Determine if CUSTOM_RIDX_SCRIPTAPI will hold a light or full userdata
+#if defined(__aarch64__) && USE_LUAJIT
+/* LuaJIT has a 47-bit limit for lightuserdata on this platform and we cannot
+ * assume that the ScriptApi class was allocated at a fitting address. */
+#define INDIRECT_SCRIPTAPI_RIDX 1
+#else
+#define INDIRECT_SCRIPTAPI_RIDX 0
+#endif
+
// Pushes the error handler onto the stack and returns its index
#define PUSH_ERROR_HANDLER(L) \
(lua_rawgeti((L), LUA_REGISTRYINDEX, CUSTOM_RIDX_BACKTRACE), lua_gettop((L)))
diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp
index c9a17f659..1d62d8b65 100644
--- a/src/script/cpp_api/s_base.cpp
+++ b/src/script/cpp_api/s_base.cpp
@@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cpp_api/s_security.h"
#include "lua_api/l_object.h"
#include "common/c_converter.h"
-#include "serverobject.h"
+#include "server/player_sao.h"
#include "filesys.h"
#include "content/mods.h"
#include "porting.h"
@@ -43,7 +43,6 @@ extern "C" {
#include <cstdio>
#include <cstdarg>
#include "script/common/c_content.h"
-#include "content_sao.h"
#include <sstream>
@@ -90,7 +89,11 @@ ScriptApiBase::ScriptApiBase(ScriptingType type):
luaL_openlibs(m_luastack);
// Make the ScriptApiBase* accessible to ModApiBase
+#if INDIRECT_SCRIPTAPI_RIDX
+ *(void **)(lua_newuserdata(m_luastack, sizeof(void *))) = this;
+#else
lua_pushlightuserdata(m_luastack, this);
+#endif
lua_rawseti(m_luastack, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI);
// Add and save an error handler
@@ -184,7 +187,9 @@ void ScriptApiBase::loadScript(const std::string &script_path)
}
ok = ok && !lua_pcall(L, 0, 0, error_handler);
if (!ok) {
- std::string error_msg = readParam<std::string>(L, -1);
+ const char *error_msg = lua_tostring(L, -1);
+ if (!error_msg)
+ error_msg = "(error object is not a string)";
lua_pop(L, 2); // Pop error message and error handler
throw ModError("Failed to load and run script from " +
script_path + ":\n" + error_msg);
@@ -216,7 +221,9 @@ void ScriptApiBase::loadModFromMemory(const std::string &mod_name)
if (ok)
ok = !lua_pcall(L, 0, 0, error_handler);
if (!ok) {
- std::string error_msg = luaL_checkstring(L, -1);
+ const char *error_msg = lua_tostring(L, -1);
+ if (!error_msg)
+ error_msg = "(error object is not a string)";
lua_pop(L, 2); // Pop error message and error handler
throw ModError("Failed to load and run mod \"" +
mod_name + "\":\n" + error_msg);
diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h
index c45bc2c61..e2ef1f874 100644
--- a/src/script/cpp_api/s_base.h
+++ b/src/script/cpp_api/s_base.h
@@ -141,8 +141,10 @@ protected:
Environment* getEnv() { return m_environment; }
void setEnv(Environment* env) { m_environment = env; }
+#ifndef SERVER
GUIEngine* getGuiEngine() { return m_guiengine; }
void setGuiEngine(GUIEngine* guiengine) { m_guiengine = guiengine; }
+#endif
void objectrefGetOrCreate(lua_State *L, ServerActiveObject *cobj);
@@ -164,6 +166,8 @@ private:
IGameDef *m_gamedef = nullptr;
Game *m_game = nullptr;
Environment *m_environment = nullptr;
+#ifndef SERVER
GUIEngine *m_guiengine = nullptr;
+#endif
ScriptingType m_type;
};
diff --git a/src/script/cpp_api/s_entity.cpp b/src/script/cpp_api/s_entity.cpp
index 26c7e8cd4..ea9320051 100644
--- a/src/script/cpp_api/s_entity.cpp
+++ b/src/script/cpp_api/s_entity.cpp
@@ -178,12 +178,11 @@ void ScriptApiEntity::luaentity_GetProperties(u16 id,
lua_pop(L, 1);
}
-void ScriptApiEntity::luaentity_Step(u16 id, float dtime)
+void ScriptApiEntity::luaentity_Step(u16 id, float dtime,
+ const collisionMoveResult *moveresult)
{
SCRIPTAPI_PRECHECKHEADER
- //infostream<<"scriptapi_luaentity_step: id="<<id<<std::endl;
-
int error_handler = PUSH_ERROR_HANDLER(L);
// Get core.luaentities[id]
@@ -199,9 +198,14 @@ void ScriptApiEntity::luaentity_Step(u16 id, float dtime)
luaL_checktype(L, -1, LUA_TFUNCTION);
lua_pushvalue(L, object); // self
lua_pushnumber(L, dtime); // dtime
+ /* moveresult */
+ if (moveresult)
+ push_collision_move_result(L, *moveresult);
+ else
+ lua_pushnil(L);
setOriginFromTable(object);
- PCALL_RES(lua_pcall(L, 2, 0, error_handler));
+ PCALL_RES(lua_pcall(L, 3, 0, error_handler));
lua_pop(L, 2); // Pop object and error handler
}
diff --git a/src/script/cpp_api/s_entity.h b/src/script/cpp_api/s_entity.h
index cc08c46e8..b5f7a6586 100644
--- a/src/script/cpp_api/s_entity.h
+++ b/src/script/cpp_api/s_entity.h
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
struct ObjectProperties;
struct ToolCapabilities;
+struct collisionMoveResult;
class ScriptApiEntity
: virtual public ScriptApiBase
@@ -36,7 +37,8 @@ public:
std::string luaentity_GetStaticdata(u16 id);
void luaentity_GetProperties(u16 id,
ServerActiveObject *self, ObjectProperties *prop);
- void luaentity_Step(u16 id, float dtime);
+ void luaentity_Step(u16 id, float dtime,
+ const collisionMoveResult *moveresult);
bool luaentity_Punch(u16 id,
ServerActiveObject *puncher, float time_from_last_punch,
const ToolCapabilities *toolcap, v3f dir, s16 damage);
diff --git a/src/script/cpp_api/s_env.cpp b/src/script/cpp_api/s_env.cpp
index ab3b5fe46..8da5debaa 100644
--- a/src/script/cpp_api/s_env.cpp
+++ b/src/script/cpp_api/s_env.cpp
@@ -86,7 +86,7 @@ void ScriptApiEnv::player_event(ServerActiveObject *player, const std::string &t
void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env)
{
SCRIPTAPI_PRECHECKHEADER
- verbosestream << "scriptapi_add_environment" << std::endl;
+ verbosestream << "ScriptApiEnv: Environment initialized" << std::endl;
setEnv(env);
/*
diff --git a/src/script/cpp_api/s_node.cpp b/src/script/cpp_api/s_node.cpp
index d93a4c3ad..e0f9bcd78 100644
--- a/src/script/cpp_api/s_node.cpp
+++ b/src/script/cpp_api/s_node.cpp
@@ -94,7 +94,7 @@ struct EnumString ScriptApiNode::es_NodeBoxType[] =
};
bool ScriptApiNode::node_on_punch(v3s16 p, MapNode node,
- ServerActiveObject *puncher, PointedThing pointed)
+ ServerActiveObject *puncher, const PointedThing &pointed)
{
SCRIPTAPI_PRECHECKHEADER
diff --git a/src/script/cpp_api/s_node.h b/src/script/cpp_api/s_node.h
index e7c0c01d1..81b44f0f0 100644
--- a/src/script/cpp_api/s_node.h
+++ b/src/script/cpp_api/s_node.h
@@ -36,7 +36,7 @@ public:
virtual ~ScriptApiNode() = default;
bool node_on_punch(v3s16 p, MapNode node,
- ServerActiveObject *puncher, PointedThing pointed);
+ ServerActiveObject *puncher, const PointedThing &pointed);
bool node_on_dig(v3s16 p, MapNode node,
ServerActiveObject *digger);
void node_on_construct(v3s16 p, MapNode node);
diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp
index df67ea00c..712120c61 100644
--- a/src/script/cpp_api/s_player.cpp
+++ b/src/script/cpp_api/s_player.cpp
@@ -147,7 +147,7 @@ bool ScriptApiPlayer::can_bypass_userlimit(const std::string &name, const std::s
return lua_toboolean(L, -1);
}
-void ScriptApiPlayer::on_joinplayer(ServerActiveObject *player)
+void ScriptApiPlayer::on_joinplayer(ServerActiveObject *player, s64 last_login)
{
SCRIPTAPI_PRECHECKHEADER
@@ -156,7 +156,11 @@ void ScriptApiPlayer::on_joinplayer(ServerActiveObject *player)
lua_getfield(L, -1, "registered_on_joinplayers");
// Call callbacks
objectrefGetOrCreate(L, player);
- runCallbacks(1, RUN_CALLBACKS_MODE_FIRST);
+ if (last_login != -1)
+ lua_pushinteger(L, last_login);
+ else
+ lua_pushnil(L);
+ runCallbacks(2, RUN_CALLBACKS_MODE_FIRST);
}
void ScriptApiPlayer::on_leaveplayer(ServerActiveObject *player,
@@ -216,16 +220,19 @@ void ScriptApiPlayer::on_playerReceiveFields(ServerActiveObject *player,
runCallbacks(3, RUN_CALLBACKS_MODE_OR_SC);
}
-void ScriptApiPlayer::on_auth_failure(const std::string &name, const std::string &ip)
+void ScriptApiPlayer::on_authplayer(const std::string &name, const std::string &ip, bool is_success)
{
SCRIPTAPI_PRECHECKHEADER
- // Get core.registered_on_auth_failure
+ // Get core.registered_on_authplayers
lua_getglobal(L, "core");
- lua_getfield(L, -1, "registered_on_auth_fail");
+ lua_getfield(L, -1, "registered_on_authplayers");
+
+ // Call callbacks
lua_pushstring(L, name.c_str());
lua_pushstring(L, ip.c_str());
- runCallbacks(2, RUN_CALLBACKS_MODE_FIRST);
+ lua_pushboolean(L, is_success);
+ runCallbacks(3, RUN_CALLBACKS_MODE_FIRST);
}
void ScriptApiPlayer::pushMoveArguments(
diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h
index cf24ddc73..a337f975b 100644
--- a/src/script/cpp_api/s_player.h
+++ b/src/script/cpp_api/s_player.h
@@ -28,6 +28,7 @@ struct InventoryLocation;
struct ItemStack;
struct ToolCapabilities;
struct PlayerHPChangeReason;
+class ServerActiveObject;
class ScriptApiPlayer : virtual public ScriptApiBase
{
@@ -40,7 +41,7 @@ public:
bool on_prejoinplayer(const std::string &name, const std::string &ip,
std::string *reason);
bool can_bypass_userlimit(const std::string &name, const std::string &ip);
- void on_joinplayer(ServerActiveObject *player);
+ void on_joinplayer(ServerActiveObject *player, s64 last_login);
void on_leaveplayer(ServerActiveObject *player, bool timeout);
void on_cheat(ServerActiveObject *player, const std::string &cheat_type);
bool on_punchplayer(ServerActiveObject *player, ServerActiveObject *hitter,
@@ -50,7 +51,7 @@ public:
const PlayerHPChangeReason &reason);
void on_playerReceiveFields(ServerActiveObject *player,
const std::string &formname, const StringMap &fields);
- void on_auth_failure(const std::string &name, const std::string &ip);
+ void on_authplayer(const std::string &name, const std::string &ip, bool is_success);
// Player inventory callbacks
// Return number of accepted items to be moved
diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp
index 3fe1edf97..d8ff667eb 100644
--- a/src/script/cpp_api/s_security.cpp
+++ b/src/script/cpp_api/s_security.cpp
@@ -498,7 +498,12 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path,
// Get server from registry
lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI);
- ScriptApiBase *script = (ScriptApiBase *) lua_touserdata(L, -1);
+ ScriptApiBase *script;
+#if INDIRECT_SCRIPTAPI_RIDX
+ script = (ScriptApiBase *) *(void**)(lua_touserdata(L, -1));
+#else
+ script = (ScriptApiBase *) lua_touserdata(L, -1);
+#endif
lua_pop(L, 1);
const IGameDef *gamedef = script->getGameDef();
if (!gamedef)
diff --git a/src/script/cpp_api/s_server.cpp b/src/script/cpp_api/s_server.cpp
index 1ce2f9d45..96cb28b28 100644
--- a/src/script/cpp_api/s_server.cpp
+++ b/src/script/cpp_api/s_server.cpp
@@ -23,7 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
bool ScriptApiServer::getAuth(const std::string &playername,
std::string *dst_password,
- std::set<std::string> *dst_privs)
+ std::set<std::string> *dst_privs,
+ s64 *dst_last_login)
{
SCRIPTAPI_PRECHECKHEADER
@@ -43,8 +44,7 @@ bool ScriptApiServer::getAuth(const std::string &playername,
luaL_checktype(L, -1, LUA_TTABLE);
std::string password;
- bool found = getstringfield(L, -1, "password", password);
- if (!found)
+ if (!getstringfield(L, -1, "password", password))
throw LuaError("Authentication handler didn't return password");
if (dst_password)
*dst_password = password;
@@ -54,7 +54,13 @@ bool ScriptApiServer::getAuth(const std::string &playername,
throw LuaError("Authentication handler didn't return privilege table");
if (dst_privs)
readPrivileges(-1, *dst_privs);
- lua_pop(L, 1);
+ lua_pop(L, 1); // Remove key from privs table
+
+ s64 last_login;
+ if(!getintfield(L, -1, "last_login", last_login))
+ throw LuaError("Authentication handler didn't return last_login");
+ if (dst_last_login)
+ *dst_last_login = (s64)last_login;
return true;
}
diff --git a/src/script/cpp_api/s_server.h b/src/script/cpp_api/s_server.h
index a4cede84d..d8639cba7 100644
--- a/src/script/cpp_api/s_server.h
+++ b/src/script/cpp_api/s_server.h
@@ -43,7 +43,8 @@ public:
/* auth */
bool getAuth(const std::string &playername,
std::string *dst_password,
- std::set<std::string> *dst_privs);
+ std::set<std::string> *dst_privs,
+ s64 *dst_last_login = nullptr);
void createAuth(const std::string &playername,
const std::string &password);
bool setPassword(const std::string &playername,
diff --git a/src/script/lua_api/l_base.cpp b/src/script/lua_api/l_base.cpp
index d507136bc..011434845 100644
--- a/src/script/lua_api/l_base.cpp
+++ b/src/script/lua_api/l_base.cpp
@@ -30,7 +30,12 @@ ScriptApiBase *ModApiBase::getScriptApiBase(lua_State *L)
{
// Get server from registry
lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI);
- ScriptApiBase *sapi_ptr = (ScriptApiBase*) lua_touserdata(L, -1);
+ ScriptApiBase *sapi_ptr;
+#if INDIRECT_SCRIPTAPI_RIDX
+ sapi_ptr = (ScriptApiBase*) *(void**)(lua_touserdata(L, -1));
+#else
+ sapi_ptr = (ScriptApiBase*) lua_touserdata(L, -1);
+#endif
lua_pop(L, 1);
return sapi_ptr;
}
@@ -40,6 +45,11 @@ Server *ModApiBase::getServer(lua_State *L)
return getScriptApiBase(L)->getServer();
}
+ServerInventoryManager *ModApiBase::getServerInventoryMgr(lua_State *L)
+{
+ return getScriptApiBase(L)->getServer()->getInventoryMgr();
+}
+
#ifndef SERVER
Client *ModApiBase::getClient(lua_State *L)
{
@@ -62,10 +72,12 @@ Environment *ModApiBase::getEnv(lua_State *L)
return getScriptApiBase(L)->getEnv();
}
+#ifndef SERVER
GUIEngine *ModApiBase::getGuiEngine(lua_State *L)
{
return getScriptApiBase(L)->getGuiEngine();
}
+#endif
std::string ModApiBase::getCurrentModPath(lua_State *L)
{
diff --git a/src/script/lua_api/l_base.h b/src/script/lua_api/l_base.h
index 6a8753004..0cbee7756 100644
--- a/src/script/lua_api/l_base.h
+++ b/src/script/lua_api/l_base.h
@@ -33,26 +33,29 @@ extern "C" {
#ifndef SERVER
class Client;
class Game;
+class GUIEngine;
#endif
class ScriptApiBase;
class Server;
class Environment;
-class GUIEngine;
+class ServerInventoryManager;
class ModApiBase : protected LuaHelper {
public:
static ScriptApiBase* getScriptApiBase(lua_State *L);
static Server* getServer(lua_State *L);
+ static ServerInventoryManager *getServerInventoryMgr(lua_State *L);
#ifndef SERVER
static Client* getClient(lua_State *L);
static Game* getGame(lua_State *L);
+ static GUIEngine* getGuiEngine(lua_State *L);
#endif // !SERVER
static IGameDef* getGameDef(lua_State *L);
static Environment* getEnv(lua_State *L);
- static GUIEngine* getGuiEngine(lua_State *L);
+
// When we are not loading the mod, this function returns "."
static std::string getCurrentModPath(lua_State *L);
diff --git a/src/script/lua_api/l_camera.cpp b/src/script/lua_api/l_camera.cpp
index 9c1470284..bfa60be67 100644
--- a/src/script/lua_api/l_camera.cpp
+++ b/src/script/lua_api/l_camera.cpp
@@ -51,6 +51,7 @@ void LuaCamera::create(lua_State *L, Camera *m)
lua_setfield(L, objectstable, "camera");
}
+// set_camera_mode(self, mode)
int LuaCamera::l_set_camera_mode(lua_State *L)
{
Camera *camera = getobject(L, 1);
@@ -67,17 +68,19 @@ int LuaCamera::l_set_camera_mode(lua_State *L)
return 0;
}
+// get_camera_mode(self)
int LuaCamera::l_get_camera_mode(lua_State *L)
{
Camera *camera = getobject(L, 1);
if (!camera)
return 0;
- lua_pushnumber(L, (int)camera->getCameraMode());
+ lua_pushinteger(L, (int)camera->getCameraMode());
return 1;
}
+// get_fov(self)
int LuaCamera::l_get_fov(lua_State *L)
{
Camera *camera = getobject(L, 1);
@@ -85,9 +88,9 @@ int LuaCamera::l_get_fov(lua_State *L)
return 0;
lua_newtable(L);
- lua_pushnumber(L, camera->getFovX() * core::DEGTORAD);
+ lua_pushnumber(L, camera->getFovX() * core::RADTODEG);
lua_setfield(L, -2, "x");
- lua_pushnumber(L, camera->getFovY() * core::DEGTORAD);
+ lua_pushnumber(L, camera->getFovY() * core::RADTODEG);
lua_setfield(L, -2, "y");
lua_pushnumber(L, camera->getCameraNode()->getFOV() * core::RADTODEG);
lua_setfield(L, -2, "actual");
@@ -96,16 +99,18 @@ int LuaCamera::l_get_fov(lua_State *L)
return 1;
}
+// get_pos(self)
int LuaCamera::l_get_pos(lua_State *L)
{
Camera *camera = getobject(L, 1);
if (!camera)
return 0;
- push_v3f(L, camera->getPosition());
+ push_v3f(L, camera->getPosition() / BS);
return 1;
}
+// get_offset(self)
int LuaCamera::l_get_offset(lua_State *L)
{
LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer();
@@ -115,38 +120,40 @@ int LuaCamera::l_get_offset(lua_State *L)
return 1;
}
+// get_look_dir(self)
int LuaCamera::l_get_look_dir(lua_State *L)
{
- LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer();
- sanity_check(player);
-
- float pitch = -1.0 * player->getPitch() * core::DEGTORAD;
- float yaw = (player->getYaw() + 90.) * core::DEGTORAD;
- v3f v(std::cos(pitch) * std::cos(yaw), std::sin(pitch),
- std::cos(pitch) * std::sin(yaw));
+ Camera *camera = getobject(L, 1);
+ if (!camera)
+ return 0;
- push_v3f(L, v);
+ push_v3f(L, camera->getDirection());
return 1;
}
+// get_look_horizontal(self)
+// FIXME: wouldn't localplayer be a better place for this?
int LuaCamera::l_get_look_horizontal(lua_State *L)
{
LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer();
sanity_check(player);
- lua_pushnumber(L, (player->getYaw() + 90.) * core::DEGTORAD);
+ lua_pushnumber(L, (player->getYaw() + 90.f) * core::DEGTORAD);
return 1;
}
+// get_look_vertical(self)
+// FIXME: wouldn't localplayer be a better place for this?
int LuaCamera::l_get_look_vertical(lua_State *L)
{
LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer();
sanity_check(player);
- lua_pushnumber(L, -1.0 * player->getPitch() * core::DEGTORAD);
+ lua_pushnumber(L, -1.0f * player->getPitch() * core::DEGTORAD);
return 1;
}
+// get_aspect_ratio(self)
int LuaCamera::l_get_aspect_ratio(lua_State *L)
{
Camera *camera = getobject(L, 1);
@@ -215,13 +222,19 @@ void LuaCamera::Register(lua_State *L)
lua_pop(L, 1);
}
+// clang-format off
const char LuaCamera::className[] = "Camera";
-const luaL_Reg LuaCamera::methods[] = {luamethod(LuaCamera, set_camera_mode),
- luamethod(LuaCamera, get_camera_mode), luamethod(LuaCamera, get_fov),
- luamethod(LuaCamera, get_pos), luamethod(LuaCamera, get_offset),
- luamethod(LuaCamera, get_look_dir),
- luamethod(LuaCamera, get_look_vertical),
- luamethod(LuaCamera, get_look_horizontal),
- luamethod(LuaCamera, get_aspect_ratio),
-
- {0, 0}};
+const luaL_Reg LuaCamera::methods[] = {
+ luamethod(LuaCamera, set_camera_mode),
+ luamethod(LuaCamera, get_camera_mode),
+ luamethod(LuaCamera, get_fov),
+ luamethod(LuaCamera, get_pos),
+ luamethod(LuaCamera, get_offset),
+ luamethod(LuaCamera, get_look_dir),
+ luamethod(LuaCamera, get_look_vertical),
+ luamethod(LuaCamera, get_look_horizontal),
+ luamethod(LuaCamera, get_aspect_ratio),
+
+ {0, 0}
+};
+// clang-format on
diff --git a/src/script/lua_api/l_client.cpp b/src/script/lua_api/l_client.cpp
index 1bd74b7c7..525518e5a 100644
--- a/src/script/lua_api/l_client.cpp
+++ b/src/script/lua_api/l_client.cpp
@@ -30,7 +30,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cpp_api/s_base.h"
#include "gettext.h"
#include "l_internal.h"
-#include "lua_api/l_item.h"
#include "lua_api/l_nodemeta.h"
#include "gui/mainmenumanager.h"
#include "map.h"
@@ -210,7 +209,7 @@ int ModApiClient::l_gettext(lua_State *L)
return 1;
}
-// get_node(pos)
+// get_node_or_nil(pos)
// pos = {x=num, y=num, z=num}
int ModApiClient::l_get_node_or_nil(lua_State *L)
{
@@ -229,6 +228,7 @@ int ModApiClient::l_get_node_or_nil(lua_State *L)
return 1;
}
+// get_langauge()
int ModApiClient::l_get_language(lua_State *L)
{
#ifdef _WIN32
@@ -245,34 +245,30 @@ int ModApiClient::l_get_language(lua_State *L)
return 2;
}
-int ModApiClient::l_get_wielded_item(lua_State *L)
-{
- Client *client = getClient(L);
- LocalPlayer *player = client->getEnv().getLocalPlayer();
- if (!player)
- return 0;
-
- ItemStack selected_item;
- player->getWieldedItem(&selected_item, nullptr);
- LuaItemStack::create(L, selected_item);
- return 1;
-}
-
// get_meta(pos)
int ModApiClient::l_get_meta(lua_State *L)
{
v3s16 p = read_v3s16(L, 1);
- NodeMetadata *meta = getClient(L)->getEnv().getMap().getNodeMetadata(p);
+
+ // check restrictions first
+ bool pos_ok;
+ getClient(L)->CSMGetNode(p, &pos_ok);
+ if (!pos_ok)
+ return 0;
+
+ NodeMetadata *meta = getEnv(L)->getMap().getNodeMetadata(p);
NodeMetaRef::createClient(L, meta);
return 1;
}
+// sound_play(spec, parameters)
int ModApiClient::l_sound_play(lua_State *L)
{
ISoundManager *sound = getClient(L)->getSoundManager();
SimpleSoundSpec spec;
read_soundspec(L, 1, spec);
+
float gain = 1.0f;
float pitch = 1.0f;
bool looped = false;
@@ -294,21 +290,32 @@ int ModApiClient::l_sound_play(lua_State *L)
}
}
- handle = sound->playSound(spec.name, looped, gain * spec.gain, 0.0f, pitch);
+ handle = sound->playSound(spec.name, looped, gain * spec.gain, spec.fade, pitch);
lua_pushinteger(L, handle);
return 1;
}
+// sound_stop(handle)
int ModApiClient::l_sound_stop(lua_State *L)
{
- u32 handle = luaL_checkinteger(L, 1);
+ s32 handle = luaL_checkinteger(L, 1);
getClient(L)->getSoundManager()->stopSound(handle);
return 0;
}
+// sound_fade(handle, step, gain)
+int ModApiClient::l_sound_fade(lua_State *L)
+{
+ s32 handle = luaL_checkinteger(L, 1);
+ float step = readParam<float>(L, 2);
+ float gain = readParam<float>(L, 3);
+ getClient(L)->getSoundManager()->fadeSound(handle, step, gain);
+ return 0;
+}
+
// get_server_info()
int ModApiClient::l_get_server_info(lua_State *L)
{
@@ -376,6 +383,7 @@ int ModApiClient::l_get_node_def(lua_State *L)
return 1;
}
+// get_privilege_list()
int ModApiClient::l_get_privilege_list(lua_State *L)
{
const Client *client = getClient(L);
@@ -470,11 +478,11 @@ void ModApiClient::Initialize(lua_State *L, int top)
API_FCT(send_respawn);
API_FCT(gettext);
API_FCT(get_node_or_nil);
- API_FCT(get_wielded_item);
API_FCT(disconnect);
API_FCT(get_meta);
API_FCT(sound_play);
API_FCT(sound_stop);
+ API_FCT(sound_fade);
API_FCT(get_server_info);
API_FCT(get_item_def);
API_FCT(get_node_def);
diff --git a/src/script/lua_api/l_client.h b/src/script/lua_api/l_client.h
index 83739fab1..21eea2aa1 100644
--- a/src/script/lua_api/l_client.h
+++ b/src/script/lua_api/l_client.h
@@ -69,6 +69,7 @@ private:
// get_node(pos)
static int l_get_node_or_nil(lua_State *L);
+ // get_language()
static int l_get_language(lua_State *L);
// get_wielded_item()
@@ -77,10 +78,15 @@ private:
// get_meta(pos)
static int l_get_meta(lua_State *L);
+ // sound_play(spec, parameters)
static int l_sound_play(lua_State *L);
+ // sound_stop(handle)
static int l_sound_stop(lua_State *L);
+ // sound_fade(handle, step, gain)
+ static int l_sound_fade(lua_State *L);
+
// get_server_info()
static int l_get_server_info(lua_State *L);
diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp
index 3169fa4cf..b2bc8c5f6 100644
--- a/src/script/lua_api/l_env.cpp
+++ b/src/script/lua_api/l_env.cpp
@@ -17,6 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include <algorithm>
#include "lua_api/l_env.h"
#include "lua_api/l_internal.h"
#include "lua_api/l_nodemeta.h"
@@ -25,7 +26,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_vmanip.h"
#include "common/c_converter.h"
#include "common/c_content.h"
-#include <algorithm>
#include "scripting_server.h"
#include "environment.h"
#include "mapblock.h"
@@ -33,12 +33,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "nodedef.h"
#include "daynightratio.h"
#include "util/pointedthing.h"
-#include "content_sao.h"
#include "mapgen/treegen.h"
#include "emerge.h"
#include "pathfinder.h"
#include "face_position_cache.h"
#include "remoteplayer.h"
+#include "server/luaentity_sao.h"
+#include "server/player_sao.h"
+#include "util/string.h"
+#include "translation.h"
#ifndef SERVER
#include "client/client.h"
#endif
@@ -72,7 +75,7 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n,
lua_remove(L, -2); // Remove core
// Get registered_abms[m_id]
- lua_pushnumber(L, m_id);
+ lua_pushinteger(L, m_id);
lua_gettable(L, -2);
if(lua_isnil(L, -1))
FATAL_ERROR("");
@@ -115,7 +118,7 @@ void LuaLBM::trigger(ServerEnvironment *env, v3s16 p, MapNode n)
lua_remove(L, -2); // Remove core
// Get registered_lbms[m_id]
- lua_pushnumber(L, m_id);
+ lua_pushinteger(L, m_id);
lua_gettable(L, -2);
FATAL_ERROR_IF(lua_isnil(L, -1), "Entry with given id not found in registered_lbms table");
lua_remove(L, -2); // Remove registered_lbms
@@ -139,8 +142,7 @@ void LuaLBM::trigger(ServerEnvironment *env, v3s16 p, MapNode n)
int LuaRaycast::l_next(lua_State *L)
{
- MAP_LOCK_REQUIRED;
- GET_ENV_PTR;
+ GET_PLAIN_ENV_PTR;
bool csm = false;
#ifndef SERVER
@@ -384,7 +386,7 @@ int ModApiEnvMod::l_get_node_or_nil(lua_State *L)
// timeofday: nil = current time, 0 = night, 0.5 = day
int ModApiEnvMod::l_get_node_light(lua_State *L)
{
- GET_ENV_PTR;
+ GET_PLAIN_ENV_PTR;
// Do it
v3s16 pos = read_v3s16(L, 1);
@@ -488,10 +490,7 @@ int ModApiEnvMod::l_punch_node(lua_State *L)
// pos = {x=num, y=num, z=num}
int ModApiEnvMod::l_get_node_max_level(lua_State *L)
{
- Environment *env = getEnv(L);
- if (!env) {
- return 0;
- }
+ GET_PLAIN_ENV_PTR;
v3s16 pos = read_v3s16(L, 1);
MapNode n = env->getMap().getNode(pos);
@@ -503,10 +502,7 @@ int ModApiEnvMod::l_get_node_max_level(lua_State *L)
// pos = {x=num, y=num, z=num}
int ModApiEnvMod::l_get_node_level(lua_State *L)
{
- Environment *env = getEnv(L);
- if (!env) {
- return 0;
- }
+ GET_PLAIN_ENV_PTR;
v3s16 pos = read_v3s16(L, 1);
MapNode n = env->getMap().getNode(pos);
@@ -533,13 +529,13 @@ int ModApiEnvMod::l_set_node_level(lua_State *L)
// add_node_level(pos, level)
// pos = {x=num, y=num, z=num}
-// level: 0..63
+// level: -127..127
int ModApiEnvMod::l_add_node_level(lua_State *L)
{
GET_ENV_PTR;
v3s16 pos = read_v3s16(L, 1);
- u8 level = 1;
+ s16 level = 1;
if(lua_isnumber(L, 2))
level = lua_tonumber(L, 2);
MapNode n = env->getMap().getNode(pos);
@@ -551,12 +547,12 @@ int ModApiEnvMod::l_add_node_level(lua_State *L)
// find_nodes_with_meta(pos1, pos2)
int ModApiEnvMod::l_find_nodes_with_meta(lua_State *L)
{
- GET_ENV_PTR;
+ GET_PLAIN_ENV_PTR;
std::vector<v3s16> positions = env->getMap().findNodesWithMetadata(
check_v3s16(L, 1), check_v3s16(L, 2));
- lua_newtable(L);
+ lua_createtable(L, positions.size(), 0);
for (size_t i = 0; i != positions.size(); i++) {
push_v3s16(L, positions[i]);
lua_rawseti(L, -2, i + 1);
@@ -583,7 +579,7 @@ int ModApiEnvMod::l_get_node_timer(lua_State *L)
// Do it
v3s16 p = read_v3s16(L, 1);
- NodeTimerRef::create(L, p, env);
+ NodeTimerRef::create(L, p, &env->getServerMap());
return 1;
}
@@ -593,19 +589,19 @@ int ModApiEnvMod::l_add_entity(lua_State *L)
{
GET_ENV_PTR;
- // pos
v3f pos = checkFloatPos(L, 1);
- // content
const char *name = luaL_checkstring(L, 2);
- // staticdata
const char *staticdata = luaL_optstring(L, 3, "");
- // Do it
+
ServerActiveObject *obj = new LuaEntitySAO(env, pos, name, staticdata);
int objectid = env->addActiveObject(obj);
// If failed to add, return nothing (reads as nil)
if(objectid == 0)
return 0;
- // Return ObjectRef
+
+ // If already deleted (can happen in on_activate), return nil
+ if (obj->isGone())
+ return 0;
getScriptApiBase(L)->objectrefGetOrCreate(L, obj);
return 1;
}
@@ -687,22 +683,22 @@ int ModApiEnvMod::l_get_player_by_name(lua_State *L)
int ModApiEnvMod::l_get_objects_inside_radius(lua_State *L)
{
GET_ENV_PTR;
+ ScriptApiBase *script = getScriptApiBase(L);
// Do it
v3f pos = checkFloatPos(L, 1);
float radius = readParam<float>(L, 2) * BS;
- std::vector<u16> ids;
- env->getObjectsInsideRadius(ids, pos, radius);
- ScriptApiBase *script = getScriptApiBase(L);
- lua_createtable(L, ids.size(), 0);
- std::vector<u16>::const_iterator iter = ids.begin();
- for(u32 i = 0; iter != ids.end(); ++iter) {
- ServerActiveObject *obj = env->getActiveObject(*iter);
- if (!obj->isGone()) {
- // Insert object reference into table
- script->objectrefGetOrCreate(L, obj);
- lua_rawseti(L, -2, ++i);
- }
+ std::vector<ServerActiveObject *> objs;
+
+ auto include_obj_cb = [](ServerActiveObject *obj){ return !obj->isGone(); };
+ env->getObjectsInsideRadius(objs, pos, radius, include_obj_cb);
+
+ int i = 0;
+ lua_createtable(L, objs.size(), 0);
+ for (const auto obj : objs) {
+ // Insert object reference into table
+ script->objectrefGetOrCreate(L, obj);
+ lua_rawseti(L, -2, ++i);
}
return 1;
}
@@ -728,10 +724,7 @@ int ModApiEnvMod::l_set_timeofday(lua_State *L)
// get_timeofday() -> 0...1
int ModApiEnvMod::l_get_timeofday(lua_State *L)
{
- Environment *env = getEnv(L);
- if (!env) {
- return 0;
- }
+ GET_PLAIN_ENV_PTR;
// Do it
int timeofday_mh = env->getTimeOfDay();
@@ -743,10 +736,7 @@ int ModApiEnvMod::l_get_timeofday(lua_State *L)
// get_day_count() -> int
int ModApiEnvMod::l_get_day_count(lua_State *L)
{
- Environment *env = getEnv(L);
- if (!env) {
- return 0;
- }
+ GET_PLAIN_ENV_PTR;
lua_pushnumber(L, env->getDayCount());
return 1;
@@ -762,46 +752,50 @@ int ModApiEnvMod::l_get_gametime(lua_State *L)
return 1;
}
-
-// find_node_near(pos, radius, nodenames, search_center) -> pos or nil
-// nodenames: eg. {"ignore", "group:tree"} or "default:dirt"
-int ModApiEnvMod::l_find_node_near(lua_State *L)
+void ModApiEnvMod::collectNodeIds(lua_State *L, int idx, const NodeDefManager *ndef,
+ std::vector<content_t> &filter)
{
- Environment *env = getEnv(L);
- if (!env) {
- return 0;
- }
-
- const NodeDefManager *ndef = getGameDef(L)->ndef();
- v3s16 pos = read_v3s16(L, 1);
- int radius = luaL_checkinteger(L, 2);
- std::vector<content_t> filter;
- if (lua_istable(L, 3)) {
+ if (lua_istable(L, idx)) {
lua_pushnil(L);
- while (lua_next(L, 3) != 0) {
+ while (lua_next(L, idx) != 0) {
// key at index -2 and value at index -1
luaL_checktype(L, -1, LUA_TSTRING);
ndef->getIds(readParam<std::string>(L, -1), filter);
// removes value, keeps key for next iteration
lua_pop(L, 1);
}
- } else if (lua_isstring(L, 3)) {
+ } else if (lua_isstring(L, idx)) {
ndef->getIds(readParam<std::string>(L, 3), filter);
}
+}
+
+// find_node_near(pos, radius, nodenames, [search_center]) -> pos or nil
+// nodenames: eg. {"ignore", "group:tree"} or "default:dirt"
+int ModApiEnvMod::l_find_node_near(lua_State *L)
+{
+ GET_PLAIN_ENV_PTR;
+
+ const NodeDefManager *ndef = env->getGameDef()->ndef();
+ Map &map = env->getMap();
+
+ v3s16 pos = read_v3s16(L, 1);
+ int radius = luaL_checkinteger(L, 2);
+ std::vector<content_t> filter;
+ collectNodeIds(L, 3, ndef, filter);
int start_radius = (lua_isboolean(L, 4) && readParam<bool>(L, 4)) ? 0 : 1;
#ifndef SERVER
// Client API limitations
- if (getClient(L))
- radius = getClient(L)->CSMClampRadius(pos, radius);
+ if (Client *client = getClient(L))
+ radius = client->CSMClampRadius(pos, radius);
#endif
for (int d = start_radius; d <= radius; d++) {
- std::vector<v3s16> list = FacePositionCache::getFacePositions(d);
+ const std::vector<v3s16> &list = FacePositionCache::getFacePositions(d);
for (const v3s16 &i : list) {
v3s16 p = pos + i;
- content_t c = env->getMap().getNode(p).getContent();
+ content_t c = map.getNode(p).getContent();
if (CONTAINS(filter, c)) {
push_v3s16(L, p);
return 1;
@@ -811,24 +805,23 @@ int ModApiEnvMod::l_find_node_near(lua_State *L)
return 0;
}
-// find_nodes_in_area(minp, maxp, nodenames) -> list of positions
-// nodenames: eg. {"ignore", "group:tree"} or "default:dirt"
+// find_nodes_in_area(minp, maxp, nodenames, [grouped])
int ModApiEnvMod::l_find_nodes_in_area(lua_State *L)
{
- GET_ENV_PTR;
+ GET_PLAIN_ENV_PTR;
v3s16 minp = read_v3s16(L, 1);
v3s16 maxp = read_v3s16(L, 2);
sortBoxVerticies(minp, maxp);
+ const NodeDefManager *ndef = env->getGameDef()->ndef();
+ Map &map = env->getMap();
+
#ifndef SERVER
- const NodeDefManager *ndef = getClient(L) ? getClient(L)->ndef() : getServer(L)->ndef();
- if (getClient(L)) {
- minp = getClient(L)->CSMClampPos(minp);
- maxp = getClient(L)->CSMClampPos(maxp);
+ if (Client *client = getClient(L)) {
+ minp = client->CSMClampPos(minp);
+ maxp = client->CSMClampPos(maxp);
}
-#else
- const NodeDefManager *ndef = getServer(L)->ndef();
#endif
v3s16 cube = maxp - minp + 1;
@@ -840,45 +833,79 @@ int ModApiEnvMod::l_find_nodes_in_area(lua_State *L)
}
std::vector<content_t> filter;
- if (lua_istable(L, 3)) {
- lua_pushnil(L);
- while (lua_next(L, 3) != 0) {
- // key at index -2 and value at index -1
- luaL_checktype(L, -1, LUA_TSTRING);
- ndef->getIds(readParam<std::string>(L, -1), filter);
- // removes value, keeps key for next iteration
- lua_pop(L, 1);
+ collectNodeIds(L, 3, ndef, filter);
+
+ bool grouped = lua_isboolean(L, 4) && readParam<bool>(L, 4);
+
+ if (grouped) {
+ // create the table we will be returning
+ lua_createtable(L, 0, filter.size());
+ int base = lua_gettop(L);
+
+ // create one table for each filter
+ std::vector<u32> idx;
+ idx.resize(filter.size());
+ for (u32 i = 0; i < filter.size(); i++)
+ lua_newtable(L);
+
+ v3s16 p;
+ for (p.X = minp.X; p.X <= maxp.X; p.X++)
+ for (p.Y = minp.Y; p.Y <= maxp.Y; p.Y++)
+ for (p.Z = minp.Z; p.Z <= maxp.Z; p.Z++) {
+ content_t c = map.getNode(p).getContent();
+
+ auto it = std::find(filter.begin(), filter.end(), c);
+ if (it != filter.end()) {
+ // Calculate index of the table and append the position
+ u32 filt_index = it - filter.begin();
+ push_v3s16(L, p);
+ lua_rawseti(L, base + 1 + filt_index, ++idx[filt_index]);
+ }
}
- } else if (lua_isstring(L, 3)) {
- ndef->getIds(readParam<std::string>(L, 3), filter);
- }
- std::vector<u32> individual_count;
- individual_count.resize(filter.size());
+ // last filter table is at top of stack
+ u32 i = filter.size() - 1;
+ do {
+ if (idx[i] == 0) {
+ // No such node found -> drop the empty table
+ lua_pop(L, 1);
+ } else {
+ // This node was found -> put table into the return table
+ lua_setfield(L, base, ndef->get(filter[i]).name.c_str());
+ }
+ } while (i-- != 0);
- lua_newtable(L);
- u64 i = 0;
- for (s16 x = minp.X; x <= maxp.X; x++)
- for (s16 y = minp.Y; y <= maxp.Y; y++)
- for (s16 z = minp.Z; z <= maxp.Z; z++) {
- v3s16 p(x, y, z);
- content_t c = env->getMap().getNode(p).getContent();
-
- std::vector<content_t>::iterator it = std::find(filter.begin(), filter.end(), c);
- if (it != filter.end()) {
- push_v3s16(L, p);
- lua_rawseti(L, -2, ++i);
+ assert(lua_gettop(L) == base);
+ return 1;
+ } else {
+ std::vector<u32> individual_count;
+ individual_count.resize(filter.size());
- u32 filt_index = it - filter.begin();
- individual_count[filt_index]++;
+ lua_newtable(L);
+ u32 i = 0;
+ v3s16 p;
+ for (p.X = minp.X; p.X <= maxp.X; p.X++)
+ for (p.Y = minp.Y; p.Y <= maxp.Y; p.Y++)
+ for (p.Z = minp.Z; p.Z <= maxp.Z; p.Z++) {
+ content_t c = env->getMap().getNode(p).getContent();
+
+ auto it = std::find(filter.begin(), filter.end(), c);
+ if (it != filter.end()) {
+ push_v3s16(L, p);
+ lua_rawseti(L, -2, ++i);
+
+ u32 filt_index = it - filter.begin();
+ individual_count[filt_index]++;
+ }
}
+
+ lua_createtable(L, 0, filter.size());
+ for (u32 i = 0; i < filter.size(); i++) {
+ lua_pushinteger(L, individual_count[i]);
+ lua_setfield(L, -2, ndef->get(filter[i]).name.c_str());
+ }
+ return 2;
}
- lua_newtable(L);
- for (u32 i = 0; i < filter.size(); i++) {
- lua_pushnumber(L, individual_count[i]);
- lua_setfield(L, -2, ndef->get(filter[i]).name.c_str());
- }
- return 2;
}
// find_nodes_in_area_under_air(minp, maxp, nodenames) -> list of positions
@@ -892,20 +919,20 @@ int ModApiEnvMod::l_find_nodes_in_area_under_air(lua_State *L)
* TODO
*/
- GET_ENV_PTR;
+ GET_PLAIN_ENV_PTR;
v3s16 minp = read_v3s16(L, 1);
v3s16 maxp = read_v3s16(L, 2);
sortBoxVerticies(minp, maxp);
+ const NodeDefManager *ndef = env->getGameDef()->ndef();
+ Map &map = env->getMap();
+
#ifndef SERVER
- const NodeDefManager *ndef = getClient(L) ? getClient(L)->ndef() : getServer(L)->ndef();
- if (getClient(L)) {
- minp = getClient(L)->CSMClampPos(minp);
- maxp = getClient(L)->CSMClampPos(maxp);
+ if (Client *client = getClient(L)) {
+ minp = client->CSMClampPos(minp);
+ maxp = client->CSMClampPos(maxp);
}
-#else
- const NodeDefManager *ndef = getServer(L)->ndef();
#endif
v3s16 cube = maxp - minp + 1;
@@ -917,33 +944,21 @@ int ModApiEnvMod::l_find_nodes_in_area_under_air(lua_State *L)
}
std::vector<content_t> filter;
-
- if (lua_istable(L, 3)) {
- lua_pushnil(L);
- while (lua_next(L, 3) != 0) {
- // key at index -2 and value at index -1
- luaL_checktype(L, -1, LUA_TSTRING);
- ndef->getIds(readParam<std::string>(L, -1), filter);
- // removes value, keeps key for next iteration
- lua_pop(L, 1);
- }
- } else if (lua_isstring(L, 3)) {
- ndef->getIds(readParam<std::string>(L, 3), filter);
- }
+ collectNodeIds(L, 3, ndef, filter);
lua_newtable(L);
- u64 i = 0;
- for (s16 x = minp.X; x <= maxp.X; x++)
- for (s16 z = minp.Z; z <= maxp.Z; z++) {
- s16 y = minp.Y;
- v3s16 p(x, y, z);
- content_t c = env->getMap().getNode(p).getContent();
- for (; y <= maxp.Y; y++) {
- v3s16 psurf(x, y + 1, z);
- content_t csurf = env->getMap().getNode(psurf).getContent();
+ u32 i = 0;
+ v3s16 p;
+ for (p.X = minp.X; p.X <= maxp.X; p.X++)
+ for (p.Z = minp.Z; p.Z <= maxp.Z; p.Z++) {
+ p.Y = minp.Y;
+ content_t c = map.getNode(p).getContent();
+ for (; p.Y <= maxp.Y; p.Y++) {
+ v3s16 psurf(p.X, p.Y + 1, p.Z);
+ content_t csurf = map.getNode(psurf).getContent();
if (c != CONTENT_AIR && csurf == CONTENT_AIR &&
CONTAINS(filter, c)) {
- push_v3s16(L, v3s16(x, y, z));
+ push_v3s16(L, p);
lua_rawseti(L, -2, ++i);
}
c = csurf;
@@ -1034,7 +1049,7 @@ int ModApiEnvMod::l_clear_objects(lua_State *L)
// line_of_sight(pos1, pos2) -> true/false, pos
int ModApiEnvMod::l_line_of_sight(lua_State *L)
{
- GET_ENV_PTR;
+ GET_PLAIN_ENV_PTR;
// read position 1 from lua
v3f pos1 = checkFloatPos(L, 1);
@@ -1210,11 +1225,11 @@ int ModApiEnvMod::l_find_path(lua_State *L)
algo = PA_DIJKSTRA;
}
- std::vector<v3s16> path = get_path(env, pos1, pos2,
+ std::vector<v3s16> path = get_path(&env->getServerMap(), env->getGameDef()->ndef(), pos1, pos2,
searchdistance, max_jump, max_drop, algo);
if (!path.empty()) {
- lua_newtable(L);
+ lua_createtable(L, path.size(), 0);
int top = lua_gettop(L);
unsigned int index = 1;
for (const v3s16 &i : path) {
@@ -1274,8 +1289,9 @@ int ModApiEnvMod::l_spawn_tree(lua_State *L)
else
return 0;
+ ServerMap *map = &env->getServerMap();
treegen::error e;
- if ((e = treegen::spawn_ltree (env, p0, ndef, tree_def)) != treegen::SUCCESS) {
+ if ((e = treegen::spawn_ltree (map, p0, ndef, tree_def)) != treegen::SUCCESS) {
if (e == treegen::UNBALANCED_BRACKETS) {
luaL_error(L, "spawn_tree(): closing ']' has no matching opening bracket");
} else {
@@ -1318,6 +1334,19 @@ int ModApiEnvMod::l_forceload_free_block(lua_State *L)
return 0;
}
+// get_translated_string(lang_code, string)
+int ModApiEnvMod::l_get_translated_string(lua_State * L)
+{
+ GET_ENV_PTR;
+ std::string lang_code = luaL_checkstring(L, 1);
+ std::string string = luaL_checkstring(L, 2);
+ getServer(L)->loadTranslationLanguage(lang_code);
+ string = wide_to_utf8(translate_string(utf8_to_wide(string),
+ &(*g_server_translations)[lang_code]));
+ lua_pushstring(L, string.c_str());
+ return 1;
+}
+
void ModApiEnvMod::Initialize(lua_State *L, int top)
{
API_FCT(set_node);
@@ -1365,6 +1394,7 @@ void ModApiEnvMod::Initialize(lua_State *L, int top)
API_FCT(transforming_liquid_add);
API_FCT(forceload_block);
API_FCT(forceload_free_block);
+ API_FCT(get_translated_string);
}
void ModApiEnvMod::InitializeClient(lua_State *L, int top)
diff --git a/src/script/lua_api/l_env.h b/src/script/lua_api/l_env.h
index ac2f8b588..07d4d2438 100644
--- a/src/script/lua_api/l_env.h
+++ b/src/script/lua_api/l_env.h
@@ -187,6 +187,14 @@ private:
// stops forceloading a position
static int l_forceload_free_block(lua_State *L);
+ // Get a string translated server side
+ static int l_get_translated_string(lua_State * L);
+
+ /* Helpers */
+
+ static void collectNodeIds(lua_State *L, int idx,
+ const NodeDefManager *ndef, std::vector<content_t> &filter);
+
public:
static void Initialize(lua_State *L, int top);
static void InitializeClient(lua_State *L, int top);
diff --git a/src/script/lua_api/l_http.cpp b/src/script/lua_api/l_http.cpp
index 2ff651cb5..ec43bf174 100644
--- a/src/script/lua_api/l_http.cpp
+++ b/src/script/lua_api/l_http.cpp
@@ -83,6 +83,24 @@ void ModApiHttp::push_http_fetch_result(lua_State *L, HTTPFetchResult &res, bool
setstringfield(L, -1, "data", res.data);
}
+// http_api.fetch_sync(HTTPRequest definition)
+int ModApiHttp::l_http_fetch_sync(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ HTTPFetchRequest req;
+ read_http_fetch_request(L, req);
+
+ infostream << "Mod performs HTTP request with URL " << req.url << std::endl;
+
+ HTTPFetchResult res;
+ httpfetch_sync(req, res);
+
+ push_http_fetch_result(L, res, true);
+
+ return 1;
+}
+
// http_api.fetch_async(HTTPRequest definition)
int ModApiHttp::l_http_fetch_async(lua_State *L)
{
@@ -180,11 +198,42 @@ int ModApiHttp::l_request_http_api(lua_State *L)
return 1;
}
+
+int ModApiHttp::l_get_http_api(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ lua_newtable(L);
+ HTTP_API(fetch_async);
+ HTTP_API(fetch_async_get);
+ HTTP_API(fetch_sync);
+
+ return 1;
+}
+
#endif
void ModApiHttp::Initialize(lua_State *L, int top)
{
#if USE_CURL
- API_FCT(request_http_api);
+
+ bool isMainmenu = false;
+#ifndef SERVER
+ isMainmenu = ModApiBase::getGuiEngine(L) != nullptr;
+#endif
+
+ if (isMainmenu) {
+ API_FCT(get_http_api);
+ } else {
+ API_FCT(request_http_api);
+ }
+
+#endif
+}
+
+void ModApiHttp::InitializeAsync(lua_State *L, int top)
+{
+#if USE_CURL
+ API_FCT(get_http_api);
#endif
}
diff --git a/src/script/lua_api/l_http.h b/src/script/lua_api/l_http.h
index 3d9cdad29..de6e51b37 100644
--- a/src/script/lua_api/l_http.h
+++ b/src/script/lua_api/l_http.h
@@ -32,6 +32,9 @@ private:
static void read_http_fetch_request(lua_State *L, HTTPFetchRequest &req);
static void push_http_fetch_result(lua_State *L, HTTPFetchResult &res, bool completed = true);
+ // http_fetch_sync({url=, timeout=, post_data=})
+ static int l_http_fetch_sync(lua_State *L);
+
// http_fetch_async({url=, timeout=, post_data=})
static int l_http_fetch_async(lua_State *L);
@@ -40,8 +43,12 @@ private:
// request_http_api()
static int l_request_http_api(lua_State *L);
+
+ // get_http_api()
+ static int l_get_http_api(lua_State *L);
#endif
public:
static void Initialize(lua_State *L, int top);
+ static void InitializeAsync(lua_State *L, int top);
};
diff --git a/src/script/lua_api/l_internal.h b/src/script/lua_api/l_internal.h
index bbedfe46e..a86eeaf79 100644
--- a/src/script/lua_api/l_internal.h
+++ b/src/script/lua_api/l_internal.h
@@ -32,14 +32,39 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define luamethod_aliased(class, name, alias) {#name, class::l_##name}, {#alias, class::l_##name}
#define API_FCT(name) registerFunction(L, #name, l_##name, top)
-#define MAP_LOCK_REQUIRED
-#define NO_MAP_LOCK_REQUIRED
+// For future use
+#define MAP_LOCK_REQUIRED ((void)0)
+#define NO_MAP_LOCK_REQUIRED ((void)0)
+/* In debug mode ensure no code tries to retrieve the server env when it isn't
+ * actually available (in CSM) */
+#if !defined(SERVER) && !defined(NDEBUG)
+#define DEBUG_ASSERT_NO_CLIENTAPI \
+ FATAL_ERROR_IF(getClient(L) != nullptr, "Tried " \
+ "to retrieve ServerEnvironment on client")
+#else
+#define DEBUG_ASSERT_NO_CLIENTAPI ((void)0)
+#endif
+
+// Retrieve ServerEnvironment pointer as `env` (no map lock)
#define GET_ENV_PTR_NO_MAP_LOCK \
+ DEBUG_ASSERT_NO_CLIENTAPI; \
ServerEnvironment *env = (ServerEnvironment *)getEnv(L); \
if (env == NULL) \
return 0
+// Retrieve ServerEnvironment pointer as `env`
#define GET_ENV_PTR \
MAP_LOCK_REQUIRED; \
GET_ENV_PTR_NO_MAP_LOCK
+
+// Retrieve Environment pointer as `env` (no map lock)
+#define GET_PLAIN_ENV_PTR_NO_MAP_LOCK \
+ Environment *env = (Environment *)getEnv(L); \
+ if (env == NULL) \
+ return 0
+
+// Retrieve Environment pointer as `env`
+#define GET_PLAIN_ENV_PTR \
+ MAP_LOCK_REQUIRED; \
+ GET_PLAIN_ENV_PTR_NO_MAP_LOCK
diff --git a/src/script/lua_api/l_inventory.cpp b/src/script/lua_api/l_inventory.cpp
index 6e7afa4a4..e41b5cb41 100644
--- a/src/script/lua_api/l_inventory.cpp
+++ b/src/script/lua_api/l_inventory.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_converter.h"
#include "common/c_content.h"
#include "server.h"
+#include "server/serverinventorymgr.h"
#include "remoteplayer.h"
/*
@@ -38,7 +39,7 @@ InvRef* InvRef::checkobject(lua_State *L, int narg)
Inventory* InvRef::getinv(lua_State *L, InvRef *ref)
{
- return getServer(L)->getInventory(ref->m_loc);
+ return getServerInventoryMgr(L)->getInventory(ref->m_loc);
}
InventoryList* InvRef::getlist(lua_State *L, InvRef *ref,
@@ -54,7 +55,7 @@ InventoryList* InvRef::getlist(lua_State *L, InvRef *ref,
void InvRef::reportInventoryChange(lua_State *L, InvRef *ref)
{
// Inform other things that the inventory has changed
- getServer(L)->setInventoryModified(ref->m_loc);
+ getServerInventoryMgr(L)->setInventoryModified(ref->m_loc);
}
// Exported functions
@@ -487,7 +488,9 @@ int ModApiInventory::l_get_inventory(lua_State *L)
{
InventoryLocation loc;
- std::string type = checkstringfield(L, 1, "type");
+ lua_getfield(L, 1, "type");
+ std::string type = luaL_checkstring(L, -1);
+ lua_pop(L, 1);
if(type == "node"){
MAP_LOCK_REQUIRED;
@@ -495,7 +498,7 @@ int ModApiInventory::l_get_inventory(lua_State *L)
v3s16 pos = check_v3s16(L, -1);
loc.setNodeMeta(pos);
- if (getServer(L)->getInventory(loc) != NULL)
+ if (getServerInventoryMgr(L)->getInventory(loc) != NULL)
InvRef::create(L, loc);
else
lua_pushnil(L);
@@ -504,14 +507,16 @@ int ModApiInventory::l_get_inventory(lua_State *L)
NO_MAP_LOCK_REQUIRED;
if (type == "player") {
- std::string name = checkstringfield(L, 1, "name");
- loc.setPlayer(name);
+ lua_getfield(L, 1, "name");
+ loc.setPlayer(luaL_checkstring(L, -1));
+ lua_pop(L, 1);
} else if (type == "detached") {
- std::string name = checkstringfield(L, 1, "name");
- loc.setDetached(name);
+ lua_getfield(L, 1, "name");
+ loc.setDetached(luaL_checkstring(L, -1));
+ lua_pop(L, 1);
}
- if (getServer(L)->getInventory(loc) != NULL)
+ if (getServerInventoryMgr(L)->getInventory(loc) != NULL)
InvRef::create(L, loc);
else
lua_pushnil(L);
@@ -526,7 +531,7 @@ int ModApiInventory::l_create_detached_inventory_raw(lua_State *L)
NO_MAP_LOCK_REQUIRED;
const char *name = luaL_checkstring(L, 1);
std::string player = readParam<std::string>(L, 2, "");
- if (getServer(L)->createDetachedInventory(name, player) != NULL) {
+ if (getServerInventoryMgr(L)->createDetachedInventory(name, getServer(L)->idef(), player) != NULL) {
InventoryLocation loc;
loc.setDetached(name);
InvRef::create(L, loc);
@@ -541,7 +546,7 @@ int ModApiInventory::l_remove_detached_inventory_raw(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
const std::string &name = luaL_checkstring(L, 1);
- lua_pushboolean(L, getServer(L)->removeDetachedInventory(name));
+ lua_pushboolean(L, getServerInventoryMgr(L)->removeDetachedInventory(name));
return 1;
}
diff --git a/src/script/lua_api/l_item.cpp b/src/script/lua_api/l_item.cpp
index 99b20b015..7e024c899 100644
--- a/src/script/lua_api/l_item.cpp
+++ b/src/script/lua_api/l_item.cpp
@@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "itemdef.h"
#include "nodedef.h"
#include "content_sao.h"
+#include "server.h"
#include "inventory.h"
#include "log.h"
#include "script/cpp_api/s_base.h"
@@ -42,6 +43,15 @@ int LuaItemStack::gc_object(lua_State *L)
return 0;
}
+// __tostring metamethod
+int LuaItemStack::mt_tostring(lua_State *L)
+{
+ LuaItemStack *o = checkobject(L, 1);
+ std::string itemstring = o->m_stack.getItemString(false);
+ lua_pushfstring(L, "ItemStack(\"%s\")", itemstring.c_str());
+ return 1;
+}
+
// is_empty(self) -> true/false
int LuaItemStack::l_is_empty(lua_State *L)
{
@@ -438,12 +448,9 @@ int LuaItemStack::create(lua_State *L, const ItemStack &item)
return 1;
}
-LuaItemStack* LuaItemStack::checkobject(lua_State *L, int narg)
+LuaItemStack *LuaItemStack::checkobject(lua_State *L, int narg)
{
- luaL_checktype(L, narg, LUA_TUSERDATA);
- void *ud = luaL_checkudata(L, narg, className);
- if(!ud) luaL_typerror(L, narg, className);
- return *(LuaItemStack**)ud; // unbox pointer
+ return *(LuaItemStack **)luaL_checkudata(L, narg, className);
}
void LuaItemStack::Register(lua_State *L)
@@ -453,9 +460,10 @@ void LuaItemStack::Register(lua_State *L)
luaL_newmetatable(L, className);
int metatable = lua_gettop(L);
+ // hide metatable from Lua getmetatable()
lua_pushliteral(L, "__metatable");
lua_pushvalue(L, methodtable);
- lua_settable(L, metatable); // hide metatable from Lua getmetatable()
+ lua_settable(L, metatable);
lua_pushliteral(L, "__index");
lua_pushvalue(L, methodtable);
@@ -465,12 +473,16 @@ void LuaItemStack::Register(lua_State *L)
lua_pushcfunction(L, gc_object);
lua_settable(L, metatable);
+ lua_pushliteral(L, "__tostring");
+ lua_pushcfunction(L, mt_tostring);
+ lua_settable(L, metatable);
+
lua_pop(L, 1); // drop metatable
luaL_openlib(L, 0, methods, 0); // fill methodtable
lua_pop(L, 1); // drop methodtable
- // Can be created from Lua (LuaItemStack(itemstack or itemstring or table or nil))
+ // Can be created from Lua (ItemStack(itemstack or itemstring or table or nil))
lua_register(L, className, create_object);
}
@@ -526,7 +538,6 @@ int ModApiItemMod::l_register_item_raw(lua_State *L)
lua_getfield(L, table, "name");
if(lua_isstring(L, -1)){
name = readParam<std::string>(L, -1);
- verbosestream<<"register_item_raw: "<<name<<std::endl;
} else {
throw LuaError("register_item_raw: name is not defined or not a string");
}
@@ -616,10 +627,21 @@ int ModApiItemMod::l_get_content_id(lua_State *L)
NO_MAP_LOCK_REQUIRED;
std::string name = luaL_checkstring(L, 1);
+ const IItemDefManager *idef = getGameDef(L)->getItemDefManager();
const NodeDefManager *ndef = getGameDef(L)->getNodeDefManager();
+
+ // If this is called at mod load time, NodeDefManager isn't aware of
+ // aliases yet, so we need to handle them manually
+ std::string alias_name = idef->getAlias(name);
+
content_t content_id;
- if (!ndef->getId(name, content_id))
+ if (alias_name != name) {
+ if (!ndef->getId(alias_name, content_id))
+ throw LuaError("Unknown node: " + alias_name +
+ " (from alias " + name + ")");
+ } else if (!ndef->getId(name, content_id)) {
throw LuaError("Unknown node: " + name);
+ }
lua_pushinteger(L, content_id);
return 1; /* number of results */
diff --git a/src/script/lua_api/l_item.h b/src/script/lua_api/l_item.h
index 6fab58045..98744c071 100644
--- a/src/script/lua_api/l_item.h
+++ b/src/script/lua_api/l_item.h
@@ -34,6 +34,9 @@ private:
// garbage collector
static int gc_object(lua_State *L);
+ // __tostring metamethod
+ static int mt_tostring(lua_State *L);
+
// is_empty(self) -> true/false
static int l_is_empty(lua_State *L);
diff --git a/src/script/lua_api/l_localplayer.cpp b/src/script/lua_api/l_localplayer.cpp
index 2a87a3b05..bde120c1d 100644
--- a/src/script/lua_api/l_localplayer.cpp
+++ b/src/script/lua_api/l_localplayer.cpp
@@ -19,11 +19,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "l_localplayer.h"
#include "l_internal.h"
+#include "lua_api/l_item.h"
#include "script/common/c_converter.h"
#include "client/localplayer.h"
#include "hud.h"
#include "common/c_content.h"
#include "client/client.h"
+#include "client/content_cao.h"
LuaLocalPlayer::LuaLocalPlayer(LocalPlayer *m) : m_localplayer(m)
{
@@ -75,6 +77,26 @@ int LuaLocalPlayer::l_get_name(lua_State *L)
return 1;
}
+// get_wield_index(self)
+int LuaLocalPlayer::l_get_wield_index(lua_State *L)
+{
+ LocalPlayer *player = getobject(L, 1);
+
+ lua_pushinteger(L, player->getWieldIndex());
+ return 1;
+}
+
+// get_wielded_item(self)
+int LuaLocalPlayer::l_get_wielded_item(lua_State *L)
+{
+ LocalPlayer *player = getobject(L, 1);
+
+ ItemStack selected_item;
+ player->getWieldedItem(&selected_item, nullptr);
+ LuaItemStack::create(L, selected_item);
+ return 1;
+}
+
int LuaLocalPlayer::l_is_attached(lua_State *L)
{
LocalPlayer *player = getobject(L, 1);
@@ -131,6 +153,7 @@ int LuaLocalPlayer::l_swimming_vertical(lua_State *L)
return 1;
}
+// get_physics_override(self)
int LuaLocalPlayer::l_get_physics_override(lua_State *L)
{
LocalPlayer *player = getobject(L, 1);
@@ -151,14 +174,9 @@ int LuaLocalPlayer::l_get_physics_override(lua_State *L)
lua_pushboolean(L, player->physics_override_sneak_glitch);
lua_setfield(L, -2, "sneak_glitch");
- return 1;
-}
-
-int LuaLocalPlayer::l_get_override_pos(lua_State *L)
-{
- LocalPlayer *player = getobject(L, 1);
+ lua_pushboolean(L, player->physics_override_new_move);
+ lua_setfield(L, -2, "new_move");
- push_v3f(L, player->getPosition());
return 1;
}
@@ -194,14 +212,33 @@ int LuaLocalPlayer::l_get_last_look_horizontal(lua_State *L)
return 1;
}
-int LuaLocalPlayer::l_get_key_pressed(lua_State *L)
+// get_control(self)
+int LuaLocalPlayer::l_get_control(lua_State *L)
{
LocalPlayer *player = getobject(L, 1);
+ const PlayerControl &c = player->getPlayerControl();
+
+ auto set = [L] (const char *name, bool value) {
+ lua_pushboolean(L, value);
+ lua_setfield(L, -2, name);
+ };
+
+ lua_createtable(L, 0, 12);
+ set("up", c.up);
+ set("down", c.down);
+ set("left", c.left);
+ set("right", c.right);
+ set("jump", c.jump);
+ set("aux1", c.aux1);
+ set("sneak", c.sneak);
+ set("zoom", c.zoom);
+ set("LMB", c.LMB);
+ set("RMB", c.RMB);
- lua_pushinteger(L, player->last_keyPressed);
return 1;
}
+// get_breath(self)
int LuaLocalPlayer::l_get_breath(lua_State *L)
{
LocalPlayer *player = getobject(L, 1);
@@ -210,6 +247,7 @@ int LuaLocalPlayer::l_get_breath(lua_State *L)
return 1;
}
+// get_pos(self)
int LuaLocalPlayer::l_get_pos(lua_State *L)
{
LocalPlayer *player = getobject(L, 1);
@@ -218,6 +256,7 @@ int LuaLocalPlayer::l_get_pos(lua_State *L)
return 1;
}
+// set_pos(self, pos)
int LuaLocalPlayer::l_set_pos(lua_State *L)
{
LocalPlayer *player = getobject(L, 1);
@@ -228,6 +267,7 @@ int LuaLocalPlayer::l_set_pos(lua_State *L)
return 0;
}
+// get_movement_acceleration(self)
int LuaLocalPlayer::l_get_movement_acceleration(lua_State *L)
{
LocalPlayer *player = getobject(L, 1);
@@ -245,6 +285,7 @@ int LuaLocalPlayer::l_get_movement_acceleration(lua_State *L)
return 1;
}
+// get_movement_speed(self)
int LuaLocalPlayer::l_get_movement_speed(lua_State *L)
{
LocalPlayer *player = getobject(L, 1);
@@ -268,6 +309,7 @@ int LuaLocalPlayer::l_get_movement_speed(lua_State *L)
return 1;
}
+// get_movement(self)
int LuaLocalPlayer::l_get_movement(lua_State *L)
{
LocalPlayer *player = getobject(L, 1);
@@ -289,6 +331,13 @@ int LuaLocalPlayer::l_get_movement(lua_State *L)
return 1;
}
+// get_armor_groups(self)
+int LuaLocalPlayer::l_get_armor_groups(lua_State *L)
+{
+ LocalPlayer *player = getobject(L, 1);
+ push_groups(L, player->getCAO()->getGroups());
+ return 1;
+}
// hud_add(self, form)
int LuaLocalPlayer::l_hud_add(lua_State *L)
@@ -418,6 +467,8 @@ const luaL_Reg LuaLocalPlayer::methods[] = {
luamethod(LuaLocalPlayer, get_velocity),
luamethod(LuaLocalPlayer, get_hp),
luamethod(LuaLocalPlayer, get_name),
+ luamethod(LuaLocalPlayer, get_wield_index),
+ luamethod(LuaLocalPlayer, get_wielded_item),
luamethod(LuaLocalPlayer, is_attached),
luamethod(LuaLocalPlayer, is_touching_ground),
luamethod(LuaLocalPlayer, is_in_liquid),
@@ -426,18 +477,20 @@ const luaL_Reg LuaLocalPlayer::methods[] = {
luamethod(LuaLocalPlayer, is_climbing),
luamethod(LuaLocalPlayer, swimming_vertical),
luamethod(LuaLocalPlayer, get_physics_override),
- luamethod(LuaLocalPlayer, get_override_pos),
+ // TODO: figure our if these are useful in any way
luamethod(LuaLocalPlayer, get_last_pos),
luamethod(LuaLocalPlayer, get_last_velocity),
luamethod(LuaLocalPlayer, get_last_look_horizontal),
luamethod(LuaLocalPlayer, get_last_look_vertical),
- luamethod(LuaLocalPlayer, get_key_pressed),
+ //
+ luamethod(LuaLocalPlayer, get_control),
luamethod(LuaLocalPlayer, get_breath),
luamethod(LuaLocalPlayer, get_pos),
luamethod(LuaLocalPlayer, set_pos),
luamethod(LuaLocalPlayer, get_movement_acceleration),
luamethod(LuaLocalPlayer, get_movement_speed),
luamethod(LuaLocalPlayer, get_movement),
+ luamethod(LuaLocalPlayer, get_armor_groups),
luamethod(LuaLocalPlayer, hud_add),
luamethod(LuaLocalPlayer, hud_remove),
luamethod(LuaLocalPlayer, hud_change),
diff --git a/src/script/lua_api/l_localplayer.h b/src/script/lua_api/l_localplayer.h
index 13d45a7cb..2c9881d58 100644
--- a/src/script/lua_api/l_localplayer.h
+++ b/src/script/lua_api/l_localplayer.h
@@ -32,12 +32,21 @@ private:
// garbage collector
static int gc_object(lua_State *L);
+ // get_velocity(self)
static int l_get_velocity(lua_State *L);
+ // get_hp(self)
static int l_get_hp(lua_State *L);
+ // get_name(self)
static int l_get_name(lua_State *L);
+ // get_wield_index(self)
+ static int l_get_wield_index(lua_State *L);
+
+ // get_wielded_item(self)
+ static int l_get_wielded_item(lua_State *L);
+
static int l_is_attached(lua_State *L);
static int l_is_touching_ground(lua_State *L);
static int l_is_in_liquid(lua_State *L);
@@ -54,19 +63,29 @@ private:
static int l_get_last_velocity(lua_State *L);
static int l_get_last_look_vertical(lua_State *L);
static int l_get_last_look_horizontal(lua_State *L);
- static int l_get_key_pressed(lua_State *L);
+ // get_control(self)
+ static int l_get_control(lua_State *L);
+
+ // get_breath(self)
static int l_get_breath(lua_State *L);
+ // get_pos(self)
static int l_get_pos(lua_State *L);
static int l_set_pos(lua_State *L);
+ // get_movement_acceleration(self)
static int l_get_movement_acceleration(lua_State *L);
+ // get_movement_speed(self)
static int l_get_movement_speed(lua_State *L);
+ // get_movement(self)
static int l_get_movement(lua_State *L);
+ // get_armor_groups(self)
+ static int l_get_armor_groups(lua_State *L);
+
// hud_add(self, id, form)
static int l_hud_add(lua_State *L);
diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp
index 76db7ed13..f32c477c2 100644
--- a/src/script/lua_api/l_mainmenu.cpp
+++ b/src/script/lua_api/l_mainmenu.cpp
@@ -280,8 +280,8 @@ int ModApiMainMenu::l_get_favorites(lua_State *L)
{
std::string listtype = "local";
- if (!lua_isnone(L,1)) {
- listtype = luaL_checkstring(L,1);
+ if (!lua_isnone(L, 1)) {
+ listtype = luaL_checkstring(L, 1);
}
std::vector<ServerListSpec> servers;
@@ -298,7 +298,7 @@ int ModApiMainMenu::l_get_favorites(lua_State *L)
for (const Json::Value &server : servers) {
- lua_pushnumber(L,index);
+ lua_pushnumber(L, index);
lua_newtable(L);
int top_lvl2 = lua_gettop(L);
@@ -306,11 +306,11 @@ int ModApiMainMenu::l_get_favorites(lua_State *L)
if (!server["clients"].asString().empty()) {
std::string clients_raw = server["clients"].asString();
char* endptr = 0;
- int numbervalue = strtol(clients_raw.c_str(),&endptr,10);
+ int numbervalue = strtol(clients_raw.c_str(), &endptr,10);
if ((!clients_raw.empty()) && (*endptr == 0)) {
- lua_pushstring(L,"clients");
- lua_pushnumber(L,numbervalue);
+ lua_pushstring(L, "clients");
+ lua_pushnumber(L, numbervalue);
lua_settable(L, top_lvl2);
}
}
@@ -319,83 +319,83 @@ int ModApiMainMenu::l_get_favorites(lua_State *L)
std::string clients_max_raw = server["clients_max"].asString();
char* endptr = 0;
- int numbervalue = strtol(clients_max_raw.c_str(),&endptr,10);
+ int numbervalue = strtol(clients_max_raw.c_str(), &endptr,10);
if ((!clients_max_raw.empty()) && (*endptr == 0)) {
- lua_pushstring(L,"clients_max");
- lua_pushnumber(L,numbervalue);
+ lua_pushstring(L, "clients_max");
+ lua_pushnumber(L, numbervalue);
lua_settable(L, top_lvl2);
}
}
if (!server["version"].asString().empty()) {
- lua_pushstring(L,"version");
+ lua_pushstring(L, "version");
std::string topush = server["version"].asString();
- lua_pushstring(L,topush.c_str());
+ lua_pushstring(L, topush.c_str());
lua_settable(L, top_lvl2);
}
if (!server["proto_min"].asString().empty()) {
- lua_pushstring(L,"proto_min");
+ lua_pushstring(L, "proto_min");
lua_pushinteger(L, server["proto_min"].asInt());
lua_settable(L, top_lvl2);
}
if (!server["proto_max"].asString().empty()) {
- lua_pushstring(L,"proto_max");
+ lua_pushstring(L, "proto_max");
lua_pushinteger(L, server["proto_max"].asInt());
lua_settable(L, top_lvl2);
}
if (!server["password"].asString().empty()) {
- lua_pushstring(L,"password");
+ lua_pushstring(L, "password");
lua_pushboolean(L, server["password"].asBool());
lua_settable(L, top_lvl2);
}
if (!server["creative"].asString().empty()) {
- lua_pushstring(L,"creative");
+ lua_pushstring(L, "creative");
lua_pushboolean(L, server["creative"].asBool());
lua_settable(L, top_lvl2);
}
if (!server["damage"].asString().empty()) {
- lua_pushstring(L,"damage");
+ lua_pushstring(L, "damage");
lua_pushboolean(L, server["damage"].asBool());
lua_settable(L, top_lvl2);
}
if (!server["pvp"].asString().empty()) {
- lua_pushstring(L,"pvp");
+ lua_pushstring(L, "pvp");
lua_pushboolean(L, server["pvp"].asBool());
lua_settable(L, top_lvl2);
}
if (!server["description"].asString().empty()) {
- lua_pushstring(L,"description");
+ lua_pushstring(L, "description");
std::string topush = server["description"].asString();
- lua_pushstring(L,topush.c_str());
+ lua_pushstring(L, topush.c_str());
lua_settable(L, top_lvl2);
}
if (!server["name"].asString().empty()) {
- lua_pushstring(L,"name");
+ lua_pushstring(L, "name");
std::string topush = server["name"].asString();
- lua_pushstring(L,topush.c_str());
+ lua_pushstring(L, topush.c_str());
lua_settable(L, top_lvl2);
}
if (!server["address"].asString().empty()) {
- lua_pushstring(L,"address");
+ lua_pushstring(L, "address");
std::string topush = server["address"].asString();
- lua_pushstring(L,topush.c_str());
+ lua_pushstring(L, topush.c_str());
lua_settable(L, top_lvl2);
}
if (!server["port"].asString().empty()) {
- lua_pushstring(L,"port");
+ lua_pushstring(L, "port");
std::string topush = server["port"].asString();
- lua_pushstring(L,topush.c_str());
+ lua_pushstring(L, topush.c_str());
lua_settable(L, top_lvl2);
}
@@ -406,6 +406,37 @@ int ModApiMainMenu::l_get_favorites(lua_State *L)
lua_settable(L, top_lvl2);
}
+ if (server["clients_list"].isArray()) {
+ unsigned int index_lvl2 = 1;
+ lua_pushstring(L, "clients_list");
+ lua_newtable(L);
+ int top_lvl3 = lua_gettop(L);
+ for (const Json::Value &client : server["clients_list"]) {
+ lua_pushnumber(L, index_lvl2);
+ std::string topush = client.asString();
+ lua_pushstring(L, topush.c_str());
+ lua_settable(L, top_lvl3);
+ index_lvl2++;
+ }
+ lua_settable(L, top_lvl2);
+ }
+
+ if (server["mods"].isArray()) {
+ unsigned int index_lvl2 = 1;
+ lua_pushstring(L, "mods");
+ lua_newtable(L);
+ int top_lvl3 = lua_gettop(L);
+ for (const Json::Value &mod : server["mods"]) {
+
+ lua_pushnumber(L, index_lvl2);
+ std::string topush = mod.asString();
+ lua_pushstring(L, topush.c_str());
+ lua_settable(L, top_lvl3);
+ index_lvl2++;
+ }
+ lua_settable(L, top_lvl2);
+ }
+
lua_settable(L, top);
index++;
}
@@ -571,9 +602,10 @@ int ModApiMainMenu::l_show_keys_menu(lua_State *L)
sanity_check(engine != NULL);
GUIKeyChangeMenu *kmenu = new GUIKeyChangeMenu(RenderingEngine::get_gui_env(),
- engine->m_parent,
- -1,
- engine->m_menumanager);
+ engine->m_parent,
+ -1,
+ engine->m_menumanager,
+ engine->m_texture_source);
kmenu->drop();
return 0;
}
@@ -904,12 +936,12 @@ int ModApiMainMenu::l_show_path_select_dialog(lua_State *L)
GUIFileSelectMenu* fileOpenMenu =
new GUIFileSelectMenu(RenderingEngine::get_gui_env(),
- engine->m_parent,
- -1,
- engine->m_menumanager,
- title,
- formname,
- is_file_select);
+ engine->m_parent,
+ -1,
+ engine->m_menumanager,
+ title,
+ formname,
+ is_file_select);
fileOpenMenu->setTextDest(engine->m_buttonhandler);
fileOpenMenu->drop();
return 0;
@@ -1032,6 +1064,14 @@ int ModApiMainMenu::l_get_max_supp_proto(lua_State *L)
}
/******************************************************************************/
+int ModApiMainMenu::l_open_url(lua_State *L)
+{
+ std::string url = luaL_checkstring(L, 1);
+ lua_pushboolean(L, porting::openURL(url));
+ return 1;
+}
+
+/******************************************************************************/
int ModApiMainMenu::l_do_async_callback(lua_State *L)
{
GUIEngine* engine = getGuiEngine(L);
@@ -1093,6 +1133,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(get_screen_info);
API_FCT(get_min_supp_proto);
API_FCT(get_max_supp_proto);
+ API_FCT(open_url);
API_FCT(do_async_callback);
}
diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h
index b2ca49320..5a16b3bfe 100644
--- a/src/script/lua_api/l_mainmenu.h
+++ b/src/script/lua_api/l_mainmenu.h
@@ -145,6 +145,9 @@ private:
static int l_get_max_supp_proto(lua_State *L);
+ // other
+ static int l_open_url(lua_State *L);
+
// async
static int l_do_async_callback(lua_State *L);
diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp
index cb0d6ac95..834938e56 100644
--- a/src/script/lua_api/l_mapgen.cpp
+++ b/src/script/lua_api/l_mapgen.cpp
@@ -91,13 +91,13 @@ struct EnumString ModApiMapgen::es_SchematicFormatType[] =
{0, NULL},
};
-ObjDef *get_objdef(lua_State *L, int index, ObjDefManager *objmgr);
+ObjDef *get_objdef(lua_State *L, int index, const ObjDefManager *objmgr);
Biome *get_or_load_biome(lua_State *L, int index,
BiomeManager *biomemgr);
Biome *read_biome_def(lua_State *L, int index, const NodeDefManager *ndef);
size_t get_biome_list(lua_State *L, int index,
- BiomeManager *biomemgr, std::unordered_set<u8> *biome_id_list);
+ BiomeManager *biomemgr, std::unordered_set<biome_t> *biome_id_list);
Schematic *get_or_load_schematic(lua_State *L, int index,
SchematicManager *schemmgr, StringMap *replace_names);
@@ -114,7 +114,7 @@ bool read_deco_schematic(lua_State *L, SchematicManager *schemmgr, DecoSchematic
///////////////////////////////////////////////////////////////////////////////
-ObjDef *get_objdef(lua_State *L, int index, ObjDefManager *objmgr)
+ObjDef *get_objdef(lua_State *L, int index, const ObjDefManager *objmgr)
{
if (index < 0)
index = lua_gettop(L) + 1 + index;
@@ -425,7 +425,7 @@ Biome *read_biome_def(lua_State *L, int index, const NodeDefManager *ndef)
size_t get_biome_list(lua_State *L, int index,
- BiomeManager *biomemgr, std::unordered_set<u8> *biome_id_list)
+ BiomeManager *biomemgr, std::unordered_set<biome_t> *biome_id_list)
{
if (index < 0)
index = lua_gettop(L) + 1 + index;
@@ -486,11 +486,11 @@ int ModApiMapgen::l_get_biome_id(lua_State *L)
if (!biome_str)
return 0;
- BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr;
+ const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
if (!bmgr)
return 0;
- Biome *biome = (Biome *)bmgr->getByName(biome_str);
+ const Biome *biome = (Biome *)bmgr->getByName(biome_str);
if (!biome || biome->index == OBJDEF_INVALID_INDEX)
return 0;
@@ -508,11 +508,11 @@ int ModApiMapgen::l_get_biome_name(lua_State *L)
int biome_id = luaL_checkinteger(L, 1);
- BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr;
+ const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
if (!bmgr)
return 0;
- Biome *b = (Biome *)bmgr->getRaw(biome_id);
+ const Biome *b = (Biome *)bmgr->getRaw(biome_id);
lua_pushstring(L, b->name.c_str());
return 1;
@@ -546,13 +546,11 @@ int ModApiMapgen::l_get_heat(lua_State *L)
u64 seed;
ss >> seed;
- BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr;
+ 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;
lua_pushnumber(L, heat);
@@ -587,14 +585,12 @@ int ModApiMapgen::l_get_humidity(lua_State *L)
u64 seed;
ss >> seed;
- BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr;
+ const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
if (!bmgr)
return 0;
float humidity = bmgr->getHumidityAtPosOriginal(pos, np_humidity,
np_humidity_blend, seed);
- if (!humidity)
- return 0;
lua_pushnumber(L, humidity);
@@ -635,7 +631,7 @@ int ModApiMapgen::l_get_biome_data(lua_State *L)
u64 seed;
ss >> seed;
- BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr;
+ const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
if (!bmgr)
return 0;
@@ -648,7 +644,7 @@ int ModApiMapgen::l_get_biome_data(lua_State *L)
if (!humidity)
return 0;
- Biome *biome = (Biome *)bmgr->getBiomeFromNoiseOriginal(heat, humidity, pos);
+ const Biome *biome = bmgr->getBiomeFromNoiseOriginal(heat, humidity, pos);
if (!biome || biome->index == OBJDEF_INVALID_INDEX)
return 0;
@@ -710,7 +706,7 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
if (!mg->heightmap)
return 0;
- lua_newtable(L);
+ lua_createtable(L, maplen, 0);
for (size_t i = 0; i != maplen; i++) {
lua_pushinteger(L, mg->heightmap[i]);
lua_rawseti(L, -2, i + 1);
@@ -722,7 +718,7 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
if (!mg->biomegen)
return 0;
- lua_newtable(L);
+ lua_createtable(L, maplen, 0);
for (size_t i = 0; i != maplen; i++) {
lua_pushinteger(L, mg->biomegen->biomemap[i]);
lua_rawseti(L, -2, i + 1);
@@ -736,7 +732,7 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
BiomeGenOriginal *bg = (BiomeGenOriginal *)mg->biomegen;
- lua_newtable(L);
+ lua_createtable(L, maplen, 0);
for (size_t i = 0; i != maplen; i++) {
lua_pushnumber(L, bg->heatmap[i]);
lua_rawseti(L, -2, i + 1);
@@ -751,7 +747,7 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
BiomeGenOriginal *bg = (BiomeGenOriginal *)mg->biomegen;
- lua_newtable(L);
+ lua_createtable(L, maplen, 0);
for (size_t i = 0; i != maplen; i++) {
lua_pushnumber(L, bg->humidmap[i]);
lua_rawseti(L, -2, i + 1);
@@ -761,13 +757,12 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
}
case MGOBJ_GENNOTIFY: {
std::map<std::string, std::vector<v3s16> >event_map;
- std::map<std::string, std::vector<v3s16> >::iterator it;
mg->gennotify.getEvents(event_map);
- lua_newtable(L);
- for (it = event_map.begin(); it != event_map.end(); ++it) {
- lua_newtable(L);
+ lua_createtable(L, 0, event_map.size());
+ for (auto it = event_map.begin(); it != event_map.end(); ++it) {
+ lua_createtable(L, it->second.size(), 0);
for (size_t j = 0; j != it->second.size(); j++) {
push_v3s16(L, it->second[j]);
@@ -1067,7 +1062,8 @@ int ModApiMapgen::l_get_decoration_id(lua_State *L)
if (!deco_str)
return 0;
- DecorationManager *dmgr = getServer(L)->getEmergeManager()->decomgr;
+ const DecorationManager *dmgr =
+ getServer(L)->getEmergeManager()->getDecorationManager();
if (!dmgr)
return 0;
@@ -1092,7 +1088,7 @@ int ModApiMapgen::l_register_biome(lua_State *L)
luaL_checktype(L, index, LUA_TTABLE);
const NodeDefManager *ndef = getServer(L)->getNodeDefManager();
- BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr;
+ BiomeManager *bmgr = getServer(L)->getEmergeManager()->getWritableBiomeManager();
Biome *biome = read_biome_def(L, index, ndef);
if (!biome)
@@ -1118,9 +1114,10 @@ int ModApiMapgen::l_register_decoration(lua_State *L)
luaL_checktype(L, index, LUA_TTABLE);
const NodeDefManager *ndef = getServer(L)->getNodeDefManager();
- DecorationManager *decomgr = getServer(L)->getEmergeManager()->decomgr;
- BiomeManager *biomemgr = getServer(L)->getEmergeManager()->biomemgr;
- SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr;
+ EmergeManager *emerge = getServer(L)->getEmergeManager();
+ DecorationManager *decomgr = emerge->getWritableDecorationManager();
+ BiomeManager *biomemgr = emerge->getWritableBiomeManager();
+ SchematicManager *schemmgr = emerge->getWritableSchematicManager();
enum DecorationType decotype = (DecorationType)getenumfield(L, index,
"deco_type", es_DecorationType, -1);
@@ -1275,8 +1272,9 @@ int ModApiMapgen::l_register_ore(lua_State *L)
luaL_checktype(L, index, LUA_TTABLE);
const NodeDefManager *ndef = getServer(L)->getNodeDefManager();
- BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr;
- OreManager *oremgr = getServer(L)->getEmergeManager()->oremgr;
+ EmergeManager *emerge = getServer(L)->getEmergeManager();
+ BiomeManager *bmgr = emerge->getWritableBiomeManager();
+ OreManager *oremgr = emerge->getWritableOreManager();
enum OreType oretype = (OreType)getenumfield(L, index,
"ore_type", es_OreType, ORE_SCATTER);
@@ -1423,7 +1421,8 @@ int ModApiMapgen::l_register_schematic(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr;
+ SchematicManager *schemmgr =
+ getServer(L)->getEmergeManager()->getWritableSchematicManager();
StringMap replace_names;
if (lua_istable(L, 2))
@@ -1450,7 +1449,8 @@ int ModApiMapgen::l_clear_registered_biomes(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr;
+ BiomeManager *bmgr =
+ getServer(L)->getEmergeManager()->getWritableBiomeManager();
bmgr->clear();
return 0;
}
@@ -1461,7 +1461,8 @@ int ModApiMapgen::l_clear_registered_decorations(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- DecorationManager *dmgr = getServer(L)->getEmergeManager()->decomgr;
+ DecorationManager *dmgr =
+ getServer(L)->getEmergeManager()->getWritableDecorationManager();
dmgr->clear();
return 0;
}
@@ -1472,7 +1473,8 @@ int ModApiMapgen::l_clear_registered_ores(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- OreManager *omgr = getServer(L)->getEmergeManager()->oremgr;
+ OreManager *omgr =
+ getServer(L)->getEmergeManager()->getWritableOreManager();
omgr->clear();
return 0;
}
@@ -1483,7 +1485,8 @@ int ModApiMapgen::l_clear_registered_schematics(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- SchematicManager *smgr = getServer(L)->getEmergeManager()->schemmgr;
+ SchematicManager *smgr =
+ getServer(L)->getEmergeManager()->getWritableSchematicManager();
smgr->clear();
return 0;
}
@@ -1708,7 +1711,7 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr;
+ const SchematicManager *schemmgr = getServer(L)->getEmergeManager()->getSchematicManager();
//// Read options
bool use_comments = getboolfield_default(L, 3, "lua_use_comments", false);
@@ -1716,7 +1719,7 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L)
//// Get schematic
bool was_loaded = false;
- Schematic *schem = (Schematic *)get_objdef(L, 1, schemmgr);
+ const Schematic *schem = (Schematic *)get_objdef(L, 1, schemmgr);
if (!schem) {
schem = load_schematic(L, 1, NULL, NULL);
was_loaded = true;
@@ -1759,7 +1762,8 @@ int ModApiMapgen::l_read_schematic(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr;
+ const SchematicManager *schemmgr =
+ getServer(L)->getEmergeManager()->getSchematicManager();
//// Read options
std::string write_yslice = getstringfield_default(L, 2, "write_yslice_prob", "all");
diff --git a/src/script/lua_api/l_mapgen.h b/src/script/lua_api/l_mapgen.h
index 4a6a9ccf4..0bdc56fc5 100644
--- a/src/script/lua_api/l_mapgen.h
+++ b/src/script/lua_api/l_mapgen.h
@@ -21,6 +21,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_base.h"
+typedef u16 biome_t; // copy from mg_biome.h to avoid an unnecessary include
+
class ModApiMapgen : public ModApiBase
{
private:
diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp
index 229ce73db..57052cb42 100644
--- a/src/script/lua_api/l_nodemeta.cpp
+++ b/src/script/lua_api/l_nodemeta.cpp
@@ -55,11 +55,13 @@ Metadata* NodeMetaRef::getmeta(bool auto_create)
void NodeMetaRef::clearMeta()
{
+ SANITY_CHECK(!m_is_local);
m_env->getMap().removeNodeMetadata(m_p);
}
void NodeMetaRef::reportMetadataChange(const std::string *name)
{
+ SANITY_CHECK(!m_is_local);
// NOTE: This same code is in rollback_interface.cpp
// Inform other things that the metadata has changed
NodeMetadata *meta = dynamic_cast<NodeMetadata*>(m_meta);
diff --git a/src/script/lua_api/l_nodetimer.cpp b/src/script/lua_api/l_nodetimer.cpp
index 15a59744f..c2df52c05 100644
--- a/src/script/lua_api/l_nodetimer.cpp
+++ b/src/script/lua_api/l_nodetimer.cpp
@@ -41,11 +41,9 @@ int NodeTimerRef::l_set(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
- ServerEnvironment *env = o->m_env;
- if(env == NULL) return 0;
f32 t = readParam<float>(L,2);
f32 e = readParam<float>(L,3);
- env->getMap().setNodeTimer(NodeTimer(t, e, o->m_p));
+ o->m_map->setNodeTimer(NodeTimer(t, e, o->m_p));
return 0;
}
@@ -53,10 +51,8 @@ int NodeTimerRef::l_start(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
- ServerEnvironment *env = o->m_env;
- if(env == NULL) return 0;
f32 t = readParam<float>(L,2);
- env->getMap().setNodeTimer(NodeTimer(t, 0, o->m_p));
+ o->m_map->setNodeTimer(NodeTimer(t, 0, o->m_p));
return 0;
}
@@ -64,9 +60,7 @@ int NodeTimerRef::l_stop(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
- ServerEnvironment *env = o->m_env;
- if(env == NULL) return 0;
- env->getMap().removeNodeTimer(o->m_p);
+ o->m_map->removeNodeTimer(o->m_p);
return 0;
}
@@ -74,10 +68,7 @@ int NodeTimerRef::l_is_started(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
- ServerEnvironment *env = o->m_env;
- if(env == NULL) return 0;
-
- NodeTimer t = env->getMap().getNodeTimer(o->m_p);
+ NodeTimer t = o->m_map->getNodeTimer(o->m_p);
lua_pushboolean(L,(t.timeout != 0));
return 1;
}
@@ -86,10 +77,7 @@ int NodeTimerRef::l_get_timeout(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
- ServerEnvironment *env = o->m_env;
- if(env == NULL) return 0;
-
- NodeTimer t = env->getMap().getNodeTimer(o->m_p);
+ NodeTimer t = o->m_map->getNodeTimer(o->m_p);
lua_pushnumber(L,t.timeout);
return 1;
}
@@ -98,37 +86,21 @@ int NodeTimerRef::l_get_elapsed(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
- ServerEnvironment *env = o->m_env;
- if(env == NULL) return 0;
-
- NodeTimer t = env->getMap().getNodeTimer(o->m_p);
+ NodeTimer t = o->m_map->getNodeTimer(o->m_p);
lua_pushnumber(L,t.elapsed);
return 1;
}
-
-NodeTimerRef::NodeTimerRef(v3s16 p, ServerEnvironment *env):
- m_p(p),
- m_env(env)
-{
-}
-
// Creates an NodeTimerRef and leaves it on top of stack
// Not callable from Lua; all references are created on the C side.
-void NodeTimerRef::create(lua_State *L, v3s16 p, ServerEnvironment *env)
+void NodeTimerRef::create(lua_State *L, v3s16 p, ServerMap *map)
{
- NodeTimerRef *o = new NodeTimerRef(p, env);
+ NodeTimerRef *o = new NodeTimerRef(p, map);
*(void **)(lua_newuserdata(L, sizeof(void *))) = o;
luaL_getmetatable(L, className);
lua_setmetatable(L, -2);
}
-void NodeTimerRef::set_null(lua_State *L)
-{
- NodeTimerRef *o = checkobject(L, -1);
- o->m_env = NULL;
-}
-
void NodeTimerRef::Register(lua_State *L)
{
lua_newtable(L);
diff --git a/src/script/lua_api/l_nodetimer.h b/src/script/lua_api/l_nodetimer.h
index b894c5c8c..bbc975fd2 100644
--- a/src/script/lua_api/l_nodetimer.h
+++ b/src/script/lua_api/l_nodetimer.h
@@ -22,13 +22,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irr_v3d.h"
#include "lua_api/l_base.h"
-class ServerEnvironment;
+class ServerMap;
class NodeTimerRef : public ModApiBase
{
private:
v3s16 m_p;
- ServerEnvironment *m_env = nullptr;
+ ServerMap *m_map;
static const char className[];
static const luaL_Reg methods[];
@@ -50,14 +50,12 @@ private:
static int l_get_elapsed(lua_State *L);
public:
- NodeTimerRef(v3s16 p, ServerEnvironment *env);
+ NodeTimerRef(v3s16 p, ServerMap *map) : m_p(p), m_map(map) {}
~NodeTimerRef() = default;
// Creates an NodeTimerRef and leaves it on top of stack
// Not callable from Lua; all references are created on the C side.
- static void create(lua_State *L, v3s16 p, ServerEnvironment *env);
-
- static void set_null(lua_State *L);
+ static void create(lua_State *L, v3s16 p, ServerMap *map);
static void Register(lua_State *L);
};
diff --git a/src/script/lua_api/l_noise.cpp b/src/script/lua_api/l_noise.cpp
index e38d319f4..9aeb15709 100644
--- a/src/script/lua_api/l_noise.cpp
+++ b/src/script/lua_api/l_noise.cpp
@@ -171,9 +171,9 @@ int LuaPerlinNoiseMap::l_get_2d_map(lua_State *L)
Noise *n = o->noise;
n->perlinMap2D(p.X, p.Y);
- lua_newtable(L);
+ lua_createtable(L, n->sy, 0);
for (u32 y = 0; y != n->sy; y++) {
- lua_newtable(L);
+ lua_createtable(L, n->sx, 0);
for (u32 x = 0; x != n->sx; x++) {
lua_pushnumber(L, n->result[i++]);
lua_rawseti(L, -2, x + 1);
@@ -200,7 +200,7 @@ int LuaPerlinNoiseMap::l_get_2d_map_flat(lua_State *L)
if (use_buffer)
lua_pushvalue(L, 3);
else
- lua_newtable(L);
+ lua_createtable(L, maplen, 0);
for (size_t i = 0; i != maplen; i++) {
lua_pushnumber(L, n->result[i]);
@@ -224,11 +224,11 @@ int LuaPerlinNoiseMap::l_get_3d_map(lua_State *L)
Noise *n = o->noise;
n->perlinMap3D(p.X, p.Y, p.Z);
- lua_newtable(L);
+ lua_createtable(L, n->sz, 0);
for (u32 z = 0; z != n->sz; z++) {
- lua_newtable(L);
+ lua_createtable(L, n->sy, 0);
for (u32 y = 0; y != n->sy; y++) {
- lua_newtable(L);
+ lua_createtable(L, n->sx, 0);
for (u32 x = 0; x != n->sx; x++) {
lua_pushnumber(L, n->result[i++]);
lua_rawseti(L, -2, x + 1);
@@ -260,7 +260,7 @@ int LuaPerlinNoiseMap::l_get_3d_map_flat(lua_State *L)
if (use_buffer)
lua_pushvalue(L, 3);
else
- lua_newtable(L);
+ lua_createtable(L, maplen, 0);
for (size_t i = 0; i != maplen; i++) {
lua_pushnumber(L, n->result[i]);
diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp
index 23ed1ffe0..e7394133a 100644
--- a/src/script/lua_api/l_object.cpp
+++ b/src/script/lua_api/l_object.cpp
@@ -27,12 +27,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_content.h"
#include "log.h"
#include "tool.h"
-#include "serverobject.h"
-#include "content_sao.h"
#include "remoteplayer.h"
#include "server.h"
#include "hud.h"
#include "scripting_server.h"
+#include "server/luaentity_sao.h"
+#include "server/player_sao.h"
+#include "server/serverinventorymgr.h"
/*
ObjectRef
@@ -50,6 +51,8 @@ ObjectRef* ObjectRef::checkobject(lua_State *L, int narg)
ServerActiveObject* ObjectRef::getobject(ObjectRef *ref)
{
ServerActiveObject *co = ref->m_object;
+ if (co && co->isGone())
+ return NULL;
return co;
}
@@ -60,8 +63,6 @@ LuaEntitySAO* ObjectRef::getluaobject(ObjectRef *ref)
return NULL;
if (obj->getType() != ACTIVEOBJECT_TYPE_LUAENTITY)
return NULL;
- if (obj->isGone())
- return NULL;
return (LuaEntitySAO*)obj;
}
@@ -72,8 +73,6 @@ PlayerSAO* ObjectRef::getplayersao(ObjectRef *ref)
return NULL;
if (obj->getType() != ACTIVEOBJECT_TYPE_PLAYER)
return NULL;
- if (obj->isGone())
- return NULL;
return (PlayerSAO*)obj;
}
@@ -123,14 +122,7 @@ int ObjectRef::l_get_pos(lua_State *L)
ObjectRef *ref = checkobject(L, 1);
ServerActiveObject *co = getobject(ref);
if (co == NULL) return 0;
- v3f pos = co->getBasePosition() / BS;
- lua_newtable(L);
- lua_pushnumber(L, pos.X);
- lua_setfield(L, -2, "x");
- lua_pushnumber(L, pos.Y);
- lua_setfield(L, -2, "y");
- lua_pushnumber(L, pos.Z);
- lua_setfield(L, -2, "z");
+ push_v3f(L, co->getBasePosition() / BS);
return 1;
}
@@ -139,7 +131,6 @@ int ObjectRef::l_set_pos(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
- //LuaEntitySAO *co = getluaobject(ref);
ServerActiveObject *co = getobject(ref);
if (co == NULL) return 0;
// pos
@@ -154,7 +145,6 @@ int ObjectRef::l_move_to(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
- //LuaEntitySAO *co = getluaobject(ref);
ServerActiveObject *co = getobject(ref);
if (co == NULL) return 0;
// pos
@@ -300,7 +290,7 @@ int ObjectRef::l_get_inventory(lua_State *L)
if (co == NULL) return 0;
// Do it
InventoryLocation loc = co->getInventoryLocation();
- if (getServer(L)->getInventory(loc) != NULL)
+ if (getServerInventoryMgr(L)->getInventory(loc) != NULL)
InvRef::create(L, loc);
else
lua_pushnil(L); // An object may have no inventory (nil)
@@ -533,7 +523,7 @@ int ObjectRef::l_set_local_animation(lua_State *L)
// get_local_animation(self)
int ObjectRef::l_get_local_animation(lua_State *L)
{
- NO_MAP_LOCK_REQUIRED
+ NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
RemotePlayer *player = getplayer(ref);
if (player == NULL)
@@ -685,8 +675,13 @@ int ObjectRef::l_set_attach(lua_State *L)
ServerActiveObject *parent = getobject(parent_ref);
if (co == NULL)
return 0;
+
if (parent == NULL)
return 0;
+
+ if (co == parent)
+ throw LuaError("ObjectRef::set_attach: attaching object to itself is not allowed.");
+
// Do it
int parent_id = 0;
std::string bone;
@@ -1109,17 +1104,13 @@ int ObjectRef::l_add_player_velocity(lua_State *L)
ObjectRef *ref = checkobject(L, 1);
v3f vel = checkFloatPos(L, 2);
- RemotePlayer *player = getplayer(ref);
PlayerSAO *co = getplayersao(ref);
- if (!player || !co)
+ if (!co)
return 0;
- session_t peer_id = player->getPeerId();
- if (peer_id == PEER_ID_INEXISTENT)
- return 0;
// Do it
co->setMaxSpeedOverride(vel);
- getServer(L)->SendPlayerSpeed(peer_id, vel);
+ getServer(L)->SendPlayerSpeed(co->getPeerID(), vel);
return 0;
}
@@ -1259,7 +1250,7 @@ int ObjectRef::l_set_look_yaw(lua_State *L)
return 1;
}
-// set_fov(self, degrees[, is_multiplier])
+// set_fov(self, degrees[, is_multiplier, transition_time])
int ObjectRef::l_set_fov(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -1268,7 +1259,11 @@ int ObjectRef::l_set_fov(lua_State *L)
if (!player)
return 0;
- player->setFov({ static_cast<f32>(luaL_checknumber(L, 2)), readParam<bool>(L, 3) });
+ player->setFov({
+ static_cast<f32>(luaL_checknumber(L, 2)),
+ readParam<bool>(L, 3, false),
+ lua_isnumber(L, 4) ? static_cast<f32>(luaL_checknumber(L, 4)) : 0.0f
+ });
getServer(L)->SendPlayerFov(player->getPeerId());
return 0;
@@ -1286,8 +1281,9 @@ int ObjectRef::l_get_fov(lua_State *L)
PlayerFovSpec fov_spec = player->getFov();
lua_pushnumber(L, fov_spec.fov);
lua_pushboolean(L, fov_spec.is_multiplier);
+ lua_pushnumber(L, fov_spec.transition_time);
- return 2;
+ return 3;
}
// set_breath(self, breath)
@@ -1463,6 +1459,8 @@ int ObjectRef::l_get_player_control(lua_State *L)
lua_setfield(L, -2, "LMB");
lua_pushboolean(L, control.RMB);
lua_setfield(L, -2, "RMB");
+ lua_pushboolean(L, control.zoom);
+ lua_setfield(L, -2, "zoom");
return 1;
}
@@ -1787,19 +1785,19 @@ int ObjectRef::l_set_sky(lua_State *L)
lua_pop(L, 1);
// Prevent flickering clouds at dawn/dusk:
- skybox_params.sun_tint = video::SColor(255, 255, 255, 255);
+ skybox_params.fog_sun_tint = video::SColor(255, 255, 255, 255);
lua_getfield(L, -1, "fog_sun_tint");
- read_color(L, -1, &skybox_params.sun_tint);
+ read_color(L, -1, &skybox_params.fog_sun_tint);
lua_pop(L, 1);
- skybox_params.moon_tint = video::SColor(255, 255, 255, 255);
+ skybox_params.fog_moon_tint = video::SColor(255, 255, 255, 255);
lua_getfield(L, -1, "fog_moon_tint");
- read_color(L, -1, &skybox_params.moon_tint);
+ read_color(L, -1, &skybox_params.fog_moon_tint);
lua_pop(L, 1);
lua_getfield(L, -1, "fog_tint_type");
if (!lua_isnil(L, -1))
- skybox_params.tint_type = luaL_checkstring(L, -1);
+ skybox_params.fog_tint_type = luaL_checkstring(L, -1);
lua_pop(L, 1);
// Because we need to leave the "sky_color" table.
@@ -1917,12 +1915,12 @@ int ObjectRef::l_get_sky_color(lua_State *L)
push_ARGB8(L, skybox_params.sky_color.indoors);
lua_setfield(L, -2, "indoors");
}
- push_ARGB8(L, skybox_params.sun_tint);
- lua_setfield(L, -2, "sun_tint");
- push_ARGB8(L, skybox_params.moon_tint);
- lua_setfield(L, -2, "moon_tint");
- lua_pushstring(L, skybox_params.tint_type.c_str());
- lua_setfield(L, -2, "tint_type");
+ push_ARGB8(L, skybox_params.fog_sun_tint);
+ lua_setfield(L, -2, "fog_sun_tint");
+ push_ARGB8(L, skybox_params.fog_moon_tint);
+ lua_setfield(L, -2, "fog_moon_tint");
+ lua_pushstring(L, skybox_params.fog_tint_type.c_str());
+ lua_setfield(L, -2, "fog_tint_type");
return 1;
}
@@ -2177,9 +2175,7 @@ int ObjectRef::l_override_day_night_ratio(lua_State *L)
ratio = readParam<float>(L, 2);
}
- if (!getServer(L)->overrideDayNightRatio(player, do_override, ratio))
- return 0;
-
+ getServer(L)->overrideDayNightRatio(player, do_override, ratio);
lua_pushboolean(L, true);
return 1;
}
diff --git a/src/script/lua_api/l_particles.cpp b/src/script/lua_api/l_particles.cpp
index 340903ebf..a51c4fe20 100644
--- a/src/script/lua_api/l_particles.cpp
+++ b/src/script/lua_api/l_particles.cpp
@@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_converter.h"
#include "common/c_content.h"
#include "server.h"
-#include "client/particles.h"
+#include "particles.h"
// add_particle({pos=, velocity=, acceleration=, expirationtime=,
// size=, collisiondetection=, collision_removal=, object_collision=,
@@ -40,85 +40,88 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// glow = num
int ModApiParticles::l_add_particle(lua_State *L)
{
- MAP_LOCK_REQUIRED;
+ NO_MAP_LOCK_REQUIRED;
// Get parameters
- v3f pos, vel, acc;
- float expirationtime, size;
- expirationtime = size = 1;
- bool collisiondetection, vertical, collision_removal, object_collision;
- collisiondetection = vertical = collision_removal = object_collision = false;
- struct TileAnimationParams animation;
- animation.type = TAT_NONE;
- std::string texture;
+ struct ParticleParameters p;
std::string playername;
- u8 glow = 0;
if (lua_gettop(L) > 1) // deprecated
{
- log_deprecated(L, "Deprecated add_particle call with individual parameters instead of definition");
- pos = check_v3f(L, 1);
- vel = check_v3f(L, 2);
- acc = check_v3f(L, 3);
- expirationtime = luaL_checknumber(L, 4);
- size = luaL_checknumber(L, 5);
- collisiondetection = readParam<bool>(L, 6);
- texture = luaL_checkstring(L, 7);
+ log_deprecated(L, "Deprecated add_particle call with "
+ "individual parameters instead of definition");
+ p.pos = check_v3f(L, 1);
+ p.vel = check_v3f(L, 2);
+ p.acc = check_v3f(L, 3);
+ p.expirationtime = luaL_checknumber(L, 4);
+ p.size = luaL_checknumber(L, 5);
+ p.collisiondetection = readParam<bool>(L, 6);
+ p.texture = luaL_checkstring(L, 7);
if (lua_gettop(L) == 8) // only spawn for a single player
playername = luaL_checkstring(L, 8);
}
else if (lua_istable(L, 1))
{
lua_getfield(L, 1, "pos");
- pos = lua_istable(L, -1) ? check_v3f(L, -1) : v3f();
+ if (lua_istable(L, -1))
+ p.pos = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "vel");
if (lua_istable(L, -1)) {
- vel = check_v3f(L, -1);
+ p.vel = check_v3f(L, -1);
log_deprecated(L, "The use of vel is deprecated. "
"Use velocity instead");
}
lua_pop(L, 1);
lua_getfield(L, 1, "velocity");
- vel = lua_istable(L, -1) ? check_v3f(L, -1) : vel;
+ if (lua_istable(L, -1))
+ p.vel = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "acc");
if (lua_istable(L, -1)) {
- acc = check_v3f(L, -1);
+ p.acc = check_v3f(L, -1);
log_deprecated(L, "The use of acc is deprecated. "
"Use acceleration instead");
}
lua_pop(L, 1);
lua_getfield(L, 1, "acceleration");
- acc = lua_istable(L, -1) ? check_v3f(L, -1) : acc;
+ if (lua_istable(L, -1))
+ p.acc = check_v3f(L, -1);
lua_pop(L, 1);
- expirationtime = getfloatfield_default(L, 1, "expirationtime", 1);
- size = getfloatfield_default(L, 1, "size", 1);
- collisiondetection = getboolfield_default(L, 1,
- "collisiondetection", collisiondetection);
- collision_removal = getboolfield_default(L, 1,
- "collision_removal", collision_removal);
- object_collision = getboolfield_default(L, 1,
- "object_collision", object_collision);
- vertical = getboolfield_default(L, 1, "vertical", vertical);
+ p.expirationtime = getfloatfield_default(L, 1, "expirationtime",
+ p.expirationtime);
+ p.size = getfloatfield_default(L, 1, "size", p.size);
+ p.collisiondetection = getboolfield_default(L, 1,
+ "collisiondetection", p.collisiondetection);
+ p.collision_removal = getboolfield_default(L, 1,
+ "collision_removal", p.collision_removal);
+ p.object_collision = getboolfield_default(L, 1,
+ "object_collision", p.object_collision);
+ p.vertical = getboolfield_default(L, 1, "vertical", p.vertical);
lua_getfield(L, 1, "animation");
- animation = read_animation_definition(L, -1);
+ p.animation = read_animation_definition(L, -1);
lua_pop(L, 1);
- texture = getstringfield_default(L, 1, "texture", "");
- playername = getstringfield_default(L, 1, "playername", "");
+ p.texture = getstringfield_default(L, 1, "texture", p.texture);
+ p.glow = getintfield_default(L, 1, "glow", p.glow);
+
+ lua_getfield(L, 1, "node");
+ if (lua_istable(L, -1))
+ p.node = readnode(L, -1, getGameDef(L)->ndef());
+ lua_pop(L, 1);
- glow = getintfield_default(L, 1, "glow", 0);
+ p.node_tile = getintfield_default(L, 1, "node_tile", p.node_tile);
+
+ playername = getstringfield_default(L, 1, "playername", "");
}
- getServer(L)->spawnParticle(playername, pos, vel, acc, expirationtime, size,
- collisiondetection, collision_removal, object_collision, vertical,
- texture, animation, glow);
+
+ getServer(L)->spawnParticle(playername, p);
return 1;
}
@@ -146,84 +149,82 @@ int ModApiParticles::l_add_particle(lua_State *L)
// glow = num
int ModApiParticles::l_add_particlespawner(lua_State *L)
{
- MAP_LOCK_REQUIRED;
+ NO_MAP_LOCK_REQUIRED;
// Get parameters
- u16 amount = 1;
- v3f minpos, maxpos, minvel, maxvel, minacc, maxacc;
- float time, minexptime, maxexptime, minsize, maxsize;
- time = minexptime = maxexptime = minsize = maxsize = 1;
- bool collisiondetection, vertical, collision_removal, object_collision;
- collisiondetection = vertical = collision_removal = object_collision = false;
- struct TileAnimationParams animation;
- animation.type = TAT_NONE;
+ ParticleSpawnerParameters p;
ServerActiveObject *attached = NULL;
- std::string texture;
std::string playername;
- u8 glow = 0;
if (lua_gettop(L) > 1) //deprecated
{
- log_deprecated(L,"Deprecated add_particlespawner call with individual parameters instead of definition");
- amount = luaL_checknumber(L, 1);
- time = luaL_checknumber(L, 2);
- minpos = check_v3f(L, 3);
- maxpos = check_v3f(L, 4);
- minvel = check_v3f(L, 5);
- maxvel = check_v3f(L, 6);
- minacc = check_v3f(L, 7);
- maxacc = check_v3f(L, 8);
- minexptime = luaL_checknumber(L, 9);
- maxexptime = luaL_checknumber(L, 10);
- minsize = luaL_checknumber(L, 11);
- maxsize = luaL_checknumber(L, 12);
- collisiondetection = readParam<bool>(L, 13);
- texture = luaL_checkstring(L, 14);
+ log_deprecated(L, "Deprecated add_particlespawner call with "
+ "individual parameters instead of definition");
+ p.amount = luaL_checknumber(L, 1);
+ p.time = luaL_checknumber(L, 2);
+ p.minpos = check_v3f(L, 3);
+ p.maxpos = check_v3f(L, 4);
+ p.minvel = check_v3f(L, 5);
+ p.maxvel = check_v3f(L, 6);
+ p.minacc = check_v3f(L, 7);
+ p.maxacc = check_v3f(L, 8);
+ p.minexptime = luaL_checknumber(L, 9);
+ p.maxexptime = luaL_checknumber(L, 10);
+ p.minsize = luaL_checknumber(L, 11);
+ p.maxsize = luaL_checknumber(L, 12);
+ p.collisiondetection = readParam<bool>(L, 13);
+ p.texture = luaL_checkstring(L, 14);
if (lua_gettop(L) == 15) // only spawn for a single player
playername = luaL_checkstring(L, 15);
}
else if (lua_istable(L, 1))
{
- amount = getintfield_default(L, 1, "amount", amount);
- time = getfloatfield_default(L, 1, "time", time);
+ p.amount = getintfield_default(L, 1, "amount", p.amount);
+ p.time = getfloatfield_default(L, 1, "time", p.time);
lua_getfield(L, 1, "minpos");
- minpos = lua_istable(L, -1) ? check_v3f(L, -1) : minpos;
+ if (lua_istable(L, -1))
+ p.minpos = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "maxpos");
- maxpos = lua_istable(L, -1) ? check_v3f(L, -1) : maxpos;
+ if (lua_istable(L, -1))
+ p.maxpos = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "minvel");
- minvel = lua_istable(L, -1) ? check_v3f(L, -1) : minvel;
+ if (lua_istable(L, -1))
+ p.minvel = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "maxvel");
- maxvel = lua_istable(L, -1) ? check_v3f(L, -1) : maxvel;
+ if (lua_istable(L, -1))
+ p.maxvel = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "minacc");
- minacc = lua_istable(L, -1) ? check_v3f(L, -1) : minacc;
+ if (lua_istable(L, -1))
+ p.minacc = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "maxacc");
- maxacc = lua_istable(L, -1) ? check_v3f(L, -1) : maxacc;
+ if (lua_istable(L, -1))
+ p.maxacc = check_v3f(L, -1);
lua_pop(L, 1);
- minexptime = getfloatfield_default(L, 1, "minexptime", minexptime);
- maxexptime = getfloatfield_default(L, 1, "maxexptime", maxexptime);
- minsize = getfloatfield_default(L, 1, "minsize", minsize);
- maxsize = getfloatfield_default(L, 1, "maxsize", maxsize);
- collisiondetection = getboolfield_default(L, 1,
- "collisiondetection", collisiondetection);
- collision_removal = getboolfield_default(L, 1,
- "collision_removal", collision_removal);
- object_collision = getboolfield_default(L, 1,
- "object_collision", object_collision);
+ p.minexptime = getfloatfield_default(L, 1, "minexptime", p.minexptime);
+ p.maxexptime = getfloatfield_default(L, 1, "maxexptime", p.maxexptime);
+ p.minsize = getfloatfield_default(L, 1, "minsize", p.minsize);
+ p.maxsize = getfloatfield_default(L, 1, "maxsize", p.maxsize);
+ p.collisiondetection = getboolfield_default(L, 1,
+ "collisiondetection", p.collisiondetection);
+ p.collision_removal = getboolfield_default(L, 1,
+ "collision_removal", p.collision_removal);
+ p.object_collision = getboolfield_default(L, 1,
+ "object_collision", p.object_collision);
lua_getfield(L, 1, "animation");
- animation = read_animation_definition(L, -1);
+ p.animation = read_animation_definition(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "attached");
@@ -233,25 +234,20 @@ int ModApiParticles::l_add_particlespawner(lua_State *L)
attached = ObjectRef::getobject(ref);
}
- vertical = getboolfield_default(L, 1, "vertical", vertical);
- texture = getstringfield_default(L, 1, "texture", "");
+ p.vertical = getboolfield_default(L, 1, "vertical", p.vertical);
+ p.texture = getstringfield_default(L, 1, "texture", p.texture);
playername = getstringfield_default(L, 1, "playername", "");
- glow = getintfield_default(L, 1, "glow", 0);
+ p.glow = getintfield_default(L, 1, "glow", p.glow);
+
+ lua_getfield(L, 1, "node");
+ if (lua_istable(L, -1))
+ p.node = readnode(L, -1, getGameDef(L)->ndef());
+ lua_pop(L, 1);
+
+ p.node_tile = getintfield_default(L, 1, "node_tile", p.node_tile);
}
- u32 id = getServer(L)->addParticleSpawner(amount, time,
- minpos, maxpos,
- minvel, maxvel,
- minacc, maxacc,
- minexptime, maxexptime,
- minsize, maxsize,
- collisiondetection,
- collision_removal,
- object_collision,
- attached,
- vertical,
- texture, playername,
- animation, glow);
+ u32 id = getServer(L)->addParticleSpawner(p, attached, playername);
lua_pushnumber(L, id);
return 1;
@@ -261,7 +257,7 @@ int ModApiParticles::l_add_particlespawner(lua_State *L)
// player (string) is optional
int ModApiParticles::l_delete_particlespawner(lua_State *L)
{
- MAP_LOCK_REQUIRED;
+ NO_MAP_LOCK_REQUIRED;
// Get parameters
u32 id = luaL_checknumber(L, 1);
diff --git a/src/script/lua_api/l_particles_local.cpp b/src/script/lua_api/l_particles_local.cpp
index a9bf55665..cc68b13a5 100644
--- a/src/script/lua_api/l_particles_local.cpp
+++ b/src/script/lua_api/l_particles_local.cpp
@@ -32,56 +32,51 @@ int ModApiParticlesLocal::l_add_particle(lua_State *L)
luaL_checktype(L, 1, LUA_TTABLE);
// Get parameters
- v3f pos, vel, acc;
- float expirationtime, size;
- bool collisiondetection, vertical, collision_removal;
-
- struct TileAnimationParams animation;
- animation.type = TAT_NONE;
-
- std::string texture;
-
- u8 glow;
+ ParticleParameters p;
lua_getfield(L, 1, "pos");
- pos = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0);
+ if (lua_istable(L, -1))
+ p.pos = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "velocity");
- vel = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0);
+ if (lua_istable(L, -1))
+ p.vel = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "acceleration");
- acc = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0);
+ if (lua_istable(L, -1))
+ p.acc = check_v3f(L, -1);
lua_pop(L, 1);
- expirationtime = getfloatfield_default(L, 1, "expirationtime", 1);
- size = getfloatfield_default(L, 1, "size", 1);
- collisiondetection = getboolfield_default(L, 1, "collisiondetection", false);
- collision_removal = getboolfield_default(L, 1, "collision_removal", false);
- vertical = getboolfield_default(L, 1, "vertical", false);
+ p.expirationtime = getfloatfield_default(L, 1, "expirationtime",
+ p.expirationtime);
+ p.size = getfloatfield_default(L, 1, "size", p.size);
+ p.collisiondetection = getboolfield_default(L, 1,
+ "collisiondetection", p.collisiondetection);
+ p.collision_removal = getboolfield_default(L, 1,
+ "collision_removal", p.collision_removal);
+ p.object_collision = getboolfield_default(L, 1,
+ "object_collision", p.object_collision);
+ p.vertical = getboolfield_default(L, 1, "vertical", p.vertical);
lua_getfield(L, 1, "animation");
- animation = read_animation_definition(L, -1);
+ p.animation = read_animation_definition(L, -1);
lua_pop(L, 1);
- texture = getstringfield_default(L, 1, "texture", "");
+ p.texture = getstringfield_default(L, 1, "texture", p.texture);
+ p.glow = getintfield_default(L, 1, "glow", p.glow);
+
+ lua_getfield(L, 1, "node");
+ if (lua_istable(L, -1))
+ p.node = readnode(L, -1, getGameDef(L)->ndef());
+ lua_pop(L, 1);
- glow = getintfield_default(L, 1, "glow", 0);
+ p.node_tile = getintfield_default(L, 1, "node_tile", p.node_tile);
ClientEvent *event = new ClientEvent();
- event->type = CE_SPAWN_PARTICLE;
- event->spawn_particle.pos = new v3f (pos);
- event->spawn_particle.vel = new v3f (vel);
- event->spawn_particle.acc = new v3f (acc);
- event->spawn_particle.expirationtime = expirationtime;
- event->spawn_particle.size = size;
- event->spawn_particle.collisiondetection = collisiondetection;
- event->spawn_particle.collision_removal = collision_removal;
- event->spawn_particle.vertical = vertical;
- event->spawn_particle.texture = new std::string(texture);
- event->spawn_particle.animation = animation;
- event->spawn_particle.glow = glow;
+ event->type = CE_SPAWN_PARTICLE;
+ event->spawn_particle = new ParticleParameters(p);
getClient(L)->pushToEventQueue(event);
return 0;
@@ -90,94 +85,76 @@ int ModApiParticlesLocal::l_add_particle(lua_State *L)
int ModApiParticlesLocal::l_add_particlespawner(lua_State *L)
{
luaL_checktype(L, 1, LUA_TTABLE);
- // Get parameters
- u16 amount;
- v3f minpos, maxpos, minvel, maxvel, minacc, maxacc;
- float time, minexptime, maxexptime, minsize, maxsize;
- bool collisiondetection, vertical, collision_removal;
- struct TileAnimationParams animation;
- animation.type = TAT_NONE;
- // TODO: Implement this when there is a way to get an objectref.
- // ServerActiveObject *attached = NULL;
- std::string texture;
- u8 glow;
+ // Get parameters
+ ParticleSpawnerParameters p;
- amount = getintfield_default(L, 1, "amount", 1);
- time = getfloatfield_default(L, 1, "time", 1);
+ p.amount = getintfield_default(L, 1, "amount", p.amount);
+ p.time = getfloatfield_default(L, 1, "time", p.time);
lua_getfield(L, 1, "minpos");
- minpos = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0);
+ if (lua_istable(L, -1))
+ p.minpos = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "maxpos");
- maxpos = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0);
+ if (lua_istable(L, -1))
+ p.maxpos = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "minvel");
- minvel = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0);
+ if (lua_istable(L, -1))
+ p.minvel = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "maxvel");
- maxvel = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0);
+ if (lua_istable(L, -1))
+ p.maxvel = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "minacc");
- minacc = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0);
+ if (lua_istable(L, -1))
+ p.minacc = check_v3f(L, -1);
lua_pop(L, 1);
lua_getfield(L, 1, "maxacc");
- maxacc = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(0, 0, 0);
+ if (lua_istable(L, -1))
+ p.maxacc = check_v3f(L, -1);
lua_pop(L, 1);
- minexptime = getfloatfield_default(L, 1, "minexptime", 1);
- maxexptime = getfloatfield_default(L, 1, "maxexptime", 1);
- minsize = getfloatfield_default(L, 1, "minsize", 1);
- maxsize = getfloatfield_default(L, 1, "maxsize", 1);
-
- collisiondetection = getboolfield_default(L, 1, "collisiondetection", false);
- collision_removal = getboolfield_default(L, 1, "collision_removal", false);
- vertical = getboolfield_default(L, 1, "vertical", false);
+ p.minexptime = getfloatfield_default(L, 1, "minexptime", p.minexptime);
+ p.maxexptime = getfloatfield_default(L, 1, "maxexptime", p.maxexptime);
+ p.minsize = getfloatfield_default(L, 1, "minsize", p.minsize);
+ p.maxsize = getfloatfield_default(L, 1, "maxsize", p.maxsize);
+ p.collisiondetection = getboolfield_default(L, 1,
+ "collisiondetection", p.collisiondetection);
+ p.collision_removal = getboolfield_default(L, 1,
+ "collision_removal", p.collision_removal);
+ p.object_collision = getboolfield_default(L, 1,
+ "object_collision", p.object_collision);
lua_getfield(L, 1, "animation");
- animation = read_animation_definition(L, -1);
+ p.animation = read_animation_definition(L, -1);
lua_pop(L, 1);
- // TODO: Implement this when a way to get an objectref on the client is added
-// lua_getfield(L, 1, "attached");
-// if (!lua_isnil(L, -1)) {
-// ObjectRef *ref = ObjectRef::checkobject(L, -1);
-// lua_pop(L, 1);
-// attached = ObjectRef::getobject(ref);
-// }
+ p.vertical = getboolfield_default(L, 1, "vertical", p.vertical);
+ p.texture = getstringfield_default(L, 1, "texture", p.texture);
+ p.glow = getintfield_default(L, 1, "glow", p.glow);
+
+ lua_getfield(L, 1, "node");
+ if (lua_istable(L, -1))
+ p.node = readnode(L, -1, getGameDef(L)->ndef());
+ lua_pop(L, 1);
- texture = getstringfield_default(L, 1, "texture", "");
- glow = getintfield_default(L, 1, "glow", 0);
+ p.node_tile = getintfield_default(L, 1, "node_tile", p.node_tile);
u64 id = getClient(L)->getParticleManager()->generateSpawnerId();
auto event = new ClientEvent();
- event->type = CE_ADD_PARTICLESPAWNER;
- event->add_particlespawner.amount = amount;
- event->add_particlespawner.spawntime = time;
- event->add_particlespawner.minpos = new v3f (minpos);
- event->add_particlespawner.maxpos = new v3f (maxpos);
- event->add_particlespawner.minvel = new v3f (minvel);
- event->add_particlespawner.maxvel = new v3f (maxvel);
- event->add_particlespawner.minacc = new v3f (minacc);
- event->add_particlespawner.maxacc = new v3f (maxacc);
- event->add_particlespawner.minexptime = minexptime;
- event->add_particlespawner.maxexptime = maxexptime;
- event->add_particlespawner.minsize = minsize;
- event->add_particlespawner.maxsize = maxsize;
- event->add_particlespawner.collisiondetection = collisiondetection;
- event->add_particlespawner.collision_removal = collision_removal;
- event->add_particlespawner.attached_id = 0;
- event->add_particlespawner.vertical = vertical;
- event->add_particlespawner.texture = new std::string(texture);
- event->add_particlespawner.id = id;
- event->add_particlespawner.animation = animation;
- event->add_particlespawner.glow = glow;
+ event->type = CE_ADD_PARTICLESPAWNER;
+ event->add_particlespawner.p = new ParticleSpawnerParameters(p);
+ event->add_particlespawner.attached_id = 0;
+ event->add_particlespawner.id = id;
getClient(L)->pushToEventQueue(event);
lua_pushnumber(L, id);
diff --git a/src/script/lua_api/l_particles_local.h b/src/script/lua_api/l_particles_local.h
index 5dff153b3..d8bb2b1c6 100644
--- a/src/script/lua_api/l_particles_local.h
+++ b/src/script/lua_api/l_particles_local.h
@@ -18,6 +18,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#pragma once
+
#include "lua_api/l_base.h"
class ModApiParticlesLocal : public ModApiBase
diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp
index 7e46bb020..befbfb936 100644
--- a/src/script/lua_api/l_server.cpp
+++ b/src/script/lua_api/l_server.cpp
@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_converter.h"
#include "common/c_content.h"
#include "cpp_api/s_base.h"
+#include "cpp_api/s_security.h"
#include "server.h"
#include "environment.h"
#include "remoteplayer.h"
@@ -138,52 +139,54 @@ int ModApiServer::l_get_player_ip(lua_State *L)
// get_player_information(name)
int ModApiServer::l_get_player_information(lua_State *L)
{
-
NO_MAP_LOCK_REQUIRED;
- const char * name = luaL_checkstring(L, 1);
- RemotePlayer *player = dynamic_cast<ServerEnvironment *>(getEnv(L))->getPlayer(name);
- if (player == NULL) {
+
+ Server *server = getServer(L);
+
+ const char *name = luaL_checkstring(L, 1);
+ RemotePlayer *player = server->getEnv().getPlayer(name);
+ if (!player) {
lua_pushnil(L); // no such player
return 1;
}
Address addr;
- try
- {
- addr = getServer(L)->getPeerAddress(player->getPeerId());
- } catch(const con::PeerNotFoundException &) {
+ try {
+ addr = server->getPeerAddress(player->getPeerId());
+ } catch (const con::PeerNotFoundException &) {
dstream << FUNCTION_NAME << ": peer was not found" << std::endl;
lua_pushnil(L); // error
return 1;
}
- float min_rtt,max_rtt,avg_rtt,min_jitter,max_jitter,avg_jitter;
+ float min_rtt, max_rtt, avg_rtt, min_jitter, max_jitter, avg_jitter;
ClientState state;
u32 uptime;
u16 prot_vers;
- u8 ser_vers,major,minor,patch;
- std::string vers_string;
-
-#define ERET(code) \
- if (!(code)) { \
- dstream << FUNCTION_NAME << ": peer was not found" << std::endl; \
- lua_pushnil(L); /* error */ \
- return 1; \
+ u8 ser_vers, major, minor, patch;
+ std::string vers_string, lang_code;
+
+ auto getConInfo = [&] (con::rtt_stat_type type, float *value) -> bool {
+ return server->getClientConInfo(player->getPeerId(), type, value);
+ };
+
+ bool have_con_info =
+ getConInfo(con::MIN_RTT, &min_rtt) &&
+ getConInfo(con::MAX_RTT, &max_rtt) &&
+ getConInfo(con::AVG_RTT, &avg_rtt) &&
+ getConInfo(con::MIN_JITTER, &min_jitter) &&
+ getConInfo(con::MAX_JITTER, &max_jitter) &&
+ getConInfo(con::AVG_JITTER, &avg_jitter);
+
+ bool r = server->getClientInfo(player->getPeerId(), &state, &uptime,
+ &ser_vers, &prot_vers, &major, &minor, &patch, &vers_string,
+ &lang_code);
+ if (!r) {
+ dstream << FUNCTION_NAME << ": peer was not found" << std::endl;
+ lua_pushnil(L); // error
+ return 1;
}
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MIN_RTT, &min_rtt))
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MAX_RTT, &max_rtt))
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::AVG_RTT, &avg_rtt))
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MIN_JITTER,
- &min_jitter))
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::MAX_JITTER,
- &max_jitter))
- ERET(getServer(L)->getClientConInfo(player->getPeerId(), con::AVG_JITTER,
- &avg_jitter))
-
- ERET(getServer(L)->getClientInfo(player->getPeerId(), &state, &uptime, &ser_vers,
- &prot_vers, &major, &minor, &patch, &vers_string))
-
lua_newtable(L);
int table = lua_gettop(L);
@@ -201,29 +204,31 @@ int ModApiServer::l_get_player_information(lua_State *L)
}
lua_settable(L, table);
- lua_pushstring(L,"min_rtt");
- lua_pushnumber(L, min_rtt);
- lua_settable(L, table);
+ if (have_con_info) { // may be missing
+ lua_pushstring(L, "min_rtt");
+ lua_pushnumber(L, min_rtt);
+ lua_settable(L, table);
- lua_pushstring(L,"max_rtt");
- lua_pushnumber(L, max_rtt);
- lua_settable(L, table);
+ lua_pushstring(L, "max_rtt");
+ lua_pushnumber(L, max_rtt);
+ lua_settable(L, table);
- lua_pushstring(L,"avg_rtt");
- lua_pushnumber(L, avg_rtt);
- lua_settable(L, table);
+ lua_pushstring(L, "avg_rtt");
+ lua_pushnumber(L, avg_rtt);
+ lua_settable(L, table);
- lua_pushstring(L,"min_jitter");
- lua_pushnumber(L, min_jitter);
- lua_settable(L, table);
+ lua_pushstring(L, "min_jitter");
+ lua_pushnumber(L, min_jitter);
+ lua_settable(L, table);
- lua_pushstring(L,"max_jitter");
- lua_pushnumber(L, max_jitter);
- lua_settable(L, table);
+ lua_pushstring(L, "max_jitter");
+ lua_pushnumber(L, max_jitter);
+ lua_settable(L, table);
- lua_pushstring(L,"avg_jitter");
- lua_pushnumber(L, avg_jitter);
- lua_settable(L, table);
+ lua_pushstring(L, "avg_jitter");
+ lua_pushnumber(L, avg_jitter);
+ lua_settable(L, table);
+ }
lua_pushstring(L,"connection_uptime");
lua_pushnumber(L, uptime);
@@ -237,6 +242,10 @@ int ModApiServer::l_get_player_information(lua_State *L)
lua_pushnumber(L, player->formspec_version);
lua_settable(L, table);
+ lua_pushstring(L, "lang_code");
+ lua_pushstring(L, lang_code.c_str());
+ lua_settable(L, table);
+
#ifndef NDEBUG
lua_pushstring(L,"serialization_version");
lua_pushnumber(L, ser_vers);
@@ -263,7 +272,6 @@ int ModApiServer::l_get_player_information(lua_State *L)
lua_settable(L, table);
#endif
-#undef ERET
return 1;
}
@@ -423,9 +431,6 @@ int ModApiServer::l_get_modnames(lua_State *L)
std::vector<std::string> modlist;
getServer(L)->getModNames(modlist);
- // Take unsorted items from mods_unsorted and sort them into
- // mods_sorted; not great performance but the number of mods on a
- // server will likely be small.
std::sort(modlist.begin(), modlist.end());
// Package them up for Lua
@@ -485,6 +490,23 @@ int ModApiServer::l_sound_fade(lua_State *L)
return 0;
}
+// dynamic_add_media(filepath)
+int ModApiServer::l_dynamic_add_media(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ // Reject adding media before the server has started up
+ if (!getEnv(L))
+ throw LuaError("Dynamic media cannot be added before server has started up");
+
+ std::string filepath = readParam<std::string>(L, 1);
+ CHECK_SECURE_PATH(L, filepath.c_str(), false);
+
+ bool ok = getServer(L)->dynamicAddMedia(filepath);
+ lua_pushboolean(L, ok);
+ return 1;
+}
+
// is_singleplayer()
int ModApiServer::l_is_singleplayer(lua_State *L)
{
@@ -549,6 +571,7 @@ void ModApiServer::Initialize(lua_State *L, int top)
API_FCT(sound_play);
API_FCT(sound_stop);
API_FCT(sound_fade);
+ API_FCT(dynamic_add_media);
API_FCT(get_player_information);
API_FCT(get_player_privs);
diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h
index b31fae9f6..3b590af9d 100644
--- a/src/script/lua_api/l_server.h
+++ b/src/script/lua_api/l_server.h
@@ -70,6 +70,9 @@ private:
// sound_fade(handle, step, gain)
static int l_sound_fade(lua_State *L);
+ // dynamic_add_media(filepath)
+ static int l_dynamic_add_media(lua_State *L);
+
// get_player_privs(name, text)
static int l_get_player_privs(lua_State *L);
diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp
index 75cd1dacf..99a006ec1 100644
--- a/src/script/lua_api/l_util.cpp
+++ b/src/script/lua_api/l_util.cpp
@@ -44,7 +44,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// log([level,] text)
// Writes a line to the logger.
-// The one-argument version logs to infostream.
+// The one-argument version logs to LL_NONE.
// The two-argument version accepts a log level.
// Either the special case "deprecated" for deprecation notices, or any specified in
// Logger::stringToLevel(name).
@@ -318,9 +318,13 @@ int ModApiUtil::l_decode_base64(lua_State *L)
NO_MAP_LOCK_REQUIRED;
size_t size;
- const char *data = luaL_checklstring(L, 1, &size);
+ const char *d = luaL_checklstring(L, 1, &size);
+ const std::string data = std::string(d, size);
+
+ if (!base64_is_valid(data))
+ return 0;
- std::string out = base64_decode(std::string(data, size));
+ std::string out = base64_decode(data);
lua_pushlstring(L, out.data(), out.size());
return 1;
diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h
index 5697aab15..9ff91bb53 100644
--- a/src/script/lua_api/l_util.h
+++ b/src/script/lua_api/l_util.h
@@ -37,7 +37,7 @@ private:
// log([level,] text)
// Writes a line to the logger.
- // The one-argument version logs to infostream.
+ // The one-argument version logs to LL_NONE.
// The two-argument version accepts a log level.
static int l_log(lua_State *L);
diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp
index fd73d21d1..b99b1d98c 100644
--- a/src/script/lua_api/l_vmanip.cpp
+++ b/src/script/lua_api/l_vmanip.cpp
@@ -72,7 +72,7 @@ int LuaVoxelManip::l_get_data(lua_State *L)
if (use_buffer)
lua_pushvalue(L, 2);
else
- lua_newtable(L);
+ lua_createtable(L, volume, 0);
for (u32 i = 0; i != volume; i++) {
lua_Integer cid = vm->m_data[i].getContent();
@@ -261,7 +261,7 @@ int LuaVoxelManip::l_get_light_data(lua_State *L)
u32 volume = vm->m_area.getVolume();
- lua_newtable(L);
+ lua_createtable(L, volume, 0);
for (u32 i = 0; i != volume; i++) {
lua_Integer light = vm->m_data[i].param1;
lua_pushinteger(L, light);
@@ -309,7 +309,7 @@ int LuaVoxelManip::l_get_param2_data(lua_State *L)
if (use_buffer)
lua_pushvalue(L, 2);
else
- lua_newtable(L);
+ lua_createtable(L, volume, 0);
for (u32 i = 0; i != volume; i++) {
lua_Integer param2 = vm->m_data[i].param2;
diff --git a/src/script/scripting_client.cpp b/src/script/scripting_client.cpp
index 36065a9d5..d71c79f0d 100644
--- a/src/script/scripting_client.cpp
+++ b/src/script/scripting_client.cpp
@@ -58,9 +58,6 @@ ClientScripting::ClientScripting(Client *client):
InitializeModApi(L, top);
lua_pop(L, 1);
- if (client->getMinimap())
- LuaMinimap::create(L, client->getMinimap());
-
// Push builtin initialization type
lua_pushstring(L, "client");
lua_setglobal(L, "INIT");
@@ -99,3 +96,8 @@ void ClientScripting::on_camera_ready(Camera *camera)
{
LuaCamera::create(getStack(), camera);
}
+
+void ClientScripting::on_minimap_ready(Minimap *minimap)
+{
+ LuaMinimap::create(getStack(), minimap);
+}
diff --git a/src/script/scripting_client.h b/src/script/scripting_client.h
index cfecfa165..3088029f0 100644
--- a/src/script/scripting_client.h
+++ b/src/script/scripting_client.h
@@ -28,6 +28,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class Client;
class LocalPlayer;
class Camera;
+class Minimap;
+
class ClientScripting:
virtual public ScriptApiBase,
public ScriptApiSecurity,
@@ -38,6 +40,7 @@ public:
ClientScripting(Client *client);
void on_client_ready(LocalPlayer *localplayer);
void on_camera_ready(Camera *camera);
+ void on_minimap_ready(Minimap *minimap);
private:
virtual void InitializeModApi(lua_State *L, int top);
diff --git a/src/script/scripting_mainmenu.cpp b/src/script/scripting_mainmenu.cpp
index b6068439a..0f672f917 100644
--- a/src/script/scripting_mainmenu.cpp
+++ b/src/script/scripting_mainmenu.cpp
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "content/mods.h"
#include "cpp_api/s_internal.h"
#include "lua_api/l_base.h"
+#include "lua_api/l_http.h"
#include "lua_api/l_mainmenu.h"
#include "lua_api/l_sound.h"
#include "lua_api/l_util.h"
@@ -67,10 +68,12 @@ void MainMenuScripting::initializeModApi(lua_State *L, int top)
ModApiMainMenu::Initialize(L, top);
ModApiUtil::Initialize(L, top);
ModApiSound::Initialize(L, top);
+ ModApiHttp::Initialize(L, top);
asyncEngine.registerStateInitializer(registerLuaClasses);
asyncEngine.registerStateInitializer(ModApiMainMenu::InitializeAsync);
asyncEngine.registerStateInitializer(ModApiUtil::InitializeAsync);
+ asyncEngine.registerStateInitializer(ModApiHttp::InitializeAsync);
// Initialize async environment
//TODO possibly make number of async threads configurable
diff --git a/src/script/scripting_server.cpp b/src/script/scripting_server.cpp
index cbf229640..85411ded4 100644
--- a/src/script/scripting_server.cpp
+++ b/src/script/scripting_server.cpp
@@ -62,6 +62,10 @@ ServerScripting::ServerScripting(Server* server):
if (g_settings->getBool("secure.enable_security")) {
initializeSecurity();
+ } else {
+ warningstream << "\\!/ Mod security should never be disabled, as it allows any mod to "
+ << "access the host machine."
+ << "Mods should use minetest.request_insecure_environment() instead \\!/" << std::endl;
}
lua_getglobal(L, "core");
diff --git a/src/server.cpp b/src/server.cpp
index cb7866d30..b9f6d1b0f 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -34,8 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "version.h"
#include "filesys.h"
#include "mapblock.h"
-#include "serverobject.h"
-#include "genericobject.h"
+#include "server/serveractiveobject.h"
#include "settings.h"
#include "profiler.h"
#include "log.h"
@@ -48,7 +47,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapgen/mg_biome.h"
#include "content_mapnode.h"
#include "content_nodemeta.h"
-#include "content_sao.h"
#include "content/mods.h"
#include "modchannels.h"
#include "serverlist.h"
@@ -65,6 +63,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "chatmessage.h"
#include "chat_interface.h"
#include "remoteplayer.h"
+#include "server/player_sao.h"
+#include "server/serverinventorymgr.h"
+#include "translation.h"
class ClientNotFoundException : public BaseException
{
@@ -229,18 +230,46 @@ Server::Server(
m_nodedef(createNodeDefManager()),
m_craftdef(createCraftDefManager()),
m_thread(new ServerThread(this)),
- m_uptime(0),
m_clients(m_con),
m_admin_chat(iface),
m_modchannel_mgr(new ModChannelMgr())
{
- m_lag = g_settings->getFloat("dedicated_server_step");
-
if (m_path_world.empty())
throw ServerError("Supplied empty world path");
if (!gamespec.isValid())
throw ServerError("Supplied invalid gamespec");
+
+#if USE_PROMETHEUS
+ m_metrics_backend = std::unique_ptr<MetricsBackend>(createPrometheusMetricsBackend());
+#else
+ m_metrics_backend = std::unique_ptr<MetricsBackend>(new MetricsBackend());
+#endif
+
+ m_uptime_counter = m_metrics_backend->addCounter("minetest_core_server_uptime", "Server uptime (in seconds)");
+ m_player_gauge = m_metrics_backend->addGauge("minetest_core_player_number", "Number of connected players");
+
+ m_timeofday_gauge = m_metrics_backend->addGauge(
+ "minetest_core_timeofday",
+ "Time of day value");
+
+ m_lag_gauge = m_metrics_backend->addGauge(
+ "minetest_core_latency",
+ "Latency value (in seconds)");
+
+ m_aom_buffer_counter = m_metrics_backend->addCounter(
+ "minetest_core_aom_generated_count",
+ "Number of active object messages generated");
+
+ m_packet_recv_counter = m_metrics_backend->addCounter(
+ "minetest_core_server_packet_recv",
+ "Processable packets received");
+
+ m_packet_recv_processed_counter = m_metrics_backend->addCounter(
+ "minetest_core_server_packet_recv_processed",
+ "Valid received packets processed");
+
+ m_lag_gauge->set(g_settings->getFloat("dedicated_server_step"));
}
Server::~Server()
@@ -310,11 +339,6 @@ Server::~Server()
infostream << "Server: Deinitializing scripting" << std::endl;
delete m_script;
- // Delete detached inventories
- for (auto &detached_inventory : m_detached_inventories) {
- delete detached_inventory.second;
- }
-
while (!m_unsent_map_edit_queue.empty()) {
delete m_unsent_map_edit_queue.front();
m_unsent_map_edit_queue.pop();
@@ -353,13 +377,16 @@ void Server::init()
MutexAutoLock envlock(m_env_mutex);
// Create the Map (loads map_meta.txt, overriding configured mapgen params)
- ServerMap *servermap = new ServerMap(m_path_world, this, m_emerge);
+ ServerMap *servermap = new ServerMap(m_path_world, this, m_emerge, m_metrics_backend.get());
// Initialize scripting
infostream << "Server: Initializing Lua" << std::endl;
m_script = new ServerScripting(this);
+ // Must be created before mod loading because we have some inventory creation
+ m_inventory_mgr = std::unique_ptr<ServerInventoryManager>(new ServerInventoryManager());
+
m_script->loadMod(getBuiltinLuaPath() + DIR_DELIM "init.lua", BUILTIN_MOD_NAME);
m_modmgr->loadMods(m_script);
@@ -374,16 +401,19 @@ void Server::init()
std::vector<std::string> paths;
fs::GetRecursiveDirs(paths, g_settings->get("texture_path"));
fs::GetRecursiveDirs(paths, m_gamespec.path + DIR_DELIM + "textures");
- for (const std::string &path : paths)
- m_nodedef->applyTextureOverrides(path + DIR_DELIM + "override.txt");
+ for (const std::string &path : paths) {
+ TextureOverrideSource override_source(path + DIR_DELIM + "override.txt");
+ m_nodedef->applyTextureOverrides(override_source.getNodeTileOverrides());
+ m_itemdef->applyTextureOverrides(override_source.getItemTextureOverrides());
+ }
m_nodedef->setNodeRegistrationStatus(true);
// Perform pending node name resolutions
m_nodedef->runNodeResolveCallbacks();
- // unmap node names for connected nodeboxes
- m_nodedef->mapNodeboxConnections();
+ // unmap node names in cross-references
+ m_nodedef->resolveCrossrefs();
// init the recipe hashes to speed up crafting
m_craftdef->initHashes(this);
@@ -391,6 +421,7 @@ void Server::init()
// Initialize Environment
m_env = new ServerEnvironment(servermap, m_script, this, m_path_world);
+ m_inventory_mgr->setEnv(m_env);
m_clients.setEnv(m_env);
if (!servermap->settings_mgr.makeMapgenParams())
@@ -412,6 +443,8 @@ void Server::init()
m_env->loadMeta();
+ // Those settings can be overwritten in world.mt, they are
+ // intended to be cached after environment loading.
m_liquid_transform_every = g_settings->getFloat("liquid_update");
m_max_chatmessage_length = g_settings->getU16("chat_message_max_size");
m_csm_restriction_flags = g_settings->getU64("csm_restriction_flags");
@@ -420,6 +453,8 @@ void Server::init()
void Server::start()
{
+ init();
+
infostream << "Starting server on " << m_bind_addr.serializeString()
<< "..." << std::endl;
@@ -508,9 +543,7 @@ void Server::AsyncRunStep(bool initial_step)
/*
Update uptime
*/
- {
- m_uptime.set(m_uptime.get() + dtime);
- }
+ m_uptime_counter->increment(dtime);
handlePeerChanges();
@@ -524,11 +557,13 @@ void Server::AsyncRunStep(bool initial_step)
*/
m_time_of_day_send_timer -= dtime;
- if(m_time_of_day_send_timer < 0.0) {
+ if (m_time_of_day_send_timer < 0.0) {
m_time_of_day_send_timer = g_settings->getFloat("time_send_interval");
u16 time = m_env->getTimeOfDay();
float time_speed = g_settings->getFloat("time_speed");
SendTimeOfDay(PEER_ID_INEXISTENT, time, time_speed);
+
+ m_timeofday_gauge->set(time);
}
{
@@ -600,7 +635,7 @@ void Server::AsyncRunStep(bool initial_step)
}
m_clients.step(dtime);
- m_lag += (m_lag > dtime ? -1 : 1) * dtime/100;
+ m_lag_gauge->increment((m_lag_gauge->get() > dtime ? -1 : 1) * dtime/100);
#if USE_CURL
// send masterserver announce
{
@@ -611,9 +646,9 @@ void Server::AsyncRunStep(bool initial_step)
ServerList::AA_START,
m_bind_addr.getPort(),
m_clients.getPlayerNames(),
- m_uptime.get(),
+ m_uptime_counter->get(),
m_env->getGameTime(),
- m_lag,
+ m_lag_gauge->get(),
m_gamespec.id,
Mapgen::getMapgenName(m_emerge->mgparams->mgtype),
m_modmgr->getMods(),
@@ -635,6 +670,7 @@ void Server::AsyncRunStep(bool initial_step)
const RemoteClientMap &clients = m_clients.getClientList();
ScopeProfiler sp(g_profiler, "Server: update objects within range");
+ m_player_gauge->set(clients.size());
for (const auto &client_it : clients) {
RemoteClient *client = client_it.second;
@@ -656,14 +692,17 @@ void Server::AsyncRunStep(bool initial_step)
// Save mod storages if modified
m_mod_storage_save_timer -= dtime;
if (m_mod_storage_save_timer <= 0.0f) {
- infostream << "Saving registered mod storages." << std::endl;
m_mod_storage_save_timer = g_settings->getFloat("server_map_save_interval");
+ int n = 0;
for (std::unordered_map<std::string, ModMetadata *>::const_iterator
it = m_mod_storages.begin(); it != m_mod_storages.end(); ++it) {
if (it->second->isModified()) {
it->second->save(getModStoragePath());
+ n++;
}
}
+ if (n > 0)
+ infostream << "Saved " << n << " modified mod storages." << std::endl;
}
}
@@ -679,32 +718,35 @@ void Server::AsyncRunStep(bool initial_step)
std::unordered_map<u16, std::vector<ActiveObjectMessage>*> buffered_messages;
// Get active object messages from environment
+ ActiveObjectMessage aom(0);
+ u32 aom_count = 0;
for(;;) {
- ActiveObjectMessage aom = m_env->getActiveObjectMessage();
- if (aom.id == 0)
+ if (!m_env->getActiveObjectMessage(&aom))
break;
std::vector<ActiveObjectMessage>* message_list = nullptr;
- std::unordered_map<u16, std::vector<ActiveObjectMessage>* >::iterator n;
- n = buffered_messages.find(aom.id);
+ auto n = buffered_messages.find(aom.id);
if (n == buffered_messages.end()) {
message_list = new std::vector<ActiveObjectMessage>;
buffered_messages[aom.id] = message_list;
- }
- else {
+ } else {
message_list = n->second;
}
- message_list->push_back(aom);
+ message_list->push_back(std::move(aom));
+ aom_count++;
}
+ m_aom_buffer_counter->increment(aom_count);
+
m_clients.lock();
const RemoteClientMap &clients = m_clients.getClientList();
// Route data to every client
+ std::string reliable_data, unreliable_data;
for (const auto &client_it : clients) {
+ reliable_data.clear();
+ unreliable_data.clear();
RemoteClient *client = client_it.second;
PlayerSAO *player = getPlayerSAO(client->peer_id);
- std::string reliable_data;
- std::string unreliable_data;
// Go through all objects in message buffer
for (const auto &buffered_message : buffered_messages) {
// If object does not exist or is not known by client, skip it
@@ -718,7 +760,7 @@ void Server::AsyncRunStep(bool initial_step)
// Go through every message
for (const ActiveObjectMessage &aom : *list) {
// Send position updates to players who do not see the attachment
- if (aom.datastring[0] == GENERIC_CMD_UPDATE_POSITION) {
+ if (aom.datastring[0] == AO_CMD_UPDATE_POSITION) {
if (sao->getId() == player->getId())
continue;
@@ -729,19 +771,15 @@ void Server::AsyncRunStep(bool initial_step)
client->m_known_objects.end())
continue;
}
- // Compose the full new data with header
- std::string new_data;
- // Add object id
- char buf[2];
- writeU16((u8*)&buf[0], aom.id);
- new_data.append(buf, 2);
- // Add data
- new_data += serializeString(aom.datastring);
- // Add data to buffer
- if (aom.reliable)
- reliable_data += new_data;
- else
- unreliable_data += new_data;
+
+ // Add full new data to appropriate buffer
+ std::string &buffer = aom.reliable ? reliable_data : unreliable_data;
+ char idbuf[2];
+ writeU16((u8*) idbuf, aom.id);
+ // u16 id
+ // std::string data
+ buffer.append(idbuf, sizeof(idbuf));
+ buffer.append(serializeString(aom.datastring));
}
}
/*
@@ -809,7 +847,6 @@ void Server::AsyncRunStep(bool initial_step)
disable_single_change_sending ? 5 : 30);
break;
case MEET_BLOCK_NODE_METADATA_CHANGED: {
- verbosestream << "Server: MEET_BLOCK_NODE_METADATA_CHANGED" << std::endl;
prof.add("MEET_BLOCK_NODE_METADATA_CHANGED", 1);
if (!event->is_private_change) {
// Don't send the change yet. Collect them to eliminate dupes.
@@ -825,7 +862,6 @@ void Server::AsyncRunStep(bool initial_step)
break;
}
case MEET_OTHER:
- infostream << "Server: MEET_OTHER" << std::endl;
prof.add("MEET_OTHER", 1);
for (const v3s16 &modified_block : event->modified_blocks) {
m_clients.markBlockposAsNotSent(modified_block);
@@ -939,7 +975,9 @@ void Server::Receive()
}
peer_id = pkt.getPeerId();
+ m_packet_recv_counter->increment();
ProcessData(&pkt);
+ m_packet_recv_processed_counter->increment();
} catch (const con::InvalidIncomingDataException &e) {
infostream << "Server::Receive(): InvalidIncomingDataException: what()="
<< e.what() << std::endl;
@@ -1143,82 +1181,6 @@ void Server::onMapEditEvent(const MapEditEvent &event)
m_unsent_map_edit_queue.push(new MapEditEvent(event));
}
-Inventory* Server::getInventory(const InventoryLocation &loc)
-{
- switch (loc.type) {
- case InventoryLocation::UNDEFINED:
- case InventoryLocation::CURRENT_PLAYER:
- break;
- case InventoryLocation::PLAYER:
- {
- RemotePlayer *player = m_env->getPlayer(loc.name.c_str());
- if(!player)
- return NULL;
- PlayerSAO *playersao = player->getPlayerSAO();
- if(!playersao)
- return NULL;
- return playersao->getInventory();
- }
- break;
- case InventoryLocation::NODEMETA:
- {
- NodeMetadata *meta = m_env->getMap().getNodeMetadata(loc.p);
- if(!meta)
- return NULL;
- return meta->getInventory();
- }
- break;
- case InventoryLocation::DETACHED:
- {
- if(m_detached_inventories.count(loc.name) == 0)
- return NULL;
- return m_detached_inventories[loc.name];
- }
- break;
- default:
- sanity_check(false); // abort
- break;
- }
- return NULL;
-}
-
-void Server::setInventoryModified(const InventoryLocation &loc)
-{
- switch(loc.type){
- case InventoryLocation::UNDEFINED:
- break;
- case InventoryLocation::PLAYER:
- {
-
- RemotePlayer *player = m_env->getPlayer(loc.name.c_str());
-
- if (!player)
- return;
-
- player->setModified(true);
- player->inventory.setModified(true);
- // Updates are sent in ServerEnvironment::step()
- }
- break;
- case InventoryLocation::NODEMETA:
- {
- MapEditEvent event;
- event.type = MEET_BLOCK_NODE_METADATA_CHANGED;
- event.p = loc.p;
- m_env->getMap().dispatchEvent(event);
- }
- break;
- case InventoryLocation::DETACHED:
- {
- // Updates are sent in ServerEnvironment::step()
- }
- break;
- default:
- sanity_check(false); // abort
- break;
- }
-}
-
void Server::SetBlocksNotSent(std::map<v3s16, MapBlock *>& block)
{
std::vector<session_t> clients = m_clients.getClientIDs();
@@ -1263,7 +1225,8 @@ bool Server::getClientInfo(
u8* major,
u8* minor,
u8* patch,
- std::string* vers_string
+ std::string* vers_string,
+ std::string* lang_code
)
{
*state = m_clients.getClientState(peer_id);
@@ -1283,6 +1246,7 @@ bool Server::getClientInfo(
*minor = client->getMinor();
*patch = client->getPatch();
*vers_string = client->getFull();
+ *lang_code = client->getLangCode();
m_clients.unlock();
@@ -1544,17 +1508,15 @@ void Server::SendShowFormspecMessage(session_t peer_id, const std::string &forms
// Spawns a particle on peer with peer_id
void Server::SendSpawnParticle(session_t peer_id, u16 protocol_version,
- v3f pos, v3f velocity, v3f acceleration,
- float expirationtime, float size, bool collisiondetection,
- bool collision_removal, bool object_collision,
- bool vertical, const std::string &texture,
- const struct TileAnimationParams &animation, u8 glow)
+ const ParticleParameters &p)
{
static thread_local const float radius =
g_settings->getS16("max_block_send_distance") * MAP_BLOCKSIZE * BS;
if (peer_id == PEER_ID_INEXISTENT) {
std::vector<session_t> clients = m_clients.getClientIDs();
+ const v3f pos = p.pos * BS;
+ const float radius_sq = radius * radius;
for (const session_t client_id : clients) {
RemotePlayer *player = m_env->getPlayer(client_id);
@@ -1566,76 +1528,78 @@ void Server::SendSpawnParticle(session_t peer_id, u16 protocol_version,
continue;
// Do not send to distant clients
- if (sao->getBasePosition().getDistanceFrom(pos * BS) > radius)
+ if (sao->getBasePosition().getDistanceFromSQ(pos) > radius_sq)
continue;
- SendSpawnParticle(client_id, player->protocol_version,
- pos, velocity, acceleration,
- expirationtime, size, collisiondetection, collision_removal,
- object_collision, vertical, texture, animation, glow);
+ SendSpawnParticle(client_id, player->protocol_version, p);
}
return;
}
+ assert(protocol_version != 0);
NetworkPacket pkt(TOCLIENT_SPAWN_PARTICLE, 0, peer_id);
- pkt << pos << velocity << acceleration << expirationtime
- << size << collisiondetection;
- pkt.putLongString(texture);
- pkt << vertical;
- pkt << collision_removal;
- // This is horrible but required (why are there two ways to serialize pkts?)
- std::ostringstream os(std::ios_base::binary);
- animation.serialize(os, protocol_version);
- pkt.putRawString(os.str());
- pkt << glow;
- pkt << object_collision;
+ {
+ // NetworkPacket and iostreams are incompatible...
+ std::ostringstream oss(std::ios_base::binary);
+ p.serialize(oss, protocol_version);
+ pkt.putRawString(oss.str());
+ }
Send(&pkt);
}
// Adds a ParticleSpawner on peer with peer_id
void Server::SendAddParticleSpawner(session_t peer_id, u16 protocol_version,
- u16 amount, float spawntime, v3f minpos, v3f maxpos,
- v3f minvel, v3f maxvel, v3f minacc, v3f maxacc, float minexptime, float maxexptime,
- float minsize, float maxsize, bool collisiondetection, bool collision_removal,
- bool object_collision, u16 attached_id, bool vertical, const std::string &texture, u32 id,
- const struct TileAnimationParams &animation, u8 glow)
+ const ParticleSpawnerParameters &p, u16 attached_id, u32 id)
{
+ static thread_local const float radius =
+ g_settings->getS16("max_block_send_distance") * MAP_BLOCKSIZE * BS;
+
if (peer_id == PEER_ID_INEXISTENT) {
- // This sucks and should be replaced:
std::vector<session_t> clients = m_clients.getClientIDs();
+ const v3f pos = (p.minpos + p.maxpos) / 2.0f * BS;
+ const float radius_sq = radius * radius;
+ /* Don't send short-lived spawners to distant players.
+ * This could be replaced with proper tracking at some point. */
+ const bool distance_check = !attached_id && p.time <= 1.0f;
+
for (const session_t client_id : clients) {
RemotePlayer *player = m_env->getPlayer(client_id);
if (!player)
continue;
+
+ if (distance_check) {
+ PlayerSAO *sao = player->getPlayerSAO();
+ if (!sao)
+ continue;
+ if (sao->getBasePosition().getDistanceFromSQ(pos) > radius_sq)
+ continue;
+ }
+
SendAddParticleSpawner(client_id, player->protocol_version,
- amount, spawntime, minpos, maxpos,
- minvel, maxvel, minacc, maxacc, minexptime, maxexptime,
- minsize, maxsize, collisiondetection, collision_removal,
- object_collision, attached_id, vertical, texture, id,
- animation, glow);
+ p, attached_id, id);
}
return;
}
+ assert(protocol_version != 0);
- NetworkPacket pkt(TOCLIENT_ADD_PARTICLESPAWNER, 0, peer_id);
+ NetworkPacket pkt(TOCLIENT_ADD_PARTICLESPAWNER, 100, peer_id);
- pkt << amount << spawntime << minpos << maxpos << minvel << maxvel
- << minacc << maxacc << minexptime << maxexptime << minsize
- << maxsize << collisiondetection;
+ pkt << p.amount << p.time << p.minpos << p.maxpos << p.minvel
+ << p.maxvel << p.minacc << p.maxacc << p.minexptime << p.maxexptime
+ << p.minsize << p.maxsize << p.collisiondetection;
- pkt.putLongString(texture);
+ pkt.putLongString(p.texture);
- pkt << id << vertical;
- pkt << collision_removal;
- pkt << attached_id;
- // This is horrible but required
- std::ostringstream os(std::ios_base::binary);
- animation.serialize(os, protocol_version);
- pkt.putRawString(os.str());
- pkt << glow;
- pkt << object_collision;
+ pkt << id << p.vertical << p.collision_removal << attached_id;
+ {
+ std::ostringstream os(std::ios_base::binary);
+ p.animation.serialize(os, protocol_version);
+ pkt.putRawString(os.str());
+ }
+ pkt << p.glow << p.object_collision;
+ pkt << p.node.param0 << p.node.param2 << p.node_tile;
Send(&pkt);
}
@@ -1644,7 +1608,6 @@ void Server::SendDeleteParticleSpawner(session_t peer_id, u32 id)
{
NetworkPacket pkt(TOCLIENT_DELETE_PARTICLESPAWNER, 4, peer_id);
- // Ugly error in this packet
pkt << id;
if (peer_id != PEER_ID_INEXISTENT)
@@ -1661,7 +1624,7 @@ void Server::SendHUDAdd(session_t peer_id, u32 id, HudElement *form)
pkt << id << (u8) form->type << form->pos << form->name << form->scale
<< form->text << form->number << form->item << form->dir
<< form->align << form->offset << form->world_pos << form->size
- << form->z_index;
+ << form->z_index << form->text2;
Send(&pkt);
}
@@ -1687,6 +1650,7 @@ void Server::SendHUDChange(session_t peer_id, u32 id, HudElementStat stat, void
break;
case HUD_STAT_NAME:
case HUD_STAT_TEXT:
+ case HUD_STAT_TEXT2:
pkt << *(std::string *) value;
break;
case HUD_STAT_WORLD_POS:
@@ -1738,8 +1702,8 @@ void Server::SendSetSky(session_t peer_id, const SkyboxParams &params)
pkt << params.clouds;
} else { // Handle current clients and future clients
pkt << params.bgcolor << params.type
- << params.clouds << params.sun_tint
- << params.moon_tint << params.tint_type;
+ << params.clouds << params.fog_sun_tint
+ << params.fog_moon_tint << params.fog_tint_type;
if (params.type == "skybox") {
pkt << (u16) params.textures.size();
@@ -1825,9 +1789,7 @@ void Server::SendPlayerHP(session_t peer_id)
m_script->player_event(playersao,"health_changed");
// Send to other clients
- std::string str = gob_cmd_punched(playersao->getHP());
- ActiveObjectMessage aom(playersao->getId(), true, str);
- playersao->m_messages_out.push(aom);
+ playersao->sendPunchCommand();
}
void Server::SendPlayerBreath(PlayerSAO *sao)
@@ -1862,10 +1824,10 @@ void Server::SendMovePlayer(session_t peer_id)
void Server::SendPlayerFov(session_t peer_id)
{
- NetworkPacket pkt(TOCLIENT_FOV, 4 + 1, peer_id);
+ NetworkPacket pkt(TOCLIENT_FOV, 4 + 1 + 4, peer_id);
PlayerFovSpec fov_spec = m_env->getPlayer(peer_id)->getFov();
- pkt << fov_spec.fov << fov_spec.is_multiplier;
+ pkt << fov_spec.fov << fov_spec.is_multiplier << fov_spec.transition_time;
Send(&pkt);
}
@@ -2450,9 +2412,87 @@ bool Server::SendBlock(session_t peer_id, const v3s16 &blockpos)
return true;
}
+bool Server::addMediaFile(const std::string &filename,
+ const std::string &filepath, std::string *filedata_to,
+ std::string *digest_to)
+{
+ // If name contains illegal characters, ignore the file
+ if (!string_allowed(filename, TEXTURENAME_ALLOWED_CHARS)) {
+ infostream << "Server: ignoring illegal file name: \""
+ << filename << "\"" << std::endl;
+ return false;
+ }
+ // If name is not in a supported format, ignore it
+ const char *supported_ext[] = {
+ ".png", ".jpg", ".bmp", ".tga",
+ ".pcx", ".ppm", ".psd", ".wal", ".rgb",
+ ".ogg",
+ ".x", ".b3d", ".md2", ".obj",
+ // Custom translation file format
+ ".tr",
+ NULL
+ };
+ if (removeStringEnd(filename, supported_ext).empty()) {
+ infostream << "Server: ignoring unsupported file extension: \""
+ << filename << "\"" << std::endl;
+ return false;
+ }
+ // Ok, attempt to load the file and add to cache
+
+ // Read data
+ std::ifstream fis(filepath.c_str(), std::ios_base::binary);
+ if (!fis.good()) {
+ errorstream << "Server::addMediaFile(): Could not open \""
+ << filename << "\" for reading" << std::endl;
+ return false;
+ }
+ std::string filedata;
+ bool bad = false;
+ for (;;) {
+ char buf[1024];
+ fis.read(buf, sizeof(buf));
+ std::streamsize len = fis.gcount();
+ filedata.append(buf, len);
+ if (fis.eof())
+ break;
+ if (!fis.good()) {
+ bad = true;
+ break;
+ }
+ }
+ if (bad) {
+ errorstream << "Server::addMediaFile(): Failed to read \""
+ << filename << "\"" << std::endl;
+ return false;
+ } else if (filedata.empty()) {
+ errorstream << "Server::addMediaFile(): Empty file \""
+ << filepath << "\"" << std::endl;
+ return false;
+ }
+
+ SHA1 sha1;
+ sha1.addBytes(filedata.c_str(), filedata.length());
+
+ unsigned char *digest = sha1.getDigest();
+ std::string sha1_base64 = base64_encode(digest, 20);
+ std::string sha1_hex = hex_encode((char*) digest, 20);
+ if (digest_to)
+ *digest_to = std::string((char*) digest, 20);
+ free(digest);
+
+ // Put in list
+ m_media[filename] = MediaInfo(filepath, sha1_base64);
+ verbosestream << "Server: " << sha1_hex << " is " << filename
+ << std::endl;
+
+ if (filedata_to)
+ *filedata_to = std::move(filedata);
+ return true;
+}
+
void Server::fillMediaCache()
{
- infostream<<"Server: Calculating media file checksums"<<std::endl;
+ infostream << "Server: Calculating media file checksums" << std::endl;
// Collect all media file paths
std::vector<std::string> paths;
@@ -2464,87 +2504,19 @@ void Server::fillMediaCache()
for (const std::string &mediapath : paths) {
std::vector<fs::DirListNode> dirlist = fs::GetDirListing(mediapath);
for (const fs::DirListNode &dln : dirlist) {
- if (dln.dir) // Ignode dirs
- continue;
- std::string filename = dln.name;
- // If name contains illegal characters, ignore the file
- if (!string_allowed(filename, TEXTURENAME_ALLOWED_CHARS)) {
- infostream<<"Server: ignoring illegal file name: \""
- << filename << "\"" << std::endl;
- continue;
- }
- // If name is not in a supported format, ignore it
- const char *supported_ext[] = {
- ".png", ".jpg", ".bmp", ".tga",
- ".pcx", ".ppm", ".psd", ".wal", ".rgb",
- ".ogg",
- ".x", ".b3d", ".md2", ".obj",
- // Custom translation file format
- ".tr",
- NULL
- };
- if (removeStringEnd(filename, supported_ext).empty()){
- infostream << "Server: ignoring unsupported file extension: \""
- << filename << "\"" << std::endl;
- continue;
- }
- // Ok, attempt to load the file and add to cache
- std::string filepath;
- filepath.append(mediapath).append(DIR_DELIM).append(filename);
-
- // Read data
- std::ifstream fis(filepath.c_str(), std::ios_base::binary);
- if (!fis.good()) {
- errorstream << "Server::fillMediaCache(): Could not open \""
- << filename << "\" for reading" << std::endl;
- continue;
- }
- std::ostringstream tmp_os(std::ios_base::binary);
- bool bad = false;
- for(;;) {
- char buf[1024];
- fis.read(buf, 1024);
- std::streamsize len = fis.gcount();
- tmp_os.write(buf, len);
- if (fis.eof())
- break;
- if (!fis.good()) {
- bad = true;
- break;
- }
- }
- if(bad) {
- errorstream<<"Server::fillMediaCache(): Failed to read \""
- << filename << "\"" << std::endl;
+ if (dln.dir) // Ignore dirs
continue;
- }
- if(tmp_os.str().length() == 0) {
- errorstream << "Server::fillMediaCache(): Empty file \""
- << filepath << "\"" << std::endl;
- continue;
- }
-
- SHA1 sha1;
- sha1.addBytes(tmp_os.str().c_str(), tmp_os.str().length());
-
- unsigned char *digest = sha1.getDigest();
- std::string sha1_base64 = base64_encode(digest, 20);
- std::string sha1_hex = hex_encode((char*)digest, 20);
- free(digest);
-
- // Put in list
- m_media[filename] = MediaInfo(filepath, sha1_base64);
- verbosestream << "Server: " << sha1_hex << " is " << filename
- << std::endl;
+ std::string filepath = mediapath;
+ filepath.append(DIR_DELIM).append(dln.name);
+ addMediaFile(dln.name, filepath);
}
}
+
+ infostream << "Server: " << m_media.size() << " media files collected" << std::endl;
}
void Server::sendMediaAnnouncement(session_t peer_id, const std::string &lang_code)
{
- verbosestream << "Server: Announcing files to id(" << peer_id << ")"
- << std::endl;
-
// Make packet
NetworkPacket pkt(TOCLIENT_ANNOUNCE_MEDIA, 0, peer_id);
@@ -2567,6 +2539,9 @@ void Server::sendMediaAnnouncement(session_t peer_id, const std::string &lang_co
pkt << g_settings->get("remote_media");
Send(&pkt);
+
+ verbosestream << "Server: Announcing files to id(" << peer_id
+ << "): count=" << media_sent << " size=" << pkt.getSize() << std::endl;
}
struct SendableMedia
@@ -2682,40 +2657,20 @@ void Server::sendRequestedMedia(session_t peer_id,
}
}
-void Server::sendDetachedInventory(const std::string &name, session_t peer_id)
+void Server::sendDetachedInventory(Inventory *inventory, const std::string &name, session_t peer_id)
{
- const auto &inv_it = m_detached_inventories.find(name);
- const auto &player_it = m_detached_inventories_player.find(name);
-
- if (player_it == m_detached_inventories_player.end() ||
- player_it->second.empty()) {
- // OK. Send to everyone
- } else {
- if (!m_env)
- return; // Mods are not done loading
-
- RemotePlayer *p = m_env->getPlayer(player_it->second.c_str());
- if (!p)
- return; // Player is offline
-
- if (peer_id != PEER_ID_INEXISTENT && peer_id != p->getPeerId())
- return; // Caller requested send to a different player, so don't send.
-
- peer_id = p->getPeerId();
- }
-
NetworkPacket pkt(TOCLIENT_DETACHED_INVENTORY, 0, peer_id);
pkt << name;
- if (inv_it == m_detached_inventories.end()) {
+ if (!inventory) {
pkt << false; // Remove inventory
} else {
pkt << true; // Update inventory
// Serialization & NetworkPacket isn't a love story
std::ostringstream os(std::ios_base::binary);
- inv_it->second->serialize(os);
- inv_it->second->setModified(false);
+ inventory->serialize(os);
+ inventory->setModified(false);
const std::string &os_str = os.str();
pkt << static_cast<u16>(os_str.size()); // HACK: to keep compatibility with 5.0.0 clients
@@ -2730,16 +2685,17 @@ void Server::sendDetachedInventory(const std::string &name, session_t peer_id)
void Server::sendDetachedInventories(session_t peer_id, bool incremental)
{
- for (const auto &detached_inventory : m_detached_inventories) {
- const std::string &name = detached_inventory.first;
- if (incremental) {
- Inventory *inv = detached_inventory.second;
- if (!inv || !inv->checkModified())
- continue;
- }
-
- sendDetachedInventory(name, peer_id);
+ // Lookup player name, to filter detached inventories just after
+ std::string peer_name;
+ if (peer_id != PEER_ID_INEXISTENT) {
+ peer_name = getClient(peer_id, CS_Created)->getName();
}
+
+ auto send_cb = [this, peer_id](const std::string &name, Inventory *inv) {
+ sendDetachedInventory(inv, name, peer_id);
+ };
+
+ m_inventory_mgr->sendDetachedInventories(peer_name, incremental, send_cb);
}
/*
@@ -2950,10 +2906,8 @@ void Server::UpdateCrafting(RemotePlayer *player)
if (!clist || clist->getSize() == 0)
return;
- if (!clist->checkModified()) {
- verbosestream << "Skip Server::UpdateCrafting(): list unmodified" << std::endl;
+ if (!clist->checkModified())
return;
- }
// Get a preview for crafting
ItemStack preview;
@@ -3044,8 +2998,16 @@ std::wstring Server::handleChat(const std::string &name, const std::wstring &wna
line += L"-!- You don't have permission to shout.";
broadcast_line = false;
} else {
+ /*
+ Workaround for fixing chat on Android. Lua doesn't handle
+ the Cyrillic alphabet and some characters on older Android devices
+ */
+#ifdef __ANDROID__
+ line += L"<" + wname + L"> " + wmessage;
+#else
line += narrow_to_wide(m_script->formatChatMessage(name,
wide_to_narrow(wmessage)));
+#endif
}
/*
@@ -3129,7 +3091,7 @@ std::wstring Server::getStatusString()
// Version
os << L"version=" << narrow_to_wide(g_version_string);
// Uptime
- os << L", uptime=" << m_uptime.get();
+ os << L", uptime=" << m_uptime_counter->get();
// Max lag estimate
os << L", max_lag=" << (m_env ? m_env->getMaxLagEstimate() : 0);
@@ -3411,15 +3373,12 @@ void Server::setClouds(RemotePlayer *player, const CloudParams &params)
SendCloudParams(player->getPeerId(), params);
}
-bool Server::overrideDayNightRatio(RemotePlayer *player, bool do_override,
+void Server::overrideDayNightRatio(RemotePlayer *player, bool do_override,
float ratio)
{
- if (!player)
- return false;
-
+ sanity_check(player);
player->overrideDayNightRatio(do_override, ratio);
SendOverrideDayNightRatio(player->getPeerId(), do_override, ratio);
- return true;
}
void Server::notifyPlayers(const std::wstring &msg)
@@ -3427,12 +3386,8 @@ void Server::notifyPlayers(const std::wstring &msg)
SendChatMessage(PEER_ID_INEXISTENT, ChatMessage(msg));
}
-void Server::spawnParticle(const std::string &playername, v3f pos,
- v3f velocity, v3f acceleration,
- float expirationtime, float size, bool
- collisiondetection, bool collision_removal, bool object_collision,
- bool vertical, const std::string &texture,
- const struct TileAnimationParams &animation, u8 glow)
+void Server::spawnParticle(const std::string &playername,
+ const ParticleParameters &p)
{
// m_env will be NULL if the server is initializing
if (!m_env)
@@ -3448,18 +3403,11 @@ void Server::spawnParticle(const std::string &playername, v3f pos,
proto_ver = player->protocol_version;
}
- SendSpawnParticle(peer_id, proto_ver, pos, velocity, acceleration,
- expirationtime, size, collisiondetection, collision_removal,
- object_collision, vertical, texture, animation, glow);
+ SendSpawnParticle(peer_id, proto_ver, p);
}
-u32 Server::addParticleSpawner(u16 amount, float spawntime,
- v3f minpos, v3f maxpos, v3f minvel, v3f maxvel, v3f minacc, v3f maxacc,
- float minexptime, float maxexptime, float minsize, float maxsize,
- bool collisiondetection, bool collision_removal, bool object_collision,
- ServerActiveObject *attached, bool vertical, const std::string &texture,
- const std::string &playername, const struct TileAnimationParams &animation,
- u8 glow)
+u32 Server::addParticleSpawner(const ParticleSpawnerParameters &p,
+ ServerActiveObject *attached, const std::string &playername)
{
// m_env will be NULL if the server is initializing
if (!m_env)
@@ -3479,16 +3427,11 @@ u32 Server::addParticleSpawner(u16 amount, float spawntime,
u32 id;
if (attached_id == 0)
- id = m_env->addParticleSpawner(spawntime);
+ id = m_env->addParticleSpawner(p.time);
else
- id = m_env->addParticleSpawner(spawntime, attached_id);
-
- SendAddParticleSpawner(peer_id, proto_ver, amount, spawntime,
- minpos, maxpos, minvel, maxvel, minacc, maxacc,
- minexptime, maxexptime, minsize, maxsize, collisiondetection,
- collision_removal, object_collision, attached_id, vertical,
- texture, id, animation, glow);
+ id = m_env->addParticleSpawner(p.time, attached_id);
+ SendAddParticleSpawner(peer_id, proto_ver, p, attached_id, id);
return id;
}
@@ -3510,49 +3453,41 @@ void Server::deleteParticleSpawner(const std::string &playername, u32 id)
SendDeleteParticleSpawner(peer_id, id);
}
-Inventory* Server::createDetachedInventory(const std::string &name, const std::string &player)
+bool Server::dynamicAddMedia(const std::string &filepath)
{
- if(m_detached_inventories.count(name) > 0){
- infostream<<"Server clearing detached inventory \""<<name<<"\""<<std::endl;
- delete m_detached_inventories[name];
- } else {
- infostream<<"Server creating detached inventory \""<<name<<"\""<<std::endl;
+ std::string filename = fs::GetFilenameFromPath(filepath.c_str());
+ if (m_media.find(filename) != m_media.end()) {
+ errorstream << "Server::dynamicAddMedia(): file \"" << filename
+ << "\" already exists in media cache" << std::endl;
+ return false;
}
- Inventory *inv = new Inventory(m_itemdef);
- sanity_check(inv);
- m_detached_inventories[name] = inv;
- if (!player.empty())
- m_detached_inventories_player[name] = player;
- //TODO find a better way to do this
- sendDetachedInventory(name,PEER_ID_INEXISTENT);
- return inv;
-}
-
-bool Server::removeDetachedInventory(const std::string &name)
-{
- const auto &inv_it = m_detached_inventories.find(name);
- if (inv_it == m_detached_inventories.end())
+ // Load the file and add it to our media cache
+ std::string filedata, raw_hash;
+ bool ok = addMediaFile(filename, filepath, &filedata, &raw_hash);
+ if (!ok)
return false;
- delete inv_it->second;
- m_detached_inventories.erase(inv_it);
-
- if (!m_env) // Mods are not done loading
- return true;
-
- const auto &player_it = m_detached_inventories_player.find(name);
- if (player_it != m_detached_inventories_player.end()) {
- RemotePlayer *player = m_env->getPlayer(player_it->second.c_str());
+ // Push file to existing clients
+ NetworkPacket pkt(TOCLIENT_MEDIA_PUSH, 0);
+ pkt << raw_hash << filename << (bool) true;
+ pkt.putLongString(filedata);
- if (player && player->getPeerId() != PEER_ID_INEXISTENT)
- sendDetachedInventory(name, player->getPeerId());
-
- m_detached_inventories_player.erase(player_it);
- } else {
- // Notify all players about the change
- sendDetachedInventory(name, PEER_ID_INEXISTENT);
+ auto client_ids = m_clients.getClientIDs(CS_DefinitionsSent);
+ for (session_t client_id : client_ids) {
+ /*
+ The network layer only guarantees ordered delivery inside a channel.
+ Since the very next packet could be one that uses the media, we have
+ to push the media over ALL channels to ensure it is processed before
+ it is used.
+ In practice this means we have to send it twice:
+ - channel 1 (HUD)
+ - channel 0 (everything else: e.g. play_sound, object messages)
+ */
+ m_clients.send(client_id, 1, &pkt, true);
+ m_clients.send(client_id, 0, &pkt, true);
}
+
return true;
}
@@ -3576,7 +3511,7 @@ bool Server::rollbackRevertActions(const std::list<RollbackAction> &actions,
for (const RollbackAction &action : actions) {
num_tried++;
- bool success = action.applyRevert(map, this, this);
+ bool success = action.applyRevert(map, m_inventory_mgr.get(), this);
if(!success){
num_failed++;
std::ostringstream os;
@@ -3942,3 +3877,20 @@ void Server::broadcastModChannelMessage(const std::string &channel,
m_script->on_modchannel_message(channel, sender, message);
}
}
+
+void Server::loadTranslationLanguage(const std::string &lang_code)
+{
+ if (g_server_translations->count(lang_code))
+ return; // Already loaded
+
+ std::string suffix = "." + lang_code + ".tr";
+ for (const auto &i : m_media) {
+ if (str_ends_with(i.first, suffix)) {
+ std::ifstream t(i.second.path);
+ std::string data((std::istreambuf_iterator<char>(t)),
+ std::istreambuf_iterator<char>());
+
+ (*g_server_translations)[lang_code].loadTranslation(data);
+ }
+ }
+}
diff --git a/src/server.h b/src/server.h
index 1c43216fd..023aee519 100644
--- a/src/server.h
+++ b/src/server.h
@@ -27,12 +27,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "content/mods.h"
#include "inventorymanager.h"
#include "content/subgames.h"
-#include "tileanimation.h" // struct TileAnimationParams
+#include "tileanimation.h" // TileAnimationParams
+#include "particles.h" // ParticleParams
#include "network/peerhandler.h"
#include "network/address.h"
#include "util/numeric.h"
#include "util/thread.h"
#include "util/basic_macros.h"
+#include "util/metricsbackend.h"
#include "serverenvironment.h"
#include "clientiface.h"
#include "chatmessage.h"
@@ -67,6 +69,7 @@ struct MoonParams;
struct StarParams;
class ServerThread;
class ServerModManager;
+class ServerInventoryManager;
enum ClientDeletionReason {
CDR_LEAVE,
@@ -115,7 +118,7 @@ struct ServerPlayingSound
};
class Server : public con::PeerHandler, public MapEventReceiver,
- public InventoryManager, public IGameDef
+ public IGameDef
{
public:
/*
@@ -133,7 +136,6 @@ public:
~Server();
DISABLE_CLASS_COPY(Server);
- void init();
void start();
void stop();
// This is mainly a way to pass the time to the server.
@@ -165,7 +167,6 @@ public:
void handleCommand_InventoryAction(NetworkPacket* pkt);
void handleCommand_ChatMessage(NetworkPacket* pkt);
void handleCommand_Damage(NetworkPacket* pkt);
- void handleCommand_Password(NetworkPacket* pkt);
void handleCommand_PlayerItem(NetworkPacket* pkt);
void handleCommand_Respawn(NetworkPacket* pkt);
void handleCommand_Interact(NetworkPacket* pkt);
@@ -196,15 +197,9 @@ public:
*/
void onMapEditEvent(const MapEditEvent &event);
- /*
- Shall be called with the environment and the connection locked.
- */
- Inventory* getInventory(const InventoryLocation &loc);
- void setInventoryModified(const InventoryLocation &loc);
-
// Connection must be locked when called
std::wstring getStatusString();
- inline double getUptime() const { return m_uptime.m_value; }
+ inline double getUptime() const { return m_uptime_counter->get(); }
// read shutdown state
inline bool isShutdownRequested() const { return m_shutdown_state.is_requested; }
@@ -232,31 +227,19 @@ public:
void notifyPlayer(const char *name, const std::wstring &msg);
void notifyPlayers(const std::wstring &msg);
+
void spawnParticle(const std::string &playername,
- v3f pos, v3f velocity, v3f acceleration,
- float expirationtime, float size,
- bool collisiondetection, bool collision_removal, bool object_collision,
- bool vertical, const std::string &texture,
- const struct TileAnimationParams &animation, u8 glow);
-
- u32 addParticleSpawner(u16 amount, float spawntime,
- v3f minpos, v3f maxpos,
- v3f minvel, v3f maxvel,
- v3f minacc, v3f maxacc,
- float minexptime, float maxexptime,
- float minsize, float maxsize,
- bool collisiondetection, bool collision_removal, bool object_collision,
- ServerActiveObject *attached,
- bool vertical, const std::string &texture,
- const std::string &playername, const struct TileAnimationParams &animation,
- u8 glow);
+ const ParticleParameters &p);
+
+ u32 addParticleSpawner(const ParticleSpawnerParameters &p,
+ ServerActiveObject *attached, const std::string &playername);
void deleteParticleSpawner(const std::string &playername, u32 id);
- // Creates or resets inventory
- Inventory *createDetachedInventory(const std::string &name,
- const std::string &player = "");
- bool removeDetachedInventory(const std::string &name);
+ bool dynamicAddMedia(const std::string &filepath);
+
+ ServerInventoryManager *getInventoryMgr() const { return m_inventory_mgr.get(); }
+ void sendDetachedInventory(Inventory *inventory, const std::string &name, session_t peer_id);
// Envlock and conlock should be locked when using scriptapi
ServerScripting *getScriptIface(){ return m_script; }
@@ -318,7 +301,7 @@ public:
void setClouds(RemotePlayer *player, const CloudParams &params);
- bool overrideDayNightRatio(RemotePlayer *player, bool do_override, float brightness);
+ void overrideDayNightRatio(RemotePlayer *player, bool do_override, float brightness);
/* con::PeerHandler implementation. */
void peerAdded(con::Peer *peer);
@@ -336,7 +319,7 @@ public:
bool getClientConInfo(session_t peer_id, con::rtt_stat_type type, float *retval);
bool getClientInfo(session_t peer_id, ClientState *state, u32 *uptime,
u8* ser_vers, u16* prot_vers, u8* major, u8* minor, u8* patch,
- std::string* vers_string);
+ std::string* vers_string, std::string* lang_code);
void printToConsoleOnly(const std::string &text);
@@ -360,6 +343,9 @@ public:
// Send block to specific player only
bool SendBlock(session_t peer_id, const v3s16 &blockpos);
+ // Load translations for a language
+ void loadTranslationLanguage(const std::string &lang_code);
+
// Bind address
Address m_bind_addr;
@@ -387,6 +373,8 @@ private:
float m_timer = 0.0f;
};
+ void init();
+
void SendMovement(session_t peer_id);
void SendHP(session_t peer_id, u16 hp);
void SendBreath(session_t peer_id, u16 breath);
@@ -451,35 +439,22 @@ private:
// Sends blocks to clients (locks env and con on its own)
void SendBlocks(float dtime);
+ bool addMediaFile(const std::string &filename, const std::string &filepath,
+ std::string *filedata = nullptr, std::string *digest = nullptr);
void fillMediaCache();
void sendMediaAnnouncement(session_t peer_id, const std::string &lang_code);
void sendRequestedMedia(session_t peer_id,
const std::vector<std::string> &tosend);
- void sendDetachedInventory(const std::string &name, session_t peer_id);
-
// Adds a ParticleSpawner on peer with peer_id (PEER_ID_INEXISTENT == all)
void SendAddParticleSpawner(session_t peer_id, u16 protocol_version,
- u16 amount, float spawntime,
- v3f minpos, v3f maxpos,
- v3f minvel, v3f maxvel,
- v3f minacc, v3f maxacc,
- float minexptime, float maxexptime,
- float minsize, float maxsize,
- bool collisiondetection, bool collision_removal, bool object_collision,
- u16 attached_id,
- bool vertical, const std::string &texture, u32 id,
- const struct TileAnimationParams &animation, u8 glow);
+ const ParticleSpawnerParameters &p, u16 attached_id, u32 id);
void SendDeleteParticleSpawner(session_t peer_id, u32 id);
// Spawns particle on peer with peer_id (PEER_ID_INEXISTENT == all)
void SendSpawnParticle(session_t peer_id, u16 protocol_version,
- v3f pos, v3f velocity, v3f acceleration,
- float expirationtime, float size,
- bool collisiondetection, bool collision_removal, bool object_collision,
- bool vertical, const std::string &texture,
- const struct TileAnimationParams &animation, u8 glow);
+ const ParticleParameters &p);
void SendActiveObjectRemoveAdd(RemoteClient *client, PlayerSAO *playersao);
void SendActiveObjectMessages(session_t peer_id, const std::string &datas,
@@ -591,9 +566,6 @@ private:
float m_step_dtime = 0.0f;
std::mutex m_step_dtime_mutex;
- // current server step lag counter
- float m_lag;
-
// The server mainly operates in this thread
ServerThread *m_thread = nullptr;
@@ -602,8 +574,6 @@ private:
*/
// Timer for sending time of day over network
float m_time_of_day_send_timer = 0.0f;
- // Uptime of server in seconds
- MutexedVariable<double> m_uptime;
/*
Client interface
@@ -660,14 +630,6 @@ private:
s32 m_next_sound_id = 0; // positive values only
s32 nextSoundId();
- /*
- Detached inventories (behind m_env_mutex)
- */
- // key = name
- std::map<std::string, Inventory*> m_detached_inventories;
- // value = "" (visible to all players) or player name
- std::map<std::string, std::string> m_detached_inventories_player;
-
std::unordered_map<std::string, ModMetadata *> m_mod_storages;
float m_mod_storage_save_timer = 10.0f;
@@ -677,6 +639,22 @@ private:
// ModChannel manager
std::unique_ptr<ModChannelMgr> m_modchannel_mgr;
+
+ // Inventory manager
+ std::unique_ptr<ServerInventoryManager> m_inventory_mgr;
+
+ // Global server metrics backend
+ std::unique_ptr<MetricsBackend> m_metrics_backend;
+
+ // Server metrics
+ MetricCounterPtr m_uptime_counter;
+ MetricGaugePtr m_player_gauge;
+ MetricGaugePtr m_timeofday_gauge;
+ // current server step lag
+ MetricGaugePtr m_lag_gauge;
+ MetricCounterPtr m_aom_buffer_counter;
+ MetricCounterPtr m_packet_recv_counter;
+ MetricCounterPtr m_packet_recv_processed_counter;
};
/*
diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt
index e964c69ff..0a5a8f3a7 100644
--- a/src/server/CMakeLists.txt
+++ b/src/server/CMakeLists.txt
@@ -1,4 +1,9 @@
set(server_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/activeobjectmgr.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/luaentity_sao.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mods.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/player_sao.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/serveractiveobject.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/serverinventorymgr.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/unit_sao.cpp
PARENT_SCOPE)
diff --git a/src/server/activeobjectmgr.cpp b/src/server/activeobjectmgr.cpp
index 984ae7794..1b8e31409 100644
--- a/src/server/activeobjectmgr.cpp
+++ b/src/server/activeobjectmgr.cpp
@@ -111,17 +111,19 @@ void ActiveObjectMgr::removeObject(u16 id)
}
// clang-format on
-void ActiveObjectMgr::getObjectsInsideRadius(
- const v3f &pos, float radius, std::vector<u16> &result)
+void ActiveObjectMgr::getObjectsInsideRadius(const v3f &pos, float radius,
+ std::vector<ServerActiveObject *> &result,
+ std::function<bool(ServerActiveObject *obj)> include_obj_cb)
{
float r2 = radius * radius;
for (auto &activeObject : m_active_objects) {
ServerActiveObject *obj = activeObject.second;
- u16 id = activeObject.first;
const v3f &objectpos = obj->getBasePosition();
if (objectpos.getDistanceFromSQ(pos) > r2)
continue;
- result.push_back(id);
+
+ if (!include_obj_cb || include_obj_cb(obj))
+ result.push_back(obj);
}
}
diff --git a/src/server/activeobjectmgr.h b/src/server/activeobjectmgr.h
index a502ac6ed..bc2085499 100644
--- a/src/server/activeobjectmgr.h
+++ b/src/server/activeobjectmgr.h
@@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <functional>
#include <vector>
#include "../activeobjectmgr.h"
-#include "serverobject.h"
+#include "serveractiveobject.h"
namespace server
{
@@ -35,8 +35,9 @@ public:
bool registerObject(ServerActiveObject *obj) override;
void removeObject(u16 id) override;
- void getObjectsInsideRadius(
- const v3f &pos, float radius, std::vector<u16> &result);
+ void getObjectsInsideRadius(const v3f &pos, float radius,
+ std::vector<ServerActiveObject *> &result,
+ std::function<bool(ServerActiveObject *obj)> include_obj_cb);
void getAddedActiveObjectsAroundPos(const v3f &player_pos, f32 radius,
f32 player_radius, std::set<u16> &current_objects,
diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp
new file mode 100644
index 000000000..d504c42ca
--- /dev/null
+++ b/src/server/luaentity_sao.cpp
@@ -0,0 +1,541 @@
+/*
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2013-2020 Minetest core developers & community
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "luaentity_sao.h"
+#include "collision.h"
+#include "constants.h"
+#include "player_sao.h"
+#include "scripting_server.h"
+#include "server.h"
+#include "serverenvironment.h"
+
+LuaEntitySAO::LuaEntitySAO(ServerEnvironment *env, v3f pos, const std::string &data)
+ : UnitSAO(env, pos)
+{
+ std::string name;
+ std::string state;
+ u16 hp = 1;
+ v3f velocity;
+ v3f rotation;
+
+ while (!data.empty()) { // breakable, run for one iteration
+ std::istringstream is(data, std::ios::binary);
+ // 'version' does not allow to incrementally extend the parameter list thus
+ // we need another variable to build on top of 'version=1'. Ugly hack but worksâ„¢
+ u8 version2 = 0;
+ u8 version = readU8(is);
+
+ name = deSerializeString(is);
+ state = deSerializeLongString(is);
+
+ if (version < 1)
+ break;
+
+ hp = readU16(is);
+ velocity = readV3F1000(is);
+ // yaw must be yaw to be backwards-compatible
+ rotation.Y = readF1000(is);
+
+ if (is.good()) // EOF for old formats
+ version2 = readU8(is);
+
+ if (version2 < 1) // PROTOCOL_VERSION < 37
+ break;
+
+ // version2 >= 1
+ rotation.X = readF1000(is);
+ rotation.Z = readF1000(is);
+
+ // if (version2 < 2)
+ // break;
+ // <read new values>
+ break;
+ }
+ // create object
+ infostream << "LuaEntitySAO::create(name=\"" << name << "\" state=\""
+ << state << "\")" << std::endl;
+
+ m_init_name = name;
+ m_init_state = state;
+ m_hp = hp;
+ m_velocity = velocity;
+ m_rotation = rotation;
+}
+
+LuaEntitySAO::~LuaEntitySAO()
+{
+ if(m_registered){
+ m_env->getScriptIface()->luaentity_Remove(m_id);
+ }
+
+ for (u32 attached_particle_spawner : m_attached_particle_spawners) {
+ m_env->deleteParticleSpawner(attached_particle_spawner, false);
+ }
+}
+
+void LuaEntitySAO::addedToEnvironment(u32 dtime_s)
+{
+ ServerActiveObject::addedToEnvironment(dtime_s);
+
+ // Create entity from name
+ m_registered = m_env->getScriptIface()->
+ luaentity_Add(m_id, m_init_name.c_str());
+
+ if(m_registered){
+ // Get properties
+ m_env->getScriptIface()->
+ luaentity_GetProperties(m_id, this, &m_prop);
+ // Initialize HP from properties
+ m_hp = m_prop.hp_max;
+ // Activate entity, supplying serialized state
+ m_env->getScriptIface()->
+ luaentity_Activate(m_id, m_init_state, dtime_s);
+ } else {
+ m_prop.infotext = m_init_name;
+ }
+}
+
+void LuaEntitySAO::step(float dtime, bool send_recommended)
+{
+ if(!m_properties_sent)
+ {
+ m_properties_sent = true;
+ std::string str = getPropertyPacket();
+ // create message and add to list
+ m_messages_out.emplace(getId(), true, str);
+ }
+
+ // If attached, check that our parent is still there. If it isn't, detach.
+ if (m_attachment_parent_id && !isAttached()) {
+ // This is handled when objects are removed from the map
+ warningstream << "LuaEntitySAO::step() id=" << m_id <<
+ " is attached to nonexistent parent. This is a bug." << std::endl;
+ clearParentAttachment();
+ sendPosition(false, true);
+ }
+
+ m_last_sent_position_timer += dtime;
+
+ collisionMoveResult moveresult, *moveresult_p = nullptr;
+
+ // 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;
+ m_velocity = v3f(0,0,0);
+ m_acceleration = v3f(0,0,0);
+ }
+ else
+ {
+ if(m_prop.physical){
+ aabb3f box = m_prop.collisionbox;
+ box.MinEdge *= BS;
+ box.MaxEdge *= BS;
+ f32 pos_max_d = BS*0.25; // Distance per iteration
+ v3f p_pos = m_base_position;
+ v3f p_velocity = m_velocity;
+ v3f p_acceleration = m_acceleration;
+ moveresult = collisionMoveSimple(m_env, m_env->getGameDef(),
+ pos_max_d, box, m_prop.stepheight, dtime,
+ &p_pos, &p_velocity, p_acceleration,
+ this, m_prop.collideWithObjects);
+ moveresult_p = &moveresult;
+
+ // Apply results
+ m_base_position = p_pos;
+ m_velocity = p_velocity;
+ m_acceleration = p_acceleration;
+ } else {
+ m_base_position += dtime * m_velocity + 0.5 * dtime
+ * dtime * m_acceleration;
+ m_velocity += dtime * m_acceleration;
+ }
+
+ if (m_prop.automatic_face_movement_dir &&
+ (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001)) {
+ float target_yaw = atan2(m_velocity.Z, m_velocity.X) * 180 / M_PI
+ + m_prop.automatic_face_movement_dir_offset;
+ float max_rotation_per_sec =
+ m_prop.automatic_face_movement_max_rotation_per_sec;
+
+ if (max_rotation_per_sec > 0) {
+ m_rotation.Y = wrapDegrees_0_360(m_rotation.Y);
+ wrappedApproachShortest(m_rotation.Y, target_yaw,
+ dtime * max_rotation_per_sec, 360.f);
+ } else {
+ // Negative values of max_rotation_per_sec mean disabled.
+ m_rotation.Y = target_yaw;
+ }
+ }
+ }
+
+ if(m_registered) {
+ m_env->getScriptIface()->luaentity_Step(m_id, dtime, moveresult_p);
+ }
+
+ if (!send_recommended)
+ return;
+
+ if(!isAttached())
+ {
+ // TODO: force send when acceleration changes enough?
+ float minchange = 0.2*BS;
+ if(m_last_sent_position_timer > 1.0){
+ minchange = 0.01*BS;
+ } else if(m_last_sent_position_timer > 0.2){
+ minchange = 0.05*BS;
+ }
+ float move_d = m_base_position.getDistanceFrom(m_last_sent_position);
+ move_d += m_last_sent_move_precision;
+ float vel_d = m_velocity.getDistanceFrom(m_last_sent_velocity);
+ if (move_d > minchange || vel_d > minchange ||
+ std::fabs(m_rotation.X - m_last_sent_rotation.X) > 1.0f ||
+ std::fabs(m_rotation.Y - m_last_sent_rotation.Y) > 1.0f ||
+ std::fabs(m_rotation.Z - m_last_sent_rotation.Z) > 1.0f) {
+
+ sendPosition(true, false);
+ }
+ }
+
+ sendOutdatedData();
+}
+
+std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
+{
+ std::ostringstream os(std::ios::binary);
+
+ // PROTOCOL_VERSION >= 37
+ writeU8(os, 1); // version
+ os << serializeString(""); // name
+ writeU8(os, 0); // is_player
+ writeU16(os, getId()); //id
+ writeV3F32(os, m_base_position);
+ writeV3F32(os, m_rotation);
+ writeU16(os, m_hp);
+
+ std::ostringstream msg_os(std::ios::binary);
+ msg_os << serializeLongString(getPropertyPacket()); // message 1
+ msg_os << serializeLongString(generateUpdateArmorGroupsCommand()); // 2
+ msg_os << serializeLongString(generateUpdateAnimationCommand()); // 3
+ for (const auto &bone_pos : m_bone_position) {
+ msg_os << serializeLongString(generateUpdateBonePositionCommand(
+ bone_pos.first, bone_pos.second.X, bone_pos.second.Y)); // m_bone_position.size
+ }
+ msg_os << serializeLongString(generateUpdateAttachmentCommand()); // 4
+
+ int message_count = 4 + m_bone_position.size();
+
+ for (const auto &id : getAttachmentChildIds()) {
+ if (ServerActiveObject *obj = m_env->getActiveObject(id)) {
+ message_count++;
+ msg_os << serializeLongString(obj->generateUpdateInfantCommand(
+ id, protocol_version));
+ }
+ }
+
+ msg_os << serializeLongString(generateSetTextureModCommand());
+ message_count++;
+
+ writeU8(os, message_count);
+ std::string serialized = msg_os.str();
+ os.write(serialized.c_str(), serialized.size());
+
+ // return result
+ return os.str();
+}
+
+void LuaEntitySAO::getStaticData(std::string *result) const
+{
+ verbosestream<<FUNCTION_NAME<<std::endl;
+ std::ostringstream os(std::ios::binary);
+ // version must be 1 to keep backwards-compatibility. See version2
+ writeU8(os, 1);
+ // name
+ os<<serializeString(m_init_name);
+ // state
+ if(m_registered){
+ std::string state = m_env->getScriptIface()->
+ luaentity_GetStaticdata(m_id);
+ os<<serializeLongString(state);
+ } else {
+ os<<serializeLongString(m_init_state);
+ }
+ writeU16(os, m_hp);
+ writeV3F1000(os, m_velocity);
+ // yaw
+ writeF1000(os, m_rotation.Y);
+
+ // version2. Increase this variable for new values
+ writeU8(os, 1); // PROTOCOL_VERSION >= 37
+
+ writeF1000(os, m_rotation.X);
+ writeF1000(os, m_rotation.Z);
+
+ // <write new values>
+
+ *result = os.str();
+}
+
+u16 LuaEntitySAO::punch(v3f dir,
+ const ToolCapabilities *toolcap,
+ ServerActiveObject *puncher,
+ float time_from_last_punch)
+{
+ if (!m_registered) {
+ // Delete unknown LuaEntities when punched
+ m_pending_removal = true;
+ return 0;
+ }
+
+ FATAL_ERROR_IF(!puncher, "Punch action called without SAO");
+
+ s32 old_hp = getHP();
+ ItemStack selected_item, hand_item;
+ ItemStack tool_item = puncher->getWieldedItem(&selected_item, &hand_item);
+
+ PunchDamageResult result = getPunchDamage(
+ m_armor_groups,
+ toolcap,
+ &tool_item,
+ time_from_last_punch);
+
+ bool damage_handled = m_env->getScriptIface()->luaentity_Punch(m_id, puncher,
+ time_from_last_punch, toolcap, dir, result.did_punch ? result.damage : 0);
+
+ if (!damage_handled) {
+ if (result.did_punch) {
+ setHP((s32)getHP() - result.damage,
+ PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, puncher));
+
+ // create message and add to list
+ sendPunchCommand();
+ }
+ }
+
+ if (getHP() == 0 && !isGone()) {
+ clearParentAttachment();
+ clearChildAttachments();
+ m_env->getScriptIface()->luaentity_on_death(m_id, puncher);
+ m_pending_removal = true;
+ }
+
+ actionstream << puncher->getDescription() << " (id=" << puncher->getId() <<
+ ", hp=" << puncher->getHP() << ") punched " <<
+ getDescription() << " (id=" << m_id << ", hp=" << m_hp <<
+ "), damage=" << (old_hp - (s32)getHP()) <<
+ (damage_handled ? " (handled by Lua)" : "") << std::endl;
+
+ // TODO: give Lua control over wear
+ return result.wear;
+}
+
+void LuaEntitySAO::rightClick(ServerActiveObject *clicker)
+{
+ if (!m_registered)
+ return;
+
+ m_env->getScriptIface()->luaentity_Rightclick(m_id, clicker);
+}
+
+void LuaEntitySAO::setPos(const v3f &pos)
+{
+ if(isAttached())
+ return;
+ m_base_position = pos;
+ sendPosition(false, true);
+}
+
+void LuaEntitySAO::moveTo(v3f pos, bool continuous)
+{
+ if(isAttached())
+ return;
+ m_base_position = pos;
+ if(!continuous)
+ sendPosition(true, true);
+}
+
+float LuaEntitySAO::getMinimumSavedMovement()
+{
+ return 0.1 * BS;
+}
+
+std::string LuaEntitySAO::getDescription()
+{
+ std::ostringstream oss;
+ oss << "LuaEntitySAO \"" << m_init_name << "\" ";
+ auto pos = floatToInt(m_base_position, BS);
+ oss << "at " << PP(pos);
+ return oss.str();
+}
+
+void LuaEntitySAO::setHP(s32 hp, const PlayerHPChangeReason &reason)
+{
+ m_hp = rangelim(hp, 0, U16_MAX);
+}
+
+u16 LuaEntitySAO::getHP() const
+{
+ return m_hp;
+}
+
+void LuaEntitySAO::setVelocity(v3f velocity)
+{
+ m_velocity = velocity;
+}
+
+v3f LuaEntitySAO::getVelocity()
+{
+ return m_velocity;
+}
+
+void LuaEntitySAO::setAcceleration(v3f acceleration)
+{
+ m_acceleration = acceleration;
+}
+
+v3f LuaEntitySAO::getAcceleration()
+{
+ return m_acceleration;
+}
+
+void LuaEntitySAO::setTextureMod(const std::string &mod)
+{
+ m_current_texture_modifier = mod;
+ // create message and add to list
+ m_messages_out.emplace(getId(), true, generateSetTextureModCommand());
+}
+
+std::string LuaEntitySAO::getTextureMod() const
+{
+ return m_current_texture_modifier;
+}
+
+
+std::string LuaEntitySAO::generateSetTextureModCommand() const
+{
+ std::ostringstream os(std::ios::binary);
+ // command
+ writeU8(os, AO_CMD_SET_TEXTURE_MOD);
+ // parameters
+ os << serializeString(m_current_texture_modifier);
+ return os.str();
+}
+
+std::string LuaEntitySAO::generateSetSpriteCommand(v2s16 p, u16 num_frames,
+ f32 framelength, bool select_horiz_by_yawpitch)
+{
+ std::ostringstream os(std::ios::binary);
+ // command
+ writeU8(os, AO_CMD_SET_SPRITE);
+ // parameters
+ writeV2S16(os, p);
+ writeU16(os, num_frames);
+ writeF32(os, framelength);
+ writeU8(os, select_horiz_by_yawpitch);
+ return os.str();
+}
+
+void LuaEntitySAO::setSprite(v2s16 p, int num_frames, float framelength,
+ bool select_horiz_by_yawpitch)
+{
+ std::string str = generateSetSpriteCommand(
+ p,
+ num_frames,
+ framelength,
+ select_horiz_by_yawpitch
+ );
+ // create message and add to list
+ m_messages_out.emplace(getId(), true, str);
+}
+
+std::string LuaEntitySAO::getName()
+{
+ return m_init_name;
+}
+
+std::string LuaEntitySAO::getPropertyPacket()
+{
+ return generateSetPropertiesCommand(m_prop);
+}
+
+void LuaEntitySAO::sendPosition(bool do_interpolate, bool is_movement_end)
+{
+ // If the object is attached client-side, don't waste bandwidth sending its position to clients
+ if(isAttached())
+ return;
+
+ m_last_sent_move_precision = m_base_position.getDistanceFrom(
+ m_last_sent_position);
+ m_last_sent_position_timer = 0;
+ m_last_sent_position = m_base_position;
+ m_last_sent_velocity = m_velocity;
+ //m_last_sent_acceleration = m_acceleration;
+ m_last_sent_rotation = m_rotation;
+
+ float update_interval = m_env->getSendRecommendedInterval();
+
+ std::string str = generateUpdatePositionCommand(
+ m_base_position,
+ m_velocity,
+ m_acceleration,
+ m_rotation,
+ do_interpolate,
+ is_movement_end,
+ update_interval
+ );
+ // create message and add to list
+ m_messages_out.emplace(getId(), false, str);
+}
+
+bool LuaEntitySAO::getCollisionBox(aabb3f *toset) const
+{
+ if (m_prop.physical)
+ {
+ //update collision box
+ toset->MinEdge = m_prop.collisionbox.MinEdge * BS;
+ toset->MaxEdge = m_prop.collisionbox.MaxEdge * BS;
+
+ toset->MinEdge += m_base_position;
+ toset->MaxEdge += m_base_position;
+
+ return true;
+ }
+
+ return false;
+}
+
+bool LuaEntitySAO::getSelectionBox(aabb3f *toset) const
+{
+ if (!m_prop.is_visible || !m_prop.pointable) {
+ return false;
+ }
+
+ toset->MinEdge = m_prop.selectionbox.MinEdge * BS;
+ toset->MaxEdge = m_prop.selectionbox.MaxEdge * BS;
+
+ return true;
+}
+
+bool LuaEntitySAO::collideWithObjects() const
+{
+ return m_prop.collideWithObjects;
+}
diff --git a/src/server/luaentity_sao.h b/src/server/luaentity_sao.h
new file mode 100644
index 000000000..2520c8f5d
--- /dev/null
+++ b/src/server/luaentity_sao.h
@@ -0,0 +1,93 @@
+/*
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2013-2020 Minetest core developers & community
+
+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 "unit_sao.h"
+
+class LuaEntitySAO : public UnitSAO
+{
+public:
+ LuaEntitySAO() = delete;
+ // Used by the environment to load SAO
+ LuaEntitySAO(ServerEnvironment *env, v3f pos, const std::string &data);
+ // Used by the Lua API
+ LuaEntitySAO(ServerEnvironment *env, v3f pos, const std::string &name,
+ const std::string &state) :
+ UnitSAO(env, pos),
+ m_init_name(name), m_init_state(state)
+ {
+ }
+ ~LuaEntitySAO();
+ ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_LUAENTITY; }
+ ActiveObjectType getSendType() const { return ACTIVEOBJECT_TYPE_GENERIC; }
+ virtual void addedToEnvironment(u32 dtime_s);
+ void step(float dtime, bool send_recommended);
+ std::string getClientInitializationData(u16 protocol_version);
+ bool isStaticAllowed() const { return m_prop.static_save; }
+ void getStaticData(std::string *result) const;
+ u16 punch(v3f dir, const ToolCapabilities *toolcap = nullptr,
+ ServerActiveObject *puncher = nullptr,
+ float time_from_last_punch = 1000000.0f);
+ void rightClick(ServerActiveObject *clicker);
+ void setPos(const v3f &pos);
+ void moveTo(v3f pos, bool continuous);
+ float getMinimumSavedMovement();
+ std::string getDescription();
+ void setHP(s32 hp, const PlayerHPChangeReason &reason);
+ u16 getHP() const;
+
+ /* LuaEntitySAO-specific */
+ void setVelocity(v3f velocity);
+ void addVelocity(v3f velocity) { m_velocity += velocity; }
+ v3f getVelocity();
+ void setAcceleration(v3f acceleration);
+ v3f getAcceleration();
+
+ void setTextureMod(const std::string &mod);
+ std::string getTextureMod() const;
+ void setSprite(v2s16 p, int num_frames, float framelength,
+ bool select_horiz_by_yawpitch);
+ std::string getName();
+ bool getCollisionBox(aabb3f *toset) const;
+ bool getSelectionBox(aabb3f *toset) const;
+ bool collideWithObjects() const;
+
+private:
+ std::string getPropertyPacket();
+ void sendPosition(bool do_interpolate, bool is_movement_end);
+ std::string generateSetTextureModCommand() const;
+ static std::string generateSetSpriteCommand(v2s16 p, u16 num_frames,
+ f32 framelength, bool select_horiz_by_yawpitch);
+
+ std::string m_init_name;
+ std::string m_init_state;
+ bool m_registered = false;
+
+ v3f m_velocity;
+ v3f m_acceleration;
+
+ v3f m_last_sent_position;
+ v3f m_last_sent_velocity;
+ v3f m_last_sent_rotation;
+ float m_last_sent_position_timer = 0.0f;
+ float m_last_sent_move_precision = 0.0f;
+ std::string m_current_texture_modifier = "";
+};
diff --git a/src/server/mods.cpp b/src/server/mods.cpp
index c5616dcd6..6ac530739 100644
--- a/src/server/mods.cpp
+++ b/src/server/mods.cpp
@@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "scripting_server.h"
#include "content/subgames.h"
+#include "porting.h"
+#include "util/metricsbackend.h"
/**
* Manage server mods
@@ -66,14 +68,10 @@ void ServerModManager::loadMods(ServerScripting *script)
"Only characters [a-z0-9_] are allowed.");
}
std::string script_path = mod.path + DIR_DELIM + "init.lua";
- infostream << " [" << padStringRight(mod.name, 12) << "] [\""
- << script_path << "\"]" << std::endl;
- auto t = std::chrono::steady_clock::now();
+ auto t = porting::getTimeMs();
script->loadMod(script_path, mod.name);
infostream << "Mod \"" << mod.name << "\" loaded after "
- << std::chrono::duration_cast<std::chrono::milliseconds>(
- std::chrono::steady_clock::now() - t).count() * 0.001f
- << " seconds" << std::endl;
+ << (porting::getTimeMs() - t) << " ms" << std::endl;
}
// Run a callback when mods are loaded
diff --git a/src/server/mods.h b/src/server/mods.h
index 2bc1aa22f..54774bd86 100644
--- a/src/server/mods.h
+++ b/src/server/mods.h
@@ -20,7 +20,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include "content/mods.h"
+#include <memory>
+class MetricsBackend;
+class MetricCounter;
class ServerScripting;
/**
diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp
new file mode 100644
index 000000000..67efed210
--- /dev/null
+++ b/src/server/player_sao.cpp
@@ -0,0 +1,665 @@
+/*
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2013-2020 Minetest core developers & community
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "player_sao.h"
+#include "nodedef.h"
+#include "remoteplayer.h"
+#include "scripting_server.h"
+#include "server.h"
+#include "serverenvironment.h"
+
+PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t peer_id_,
+ bool is_singleplayer):
+ UnitSAO(env_, v3f(0,0,0)),
+ m_player(player_),
+ m_peer_id(peer_id_),
+ m_is_singleplayer(is_singleplayer)
+{
+ SANITY_CHECK(m_peer_id != PEER_ID_INEXISTENT);
+
+ m_prop.hp_max = PLAYER_MAX_HP_DEFAULT;
+ m_prop.breath_max = PLAYER_MAX_BREATH_DEFAULT;
+ m_prop.physical = false;
+ m_prop.collisionbox = aabb3f(-0.3f, 0.0f, -0.3f, 0.3f, 1.77f, 0.3f);
+ m_prop.selectionbox = aabb3f(-0.3f, 0.0f, -0.3f, 0.3f, 1.77f, 0.3f);
+ m_prop.pointable = true;
+ // Start of default appearance, this should be overwritten by Lua
+ m_prop.visual = "upright_sprite";
+ m_prop.visual_size = v3f(1, 2, 1);
+ m_prop.textures.clear();
+ m_prop.textures.emplace_back("player.png");
+ m_prop.textures.emplace_back("player_back.png");
+ m_prop.colors.clear();
+ m_prop.colors.emplace_back(255, 255, 255, 255);
+ m_prop.spritediv = v2s16(1,1);
+ m_prop.eye_height = 1.625f;
+ // End of default appearance
+ m_prop.is_visible = true;
+ m_prop.backface_culling = false;
+ m_prop.makes_footstep_sound = true;
+ m_prop.stepheight = PLAYER_DEFAULT_STEPHEIGHT * BS;
+ m_hp = m_prop.hp_max;
+ m_breath = m_prop.breath_max;
+ // Disable zoom in survival mode using a value of 0
+ m_prop.zoom_fov = g_settings->getBool("creative_mode") ? 15.0f : 0.0f;
+
+ if (!g_settings->getBool("enable_damage"))
+ m_armor_groups["immortal"] = 1;
+}
+
+void PlayerSAO::finalize(RemotePlayer *player, const std::set<std::string> &privs)
+{
+ assert(player);
+ m_player = player;
+ m_privs = privs;
+}
+
+v3f PlayerSAO::getEyeOffset() const
+{
+ return v3f(0, BS * m_prop.eye_height, 0);
+}
+
+std::string PlayerSAO::getDescription()
+{
+ return std::string("player ") + m_player->getName();
+}
+
+// Called after id has been set and has been inserted in environment
+void PlayerSAO::addedToEnvironment(u32 dtime_s)
+{
+ ServerActiveObject::addedToEnvironment(dtime_s);
+ ServerActiveObject::setBasePosition(m_base_position);
+ m_player->setPlayerSAO(this);
+ m_player->setPeerId(m_peer_id);
+ m_last_good_position = m_base_position;
+}
+
+// Called before removing from environment
+void PlayerSAO::removingFromEnvironment()
+{
+ ServerActiveObject::removingFromEnvironment();
+ if (m_player->getPlayerSAO() == this) {
+ unlinkPlayerSessionAndSave();
+ for (u32 attached_particle_spawner : m_attached_particle_spawners) {
+ m_env->deleteParticleSpawner(attached_particle_spawner, false);
+ }
+ }
+}
+
+std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
+{
+ std::ostringstream os(std::ios::binary);
+
+ // Protocol >= 15
+ writeU8(os, 1); // version
+ os << serializeString(m_player->getName()); // name
+ writeU8(os, 1); // is_player
+ writeS16(os, getId()); // id
+ writeV3F32(os, m_base_position);
+ writeV3F32(os, m_rotation);
+ writeU16(os, getHP());
+
+ std::ostringstream msg_os(std::ios::binary);
+ msg_os << serializeLongString(getPropertyPacket()); // message 1
+ msg_os << serializeLongString(generateUpdateArmorGroupsCommand()); // 2
+ msg_os << serializeLongString(generateUpdateAnimationCommand()); // 3
+ for (const auto &bone_pos : m_bone_position) {
+ msg_os << serializeLongString(generateUpdateBonePositionCommand(
+ bone_pos.first, bone_pos.second.X, bone_pos.second.Y)); // m_bone_position.size
+ }
+ msg_os << serializeLongString(generateUpdateAttachmentCommand()); // 4
+ msg_os << serializeLongString(generateUpdatePhysicsOverrideCommand()); // 5
+
+ int message_count = 5 + m_bone_position.size();
+
+ for (const auto &id : getAttachmentChildIds()) {
+ if (ServerActiveObject *obj = m_env->getActiveObject(id)) {
+ message_count++;
+ msg_os << serializeLongString(obj->generateUpdateInfantCommand(
+ id, protocol_version));
+ }
+ }
+
+ writeU8(os, message_count);
+ std::string serialized = msg_os.str();
+ os.write(serialized.c_str(), serialized.size());
+
+ // return result
+ return os.str();
+}
+
+void PlayerSAO::getStaticData(std::string * result) const
+{
+ FATAL_ERROR("Obsolete function");
+}
+
+void PlayerSAO::step(float dtime, bool send_recommended)
+{
+ if (!isImmortal() && m_drowning_interval.step(dtime, 2.0f)) {
+ // Get nose/mouth position, approximate with eye position
+ v3s16 p = floatToInt(getEyePosition(), BS);
+ MapNode n = m_env->getMap().getNode(p);
+ const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n);
+ // If node generates drown
+ if (c.drowning > 0 && m_hp > 0) {
+ if (m_breath > 0)
+ setBreath(m_breath - 1);
+
+ // No more breath, damage player
+ if (m_breath == 0) {
+ PlayerHPChangeReason reason(PlayerHPChangeReason::DROWNING);
+ setHP(m_hp - c.drowning, reason);
+ m_env->getGameDef()->SendPlayerHPOrDie(this, reason);
+ }
+ }
+ }
+
+ if (m_breathing_interval.step(dtime, 0.5f) && !isImmortal()) {
+ // Get nose/mouth position, approximate with eye position
+ v3s16 p = floatToInt(getEyePosition(), BS);
+ MapNode n = m_env->getMap().getNode(p);
+ const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n);
+ // If player is alive & not drowning & not in ignore & not immortal, breathe
+ if (m_breath < m_prop.breath_max && c.drowning == 0 &&
+ n.getContent() != CONTENT_IGNORE && m_hp > 0)
+ setBreath(m_breath + 1);
+ }
+
+ if (!isImmortal() && m_node_hurt_interval.step(dtime, 1.0f)) {
+ u32 damage_per_second = 0;
+ std::string nodename;
+ // Lowest and highest damage points are 0.1 within collisionbox
+ float dam_top = m_prop.collisionbox.MaxEdge.Y - 0.1f;
+
+ // Sequence of damage points, starting 0.1 above feet and progressing
+ // upwards in 1 node intervals, stopping below top damage point.
+ for (float dam_height = 0.1f; dam_height < dam_top; dam_height++) {
+ v3s16 p = floatToInt(m_base_position +
+ v3f(0.0f, dam_height * BS, 0.0f), BS);
+ MapNode n = m_env->getMap().getNode(p);
+ const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n);
+ if (c.damage_per_second > damage_per_second) {
+ damage_per_second = c.damage_per_second;
+ nodename = c.name;
+ }
+ }
+
+ // Top damage point
+ v3s16 ptop = floatToInt(m_base_position +
+ v3f(0.0f, dam_top * BS, 0.0f), BS);
+ MapNode ntop = m_env->getMap().getNode(ptop);
+ const ContentFeatures &c = m_env->getGameDef()->ndef()->get(ntop);
+ if (c.damage_per_second > damage_per_second) {
+ damage_per_second = c.damage_per_second;
+ nodename = c.name;
+ }
+
+ if (damage_per_second != 0 && m_hp > 0) {
+ s32 newhp = (s32)m_hp - (s32)damage_per_second;
+ PlayerHPChangeReason reason(PlayerHPChangeReason::NODE_DAMAGE, nodename);
+ setHP(newhp, reason);
+ m_env->getGameDef()->SendPlayerHPOrDie(this, reason);
+ }
+ }
+
+ if (!m_properties_sent) {
+ m_properties_sent = true;
+ std::string str = getPropertyPacket();
+ // create message and add to list
+ m_messages_out.emplace(getId(), true, str);
+ m_env->getScriptIface()->player_event(this, "properties_changed");
+ }
+
+ // If attached, check that our parent is still there. If it isn't, detach.
+ if (m_attachment_parent_id && !isAttached()) {
+ // This is handled when objects are removed from the map
+ warningstream << "PlayerSAO::step() id=" << m_id <<
+ " is attached to nonexistent parent. This is a bug." << std::endl;
+ clearParentAttachment();
+ setBasePosition(m_last_good_position);
+ m_env->getGameDef()->SendMovePlayer(m_peer_id);
+ }
+
+ //dstream<<"PlayerSAO::step: dtime: "<<dtime<<std::endl;
+
+ // Set lag pool maximums based on estimated lag
+ const float LAG_POOL_MIN = 5.0f;
+ float lag_pool_max = m_env->getMaxLagEstimate() * 2.0f;
+ if(lag_pool_max < LAG_POOL_MIN)
+ lag_pool_max = LAG_POOL_MIN;
+ m_dig_pool.setMax(lag_pool_max);
+ m_move_pool.setMax(lag_pool_max);
+
+ // Increment cheat prevention timers
+ m_dig_pool.add(dtime);
+ m_move_pool.add(dtime);
+ m_time_from_last_teleport += dtime;
+ m_time_from_last_punch += dtime;
+ m_nocheat_dig_time += dtime;
+ m_max_speed_override_time = MYMAX(m_max_speed_override_time - dtime, 0.0f);
+
+ // 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_last_good_position = pos;
+ setBasePosition(pos);
+ }
+
+ if (!send_recommended)
+ return;
+
+ if (m_position_not_sent) {
+ m_position_not_sent = false;
+ float update_interval = m_env->getSendRecommendedInterval();
+ v3f pos;
+ // When attached, the position is only sent to clients where the
+ // parent isn't known
+ if (isAttached())
+ pos = m_last_good_position;
+ else
+ pos = m_base_position;
+
+ std::string str = generateUpdatePositionCommand(
+ pos,
+ v3f(0.0f, 0.0f, 0.0f),
+ v3f(0.0f, 0.0f, 0.0f),
+ m_rotation,
+ true,
+ false,
+ update_interval
+ );
+ // create message and add to list
+ m_messages_out.emplace(getId(), false, str);
+ }
+
+ if (!m_physics_override_sent) {
+ m_physics_override_sent = true;
+ // create message and add to list
+ m_messages_out.emplace(getId(), true, generateUpdatePhysicsOverrideCommand());
+ }
+
+ sendOutdatedData();
+}
+
+std::string PlayerSAO::generateUpdatePhysicsOverrideCommand() const
+{
+ std::ostringstream os(std::ios::binary);
+ // command
+ writeU8(os, AO_CMD_SET_PHYSICS_OVERRIDE);
+ // parameters
+ writeF32(os, m_physics_override_speed);
+ writeF32(os, m_physics_override_jump);
+ writeF32(os, m_physics_override_gravity);
+ // these are sent inverted so we get true when the server sends nothing
+ writeU8(os, !m_physics_override_sneak);
+ writeU8(os, !m_physics_override_sneak_glitch);
+ writeU8(os, !m_physics_override_new_move);
+ return os.str();
+}
+
+void PlayerSAO::setBasePosition(const v3f &position)
+{
+ if (m_player && position != m_base_position)
+ m_player->setDirty(true);
+
+ // This needs to be ran for attachments too
+ ServerActiveObject::setBasePosition(position);
+
+ // Updating is not wanted/required for player migration
+ if (m_env) {
+ m_position_not_sent = true;
+ }
+}
+
+void PlayerSAO::setPos(const v3f &pos)
+{
+ if(isAttached())
+ return;
+
+ // Send mapblock of target location
+ v3s16 blockpos = v3s16(pos.X / MAP_BLOCKSIZE, pos.Y / MAP_BLOCKSIZE, pos.Z / MAP_BLOCKSIZE);
+ m_env->getGameDef()->SendBlock(m_peer_id, blockpos);
+
+ setBasePosition(pos);
+ // Movement caused by this command is always valid
+ m_last_good_position = pos;
+ m_move_pool.empty();
+ m_time_from_last_teleport = 0.0;
+ m_env->getGameDef()->SendMovePlayer(m_peer_id);
+}
+
+void PlayerSAO::moveTo(v3f pos, bool continuous)
+{
+ if(isAttached())
+ return;
+
+ setBasePosition(pos);
+ // Movement caused by this command is always valid
+ m_last_good_position = pos;
+ m_move_pool.empty();
+ m_time_from_last_teleport = 0.0;
+ m_env->getGameDef()->SendMovePlayer(m_peer_id);
+}
+
+void PlayerSAO::setPlayerYaw(const float yaw)
+{
+ v3f rotation(0, yaw, 0);
+ if (m_player && yaw != m_rotation.Y)
+ m_player->setDirty(true);
+
+ // Set player model yaw, not look view
+ UnitSAO::setRotation(rotation);
+}
+
+void PlayerSAO::setFov(const float fov)
+{
+ if (m_player && fov != m_fov)
+ m_player->setDirty(true);
+
+ m_fov = fov;
+}
+
+void PlayerSAO::setWantedRange(const s16 range)
+{
+ if (m_player && range != m_wanted_range)
+ m_player->setDirty(true);
+
+ m_wanted_range = range;
+}
+
+void PlayerSAO::setPlayerYawAndSend(const float yaw)
+{
+ setPlayerYaw(yaw);
+ m_env->getGameDef()->SendMovePlayer(m_peer_id);
+}
+
+void PlayerSAO::setLookPitch(const float pitch)
+{
+ if (m_player && pitch != m_pitch)
+ m_player->setDirty(true);
+
+ m_pitch = pitch;
+}
+
+void PlayerSAO::setLookPitchAndSend(const float pitch)
+{
+ setLookPitch(pitch);
+ m_env->getGameDef()->SendMovePlayer(m_peer_id);
+}
+
+u16 PlayerSAO::punch(v3f dir,
+ const ToolCapabilities *toolcap,
+ ServerActiveObject *puncher,
+ float time_from_last_punch)
+{
+ if (!toolcap)
+ return 0;
+
+ FATAL_ERROR_IF(!puncher, "Punch action called without SAO");
+
+ // No effect if PvP disabled or if immortal
+ if (isImmortal() || !g_settings->getBool("enable_pvp")) {
+ if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
+ // create message and add to list
+ sendPunchCommand();
+ return 0;
+ }
+ }
+
+ s32 old_hp = getHP();
+ HitParams hitparams = getHitParams(m_armor_groups, toolcap,
+ time_from_last_punch);
+
+ PlayerSAO *playersao = m_player->getPlayerSAO();
+
+ bool damage_handled = m_env->getScriptIface()->on_punchplayer(playersao,
+ puncher, time_from_last_punch, toolcap, dir,
+ hitparams.hp);
+
+ if (!damage_handled) {
+ setHP((s32)getHP() - (s32)hitparams.hp,
+ PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, puncher));
+ } else { // override client prediction
+ if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
+ // create message and add to list
+ sendPunchCommand();
+ }
+ }
+
+ actionstream << puncher->getDescription() << " (id=" << puncher->getId() <<
+ ", hp=" << puncher->getHP() << ") punched " <<
+ getDescription() << " (id=" << m_id << ", hp=" << m_hp <<
+ "), damage=" << (old_hp - (s32)getHP()) <<
+ (damage_handled ? " (handled by Lua)" : "") << std::endl;
+
+ return hitparams.wear;
+}
+
+void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason)
+{
+ s32 oldhp = m_hp;
+
+ hp = rangelim(hp, 0, m_prop.hp_max);
+
+ if (oldhp != hp) {
+ s32 hp_change = m_env->getScriptIface()->on_player_hpchange(this, hp - oldhp, reason);
+ if (hp_change == 0)
+ return;
+
+ hp = rangelim(oldhp + hp_change, 0, m_prop.hp_max);
+ }
+
+ if (hp < oldhp && isImmortal())
+ return;
+
+ m_hp = hp;
+
+ // Update properties on death
+ if ((hp == 0) != (oldhp == 0))
+ m_properties_sent = false;
+}
+
+void PlayerSAO::setBreath(const u16 breath, bool send)
+{
+ if (m_player && breath != m_breath)
+ m_player->setDirty(true);
+
+ m_breath = rangelim(breath, 0, m_prop.breath_max);
+
+ if (send)
+ m_env->getGameDef()->SendPlayerBreath(this);
+}
+
+Inventory *PlayerSAO::getInventory() const
+{
+ return m_player ? &m_player->inventory : nullptr;
+}
+
+InventoryLocation PlayerSAO::getInventoryLocation() const
+{
+ InventoryLocation loc;
+ loc.setPlayer(m_player->getName());
+ return loc;
+}
+
+u16 PlayerSAO::getWieldIndex() const
+{
+ return m_player->getWieldIndex();
+}
+
+ItemStack PlayerSAO::getWieldedItem(ItemStack *selected, ItemStack *hand) const
+{
+ return m_player->getWieldedItem(selected, hand);
+}
+
+bool PlayerSAO::setWieldedItem(const ItemStack &item)
+{
+ InventoryList *mlist = m_player->inventory.getList(getWieldList());
+ if (mlist) {
+ mlist->changeItem(m_player->getWieldIndex(), item);
+ return true;
+ }
+ return false;
+}
+
+void PlayerSAO::disconnected()
+{
+ m_peer_id = PEER_ID_INEXISTENT;
+ m_pending_removal = true;
+}
+
+void PlayerSAO::unlinkPlayerSessionAndSave()
+{
+ assert(m_player->getPlayerSAO() == this);
+ m_player->setPeerId(PEER_ID_INEXISTENT);
+ m_env->savePlayer(m_player);
+ m_player->setPlayerSAO(NULL);
+ m_env->removePlayer(m_player);
+}
+
+std::string PlayerSAO::getPropertyPacket()
+{
+ m_prop.is_visible = (true);
+ return generateSetPropertiesCommand(m_prop);
+}
+
+void PlayerSAO::setMaxSpeedOverride(const v3f &vel)
+{
+ if (m_max_speed_override_time == 0.0f)
+ m_max_speed_override = vel;
+ else
+ m_max_speed_override += vel;
+ if (m_player) {
+ float accel = MYMIN(m_player->movement_acceleration_default,
+ m_player->movement_acceleration_air);
+ m_max_speed_override_time = m_max_speed_override.getLength() / accel / BS;
+ }
+}
+
+bool PlayerSAO::checkMovementCheat()
+{
+ if (isAttached() || m_is_singleplayer ||
+ g_settings->getBool("disable_anticheat")) {
+ m_last_good_position = m_base_position;
+ return false;
+ }
+
+ bool cheated = false;
+ /*
+ Check player movements
+
+ NOTE: Actually the server should handle player physics like the
+ client does and compare player's position to what is calculated
+ on our side. This is required when eg. players fly due to an
+ explosion. Altough a node-based alternative might be possible
+ too, and much more lightweight.
+ */
+
+ float override_max_H, override_max_V;
+ if (m_max_speed_override_time > 0.0f) {
+ override_max_H = MYMAX(fabs(m_max_speed_override.X), fabs(m_max_speed_override.Z));
+ override_max_V = fabs(m_max_speed_override.Y);
+ } else {
+ override_max_H = override_max_V = 0.0f;
+ }
+
+ float player_max_walk = 0; // horizontal movement
+ float player_max_jump = 0; // vertical upwards movement
+
+ if (m_privs.count("fast") != 0)
+ player_max_walk = m_player->movement_speed_fast; // Fast speed
+ else
+ player_max_walk = m_player->movement_speed_walk; // Normal speed
+ player_max_walk *= m_physics_override_speed;
+ player_max_walk = MYMAX(player_max_walk, override_max_H);
+
+ player_max_jump = m_player->movement_speed_jump * m_physics_override_jump;
+ // FIXME: Bouncy nodes cause practically unbound increase in Y speed,
+ // until this can be verified correctly, tolerate higher jumping speeds
+ player_max_jump *= 2.0;
+ player_max_jump = MYMAX(player_max_jump, override_max_V);
+
+ // Don't divide by zero!
+ if (player_max_walk < 0.0001f)
+ player_max_walk = 0.0001f;
+ if (player_max_jump < 0.0001f)
+ player_max_jump = 0.0001f;
+
+ v3f diff = (m_base_position - m_last_good_position);
+ float d_vert = diff.Y;
+ diff.Y = 0;
+ float d_horiz = diff.getLength();
+ float required_time = d_horiz / player_max_walk;
+
+ // FIXME: Checking downwards movement is not easily possible currently,
+ // the server could calculate speed differences to examine the gravity
+ if (d_vert > 0) {
+ // In certain cases (water, ladders) walking speed is applied vertically
+ float s = MYMAX(player_max_jump, player_max_walk);
+ required_time = MYMAX(required_time, d_vert / s);
+ }
+
+ if (m_move_pool.grab(required_time)) {
+ m_last_good_position = m_base_position;
+ } else {
+ const float LAG_POOL_MIN = 5.0;
+ float lag_pool_max = m_env->getMaxLagEstimate() * 2.0;
+ lag_pool_max = MYMAX(lag_pool_max, LAG_POOL_MIN);
+ if (m_time_from_last_teleport > lag_pool_max) {
+ actionstream << "Server: " << m_player->getName()
+ << " moved too fast: V=" << d_vert << ", H=" << d_horiz
+ << "; resetting position." << std::endl;
+ cheated = true;
+ }
+ setBasePosition(m_last_good_position);
+ }
+ return cheated;
+}
+
+bool PlayerSAO::getCollisionBox(aabb3f *toset) const
+{
+ //update collision box
+ toset->MinEdge = m_prop.collisionbox.MinEdge * BS;
+ toset->MaxEdge = m_prop.collisionbox.MaxEdge * BS;
+
+ toset->MinEdge += m_base_position;
+ toset->MaxEdge += m_base_position;
+ return true;
+}
+
+bool PlayerSAO::getSelectionBox(aabb3f *toset) const
+{
+ if (!m_prop.is_visible || !m_prop.pointable) {
+ return false;
+ }
+
+ toset->MinEdge = m_prop.selectionbox.MinEdge * BS;
+ toset->MaxEdge = m_prop.selectionbox.MaxEdge * BS;
+
+ return true;
+}
+
+float PlayerSAO::getZoomFOV() const
+{
+ return m_prop.zoom_fov;
+}
diff --git a/src/content_sao.h b/src/server/player_sao.h
index e9047daf0..8571bd4f9 100644
--- a/src/content_sao.h
+++ b/src/server/player_sao.h
@@ -1,6 +1,7 @@
/*
Minetest
Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2013-2020 Minetest core developers & community
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -19,157 +20,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
+#include "constants.h"
#include "network/networkprotocol.h"
+#include "unit_sao.h"
#include "util/numeric.h"
-#include "serverobject.h"
-#include "itemgroup.h"
-#include "object_properties.h"
-#include "constants.h"
-
-class UnitSAO: public ServerActiveObject
-{
-public:
- UnitSAO(ServerEnvironment *env, v3f pos);
- virtual ~UnitSAO() = default;
-
- void setRotation(v3f rotation) { m_rotation = rotation; }
- const v3f &getRotation() const { return m_rotation; }
- v3f getRadRotation() { return m_rotation * core::DEGTORAD; }
-
- // Deprecated
- f32 getRadYawDep() const { return (m_rotation.Y + 90.) * core::DEGTORAD; }
-
- u16 getHP() const { return m_hp; }
- // Use a function, if isDead can be defined by other conditions
- bool isDead() const { return m_hp == 0; }
-
- inline bool isAttached() const
- { return getParent(); }
-
- inline bool isImmortal() const
- { return itemgroup_get(getArmorGroups(), "immortal"); }
-
- void setArmorGroups(const ItemGroupList &armor_groups);
- const ItemGroupList &getArmorGroups() const;
- void setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop);
- void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop);
- void setAnimationSpeed(float frame_speed);
- void setBonePosition(const std::string &bone, v3f position, v3f rotation);
- void getBonePosition(const std::string &bone, v3f *position, v3f *rotation);
- void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation);
- void getAttachment(int *parent_id, std::string *bone, v3f *position,
- v3f *rotation) const;
- void clearChildAttachments();
- void clearParentAttachment();
- void addAttachmentChild(int child_id);
- void removeAttachmentChild(int child_id);
- const std::unordered_set<int> &getAttachmentChildIds() const;
- ServerActiveObject *getParent() const;
- ObjectProperties* accessObjectProperties();
- void notifyObjectPropertiesModified();
-protected:
- u16 m_hp = 1;
-
- v3f m_rotation;
-
- bool m_properties_sent = true;
- ObjectProperties m_prop;
-
- ItemGroupList m_armor_groups;
- bool m_armor_groups_sent = false;
-
- v2f m_animation_range;
- float m_animation_speed = 0.0f;
- float m_animation_blend = 0.0f;
- bool m_animation_loop = true;
- bool m_animation_sent = false;
- bool m_animation_speed_sent = false;
-
- // Stores position and rotation for each bone name
- std::unordered_map<std::string, core::vector2d<v3f>> m_bone_position;
- bool m_bone_position_sent = false;
-
- int m_attachment_parent_id = 0;
- std::unordered_set<int> m_attachment_child_ids;
- std::string m_attachment_bone = "";
- v3f m_attachment_position;
- v3f m_attachment_rotation;
- bool m_attachment_sent = false;
-private:
- void onAttach(int parent_id);
- void onDetach(int parent_id);
-};
-
-/*
- LuaEntitySAO needs some internals exposed.
-*/
-
-class LuaEntitySAO : public UnitSAO
-{
-public:
- LuaEntitySAO(ServerEnvironment *env, v3f pos,
- const std::string &name, const std::string &state);
- ~LuaEntitySAO();
- ActiveObjectType getType() const
- { return ACTIVEOBJECT_TYPE_LUAENTITY; }
- ActiveObjectType getSendType() const
- { return ACTIVEOBJECT_TYPE_GENERIC; }
- virtual void addedToEnvironment(u32 dtime_s);
- static ServerActiveObject* create(ServerEnvironment *env, v3f pos,
- const std::string &data);
- void step(float dtime, bool send_recommended);
- std::string getClientInitializationData(u16 protocol_version);
- bool isStaticAllowed() const
- { return m_prop.static_save; }
- void getStaticData(std::string *result) const;
- u16 punch(v3f dir,
- const ToolCapabilities *toolcap = nullptr,
- ServerActiveObject *puncher = nullptr,
- float time_from_last_punch = 1000000.0f);
- void rightClick(ServerActiveObject *clicker);
- void setPos(const v3f &pos);
- void moveTo(v3f pos, bool continuous);
- float getMinimumSavedMovement();
- std::string getDescription();
- void setHP(s32 hp, const PlayerHPChangeReason &reason);
- u16 getHP() const;
-
- /* LuaEntitySAO-specific */
- void setVelocity(v3f velocity);
- void addVelocity(v3f velocity)
- {
- m_velocity += velocity;
- }
- v3f getVelocity();
- void setAcceleration(v3f acceleration);
- v3f getAcceleration();
-
- void setTextureMod(const std::string &mod);
- std::string getTextureMod() const;
- void setSprite(v2s16 p, int num_frames, float framelength,
- bool select_horiz_by_yawpitch);
- std::string getName();
- bool getCollisionBox(aabb3f *toset) const;
- bool getSelectionBox(aabb3f *toset) const;
- bool collideWithObjects() const;
-private:
- std::string getPropertyPacket();
- void sendPosition(bool do_interpolate, bool is_movement_end);
-
- std::string m_init_name;
- std::string m_init_state;
- bool m_registered = false;
-
- v3f m_velocity;
- v3f m_acceleration;
-
- v3f m_last_sent_position;
- v3f m_last_sent_velocity;
- v3f m_last_sent_rotation;
- float m_last_sent_position_timer = 0.0f;
- float m_last_sent_move_precision = 0.0f;
- std::string m_current_texture_modifier = "";
-};
/*
PlayerSAO needs some internals exposed.
@@ -179,33 +33,31 @@ class LagPool
{
float m_pool = 15.0f;
float m_max = 15.0f;
+
public:
LagPool() = default;
void setMax(float new_max)
{
m_max = new_max;
- if(m_pool > new_max)
+ if (m_pool > new_max)
m_pool = new_max;
}
void add(float dtime)
{
m_pool -= dtime;
- if(m_pool < 0)
+ if (m_pool < 0)
m_pool = 0;
}
- void empty()
- {
- m_pool = m_max;
- }
+ void empty() { m_pool = m_max; }
bool grab(float dtime)
{
- if(dtime <= 0)
+ if (dtime <= 0)
return true;
- if(m_pool + dtime > m_max)
+ if (m_pool + dtime > m_max)
return false;
m_pool += dtime;
return true;
@@ -220,10 +72,8 @@ public:
PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t peer_id_,
bool is_singleplayer);
- ActiveObjectType getType() const
- { return ACTIVEOBJECT_TYPE_PLAYER; }
- ActiveObjectType getSendType() const
- { return ACTIVEOBJECT_TYPE_GENERIC; }
+ ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_PLAYER; }
+ ActiveObjectType getSendType() const { return ACTIVEOBJECT_TYPE_GENERIC; }
std::string getDescription();
/*
@@ -258,10 +108,8 @@ public:
Interaction interface
*/
- u16 punch(v3f dir,
- const ToolCapabilities *toolcap,
- ServerActiveObject *puncher,
- float time_from_last_punch);
+ u16 punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher,
+ float time_from_last_punch);
void rightClick(ServerActiveObject *clicker) {}
void setHP(s32 hp, const PlayerHPChangeReason &reason);
void setHPRaw(u16 hp) { m_hp = hp; }
@@ -291,10 +139,7 @@ public:
// Cheat prevention
- v3f getLastGoodPosition() const
- {
- return m_last_good_position;
- }
+ v3f getLastGoodPosition() const { return m_last_good_position; }
float resetTimeFromLastPunch()
{
float r = m_time_from_last_punch;
@@ -306,30 +151,17 @@ public:
m_nocheat_dig_pos = p;
m_nocheat_dig_time = 0;
}
- v3s16 getNoCheatDigPos()
- {
- return m_nocheat_dig_pos;
- }
- float getNoCheatDigTime()
- {
- return m_nocheat_dig_time;
- }
- void noCheatDigEnd()
- {
- m_nocheat_dig_pos = v3s16(32767, 32767, 32767);
- }
- LagPool& getDigPool()
- {
- return m_dig_pool;
- }
+ v3s16 getNoCheatDigPos() { return m_nocheat_dig_pos; }
+ float getNoCheatDigTime() { return m_nocheat_dig_time; }
+ void noCheatDigEnd() { m_nocheat_dig_pos = v3s16(32767, 32767, 32767); }
+ LagPool &getDigPool() { return m_dig_pool; }
void setMaxSpeedOverride(const v3f &vel);
// Returns true if cheated
bool checkMovementCheat();
// Other
- void updatePrivileges(const std::set<std::string> &privs,
- bool is_singleplayer)
+ void updatePrivileges(const std::set<std::string> &privs, bool is_singleplayer)
{
m_privs = privs;
m_is_singleplayer = is_singleplayer;
@@ -350,6 +182,7 @@ public:
private:
std::string getPropertyPacket();
void unlinkPlayerSessionAndSave();
+ std::string generateUpdatePhysicsOverrideCommand() const;
RemotePlayer *m_player = nullptr;
session_t m_peer_id = 0;
@@ -382,6 +215,7 @@ private:
s16 m_wanted_range = 0.0f;
Metadata m_meta;
+
public:
float m_physics_override_speed = 1.0f;
float m_physics_override_jump = 1.0f;
@@ -392,9 +226,10 @@ public:
bool m_physics_override_sent = false;
};
-
-struct PlayerHPChangeReason {
- enum Type : u8 {
+struct PlayerHPChangeReason
+{
+ enum Type : u8
+ {
SET_HP,
PLAYER_PUNCH,
FALL,
@@ -412,10 +247,7 @@ struct PlayerHPChangeReason {
// For NODE_DAMAGE
std::string node;
- inline bool hasLuaReference() const
- {
- return lua_reference >= 0;
- }
+ inline bool hasLuaReference() const { return lua_reference >= 0; }
bool setTypeFromString(const std::string &typestr)
{
@@ -457,15 +289,12 @@ struct PlayerHPChangeReason {
}
}
- PlayerHPChangeReason(Type type):
- type(type)
- {}
+ PlayerHPChangeReason(Type type) : type(type) {}
- PlayerHPChangeReason(Type type, ServerActiveObject *object):
+ PlayerHPChangeReason(Type type, ServerActiveObject *object) :
type(type), object(object)
- {}
+ {
+ }
- PlayerHPChangeReason(Type type, std::string node):
- type(type), node(node)
- {}
+ PlayerHPChangeReason(Type type, std::string node) : type(type), node(node) {}
};
diff --git a/src/serverobject.cpp b/src/server/serveractiveobject.cpp
index 1ed33f66b..3341dc008 100644
--- a/src/serverobject.cpp
+++ b/src/server/serveractiveobject.cpp
@@ -17,7 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "serverobject.h"
+#include "serveractiveobject.h"
#include <fstream>
#include "inventory.h"
#include "constants.h" // BS
@@ -30,39 +30,6 @@ ServerActiveObject::ServerActiveObject(ServerEnvironment *env, v3f pos):
{
}
-ServerActiveObject* ServerActiveObject::create(ActiveObjectType type,
- ServerEnvironment *env, u16 id, v3f pos,
- const std::string &data)
-{
- // Find factory function
- std::map<u16, Factory>::iterator n;
- n = m_types.find(type);
- if(n == m_types.end()) {
- // These are 0.3 entity types, return without error.
- if (ACTIVEOBJECT_TYPE_ITEM <= type && type <= ACTIVEOBJECT_TYPE_MOBV2) {
- return NULL;
- }
-
- // If factory is not found, just return.
- warningstream<<"ServerActiveObject: No factory for type="
- <<type<<std::endl;
- return NULL;
- }
-
- Factory f = n->second;
- ServerActiveObject *object = (*f)(env, pos, data);
- return object;
-}
-
-void ServerActiveObject::registerType(u16 type, Factory f)
-{
- std::map<u16, Factory>::iterator n;
- n = m_types.find(type);
- if(n != m_types.end())
- return;
- m_types[type] = f;
-}
-
float ServerActiveObject::getMinimumSavedMovement()
{
return 2.0*BS;
@@ -81,3 +48,28 @@ bool ServerActiveObject::setWieldedItem(const ItemStack &item)
{
return false;
}
+
+std::string ServerActiveObject::generateUpdateInfantCommand(u16 infant_id, u16 protocol_version)
+{
+ std::ostringstream os(std::ios::binary);
+ // command
+ writeU8(os, AO_CMD_SPAWN_INFANT);
+ // parameters
+ writeU16(os, infant_id);
+ writeU8(os, getSendType());
+ if (protocol_version < 38) {
+ // Clients since 4aa9a66 so no longer need this data
+ // Version 38 is the first bump after that commit.
+ // See also: ClientEnvironment::addActiveObject
+ os << serializeLongString(getClientInitializationData(protocol_version));
+ }
+ return os.str();
+}
+
+void ServerActiveObject::dumpAOMessagesToQueue(std::queue<ActiveObjectMessage> &queue)
+{
+ while (!m_messages_out.empty()) {
+ queue.push(std::move(m_messages_out.front()));
+ m_messages_out.pop();
+ }
+}
diff --git a/src/serverobject.h b/src/server/serveractiveobject.h
index 48689fcb4..927009aef 100644
--- a/src/serverobject.h
+++ b/src/server/serveractiveobject.h
@@ -113,7 +113,7 @@ public:
The return value of this is passed to the client-side object
when it is created
*/
- virtual std::string getClientInitializationData(u16 protocol_version){return "";}
+ virtual std::string getClientInitializationData(u16 protocol_version) {return "";}
/*
The return value of this is passed to the server-side object
@@ -192,6 +192,10 @@ public:
m_attached_particle_spawners.erase(id);
}
+ std::string generateUpdateInfantCommand(u16 infant_id, u16 protocol_version);
+ std::string generateUpdateNametagAttributesCommand(const video::SColor &color) const;
+
+ void dumpAOMessagesToQueue(std::queue<ActiveObjectMessage> &queue);
/*
Number of players which know about this object. Object won't be
@@ -236,26 +240,16 @@ public:
*/
v3s16 m_static_block = v3s16(1337,1337,1337);
- /*
- Queue of messages to be sent to the client
- */
- std::queue<ActiveObjectMessage> m_messages_out;
-
protected:
virtual void onAttach(int parent_id) {}
virtual void onDetach(int parent_id) {}
- // Used for creating objects based on type
- typedef ServerActiveObject* (*Factory)
- (ServerEnvironment *env, v3f pos,
- const std::string &data);
- static void registerType(u16 type, Factory f);
-
ServerEnvironment *m_env;
v3f m_base_position;
std::unordered_set<u32> m_attached_particle_spawners;
-private:
- // Used for creating objects based on type
- static std::map<u16, Factory> m_types;
+ /*
+ Queue of messages to be sent to the client
+ */
+ std::queue<ActiveObjectMessage> m_messages_out;
};
diff --git a/src/server/serverinventorymgr.cpp b/src/server/serverinventorymgr.cpp
new file mode 100644
index 000000000..555e01ec6
--- /dev/null
+++ b/src/server/serverinventorymgr.cpp
@@ -0,0 +1,192 @@
+/*
+Minetest
+Copyright (C) 2010-2020 Minetest core development team
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "serverinventorymgr.h"
+#include "map.h"
+#include "nodemetadata.h"
+#include "player_sao.h"
+#include "remoteplayer.h"
+#include "server.h"
+#include "serverenvironment.h"
+
+ServerInventoryManager::ServerInventoryManager() : InventoryManager()
+{
+}
+
+ServerInventoryManager::~ServerInventoryManager()
+{
+ // Delete detached inventories
+ for (auto &detached_inventory : m_detached_inventories) {
+ delete detached_inventory.second.inventory;
+ }
+}
+
+Inventory *ServerInventoryManager::getInventory(const InventoryLocation &loc)
+{
+ switch (loc.type) {
+ case InventoryLocation::UNDEFINED:
+ case InventoryLocation::CURRENT_PLAYER:
+ break;
+ case InventoryLocation::PLAYER: {
+ RemotePlayer *player = m_env->getPlayer(loc.name.c_str());
+ if (!player)
+ return NULL;
+ PlayerSAO *playersao = player->getPlayerSAO();
+ if (!playersao)
+ return NULL;
+ return playersao->getInventory();
+ } break;
+ case InventoryLocation::NODEMETA: {
+ NodeMetadata *meta = m_env->getMap().getNodeMetadata(loc.p);
+ if (!meta)
+ return NULL;
+ return meta->getInventory();
+ } break;
+ case InventoryLocation::DETACHED: {
+ auto it = m_detached_inventories.find(loc.name);
+ if (it == m_detached_inventories.end())
+ return nullptr;
+ return it->second.inventory;
+ } break;
+ default:
+ sanity_check(false); // abort
+ break;
+ }
+ return NULL;
+}
+
+void ServerInventoryManager::setInventoryModified(const InventoryLocation &loc)
+{
+ switch (loc.type) {
+ case InventoryLocation::UNDEFINED:
+ break;
+ case InventoryLocation::PLAYER: {
+
+ RemotePlayer *player = m_env->getPlayer(loc.name.c_str());
+
+ if (!player)
+ return;
+
+ player->setModified(true);
+ player->inventory.setModified(true);
+ // Updates are sent in ServerEnvironment::step()
+ } break;
+ case InventoryLocation::NODEMETA: {
+ MapEditEvent event;
+ event.type = MEET_BLOCK_NODE_METADATA_CHANGED;
+ event.p = loc.p;
+ m_env->getMap().dispatchEvent(event);
+ } break;
+ case InventoryLocation::DETACHED: {
+ // Updates are sent in ServerEnvironment::step()
+ } break;
+ default:
+ sanity_check(false); // abort
+ break;
+ }
+}
+
+Inventory *ServerInventoryManager::createDetachedInventory(
+ const std::string &name, IItemDefManager *idef, const std::string &player)
+{
+ if (m_detached_inventories.count(name) > 0) {
+ infostream << "Server clearing detached inventory \"" << name << "\""
+ << std::endl;
+ delete m_detached_inventories[name].inventory;
+ } else {
+ infostream << "Server creating detached inventory \"" << name << "\""
+ << std::endl;
+ }
+
+ Inventory *inv = new Inventory(idef);
+ sanity_check(inv);
+ m_detached_inventories[name].inventory = inv;
+ if (!player.empty()) {
+ m_detached_inventories[name].owner = player;
+
+ if (!m_env)
+ return inv; // Mods are not loaded yet, ignore
+
+ RemotePlayer *p = m_env->getPlayer(name.c_str());
+
+ // if player is connected, send him the inventory
+ if (p && p->getPeerId() != PEER_ID_INEXISTENT) {
+ m_env->getGameDef()->sendDetachedInventory(
+ inv, name, p->getPeerId());
+ }
+ } else {
+ if (!m_env)
+ return inv; // Mods are not loaded yet, don't send
+
+ // Inventory is for everybody, broadcast
+ m_env->getGameDef()->sendDetachedInventory(inv, name, PEER_ID_INEXISTENT);
+ }
+
+ return inv;
+}
+
+bool ServerInventoryManager::removeDetachedInventory(const std::string &name)
+{
+ const auto &inv_it = m_detached_inventories.find(name);
+ if (inv_it == m_detached_inventories.end())
+ return false;
+
+ delete inv_it->second.inventory;
+ const std::string &owner = inv_it->second.owner;
+
+ if (!owner.empty()) {
+ RemotePlayer *player = m_env->getPlayer(owner.c_str());
+
+ if (player && player->getPeerId() != PEER_ID_INEXISTENT)
+ m_env->getGameDef()->sendDetachedInventory(
+ nullptr, name, player->getPeerId());
+
+ } else {
+ // Notify all players about the change
+ m_env->getGameDef()->sendDetachedInventory(
+ nullptr, name, PEER_ID_INEXISTENT);
+ }
+
+ m_detached_inventories.erase(inv_it);
+
+ return true;
+}
+
+void ServerInventoryManager::sendDetachedInventories(const std::string &peer_name,
+ bool incremental,
+ std::function<void(const std::string &, Inventory *)> apply_cb)
+{
+ for (const auto &detached_inventory : m_detached_inventories) {
+ const DetachedInventory &dinv = detached_inventory.second;
+ if (incremental) {
+ if (!dinv.inventory || !dinv.inventory->checkModified())
+ continue;
+ }
+
+ // if we are pushing inventories to a specific player
+ // we should filter to send only the right inventories
+ if (!peer_name.empty()) {
+ const std::string &attached_player = dinv.owner;
+ if (!attached_player.empty() && peer_name != attached_player)
+ continue;
+ }
+
+ apply_cb(detached_inventory.first, detached_inventory.second.inventory);
+ }
+}
diff --git a/src/server/serverinventorymgr.h b/src/server/serverinventorymgr.h
new file mode 100644
index 000000000..ccf6d3b2e
--- /dev/null
+++ b/src/server/serverinventorymgr.h
@@ -0,0 +1,60 @@
+/*
+Minetest
+Copyright (C) 2010-2020 Minetest core development team
+
+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 "inventorymanager.h"
+#include <functional>
+
+class ServerEnvironment;
+
+class ServerInventoryManager : public InventoryManager
+{
+public:
+ ServerInventoryManager();
+ virtual ~ServerInventoryManager();
+
+ void setEnv(ServerEnvironment *env)
+ {
+ assert(!m_env);
+ m_env = env;
+ }
+
+ Inventory *getInventory(const InventoryLocation &loc);
+ void setInventoryModified(const InventoryLocation &loc);
+
+ // Creates or resets inventory
+ Inventory *createDetachedInventory(const std::string &name, IItemDefManager *idef,
+ const std::string &player = "");
+ bool removeDetachedInventory(const std::string &name);
+
+ void sendDetachedInventories(const std::string &peer_name, bool incremental,
+ std::function<void(const std::string &, Inventory *)> apply_cb);
+
+private:
+ struct DetachedInventory
+ {
+ Inventory *inventory;
+ std::string owner;
+ };
+
+ ServerEnvironment *m_env = nullptr;
+
+ std::unordered_map<std::string, DetachedInventory> m_detached_inventories;
+};
diff --git a/src/server/unit_sao.cpp b/src/server/unit_sao.cpp
new file mode 100644
index 000000000..ef0e87f2c
--- /dev/null
+++ b/src/server/unit_sao.cpp
@@ -0,0 +1,345 @@
+/*
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2013-2020 Minetest core developers & community
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "unit_sao.h"
+#include "scripting_server.h"
+#include "serverenvironment.h"
+
+UnitSAO::UnitSAO(ServerEnvironment *env, v3f pos) : ServerActiveObject(env, pos)
+{
+ // Initialize something to armor groups
+ m_armor_groups["fleshy"] = 100;
+}
+
+ServerActiveObject *UnitSAO::getParent() const
+{
+ if (!m_attachment_parent_id)
+ return nullptr;
+ // Check if the parent still exists
+ ServerActiveObject *obj = m_env->getActiveObject(m_attachment_parent_id);
+
+ return obj;
+}
+
+void UnitSAO::setArmorGroups(const ItemGroupList &armor_groups)
+{
+ m_armor_groups = armor_groups;
+ m_armor_groups_sent = false;
+}
+
+const ItemGroupList &UnitSAO::getArmorGroups() const
+{
+ return m_armor_groups;
+}
+
+void UnitSAO::setAnimation(
+ v2f frame_range, float frame_speed, float frame_blend, bool frame_loop)
+{
+ // store these so they can be updated to clients
+ m_animation_range = frame_range;
+ m_animation_speed = frame_speed;
+ m_animation_blend = frame_blend;
+ m_animation_loop = frame_loop;
+ m_animation_sent = false;
+}
+
+void UnitSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend,
+ bool *frame_loop)
+{
+ *frame_range = m_animation_range;
+ *frame_speed = m_animation_speed;
+ *frame_blend = m_animation_blend;
+ *frame_loop = m_animation_loop;
+}
+
+void UnitSAO::setAnimationSpeed(float frame_speed)
+{
+ m_animation_speed = frame_speed;
+ m_animation_speed_sent = false;
+}
+
+void UnitSAO::setBonePosition(const std::string &bone, v3f position, v3f rotation)
+{
+ // store these so they can be updated to clients
+ m_bone_position[bone] = core::vector2d<v3f>(position, rotation);
+ m_bone_position_sent = false;
+}
+
+void UnitSAO::getBonePosition(const std::string &bone, v3f *position, v3f *rotation)
+{
+ *position = m_bone_position[bone].X;
+ *rotation = m_bone_position[bone].Y;
+}
+
+// clang-format off
+void UnitSAO::sendOutdatedData()
+{
+ if (!m_armor_groups_sent) {
+ m_armor_groups_sent = true;
+ m_messages_out.emplace(getId(), true, generateUpdateArmorGroupsCommand());
+ }
+
+ if (!m_animation_sent) {
+ m_animation_sent = true;
+ m_animation_speed_sent = true;
+ m_messages_out.emplace(getId(), true, generateUpdateAnimationCommand());
+ } else if (!m_animation_speed_sent) {
+ // Animation speed is also sent when 'm_animation_sent == false'
+ m_animation_speed_sent = true;
+ m_messages_out.emplace(getId(), true, generateUpdateAnimationSpeedCommand());
+ }
+
+ if (!m_bone_position_sent) {
+ m_bone_position_sent = true;
+ for (const auto &bone_pos : m_bone_position) {
+ m_messages_out.emplace(getId(), true, generateUpdateBonePositionCommand(
+ bone_pos.first, bone_pos.second.X, bone_pos.second.Y));
+ }
+ }
+
+ if (!m_attachment_sent) {
+ m_attachment_sent = true;
+ m_messages_out.emplace(getId(), true, generateUpdateAttachmentCommand());
+ }
+}
+// clang-format on
+
+void UnitSAO::setAttachment(
+ int parent_id, const std::string &bone, v3f position, v3f rotation)
+{
+ // Attachments need to be handled on both the server and client.
+ // If we just attach on the server, we can only copy the position of the parent.
+ // Attachments are still sent to clients at an interval so players might see them
+ // lagging, plus we can't read and attach to skeletal bones. If we just attach on
+ // the client, the server still sees the child at its original location. This
+ // breaks some things so we also give the server the most accurate representation
+ // even if players only see the client changes.
+
+ int old_parent = m_attachment_parent_id;
+ m_attachment_parent_id = parent_id;
+ m_attachment_bone = bone;
+ m_attachment_position = position;
+ m_attachment_rotation = rotation;
+ m_attachment_sent = false;
+
+ if (parent_id != old_parent) {
+ onDetach(old_parent);
+ onAttach(parent_id);
+ }
+}
+
+void UnitSAO::getAttachment(
+ int *parent_id, std::string *bone, v3f *position, v3f *rotation) const
+{
+ *parent_id = m_attachment_parent_id;
+ *bone = m_attachment_bone;
+ *position = m_attachment_position;
+ *rotation = m_attachment_rotation;
+}
+
+void UnitSAO::clearChildAttachments()
+{
+ for (int child_id : m_attachment_child_ids) {
+ // Child can be NULL if it was deleted earlier
+ if (ServerActiveObject *child = m_env->getActiveObject(child_id))
+ child->setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0));
+ }
+ m_attachment_child_ids.clear();
+}
+
+void UnitSAO::clearParentAttachment()
+{
+ ServerActiveObject *parent = nullptr;
+ if (m_attachment_parent_id) {
+ parent = m_env->getActiveObject(m_attachment_parent_id);
+ setAttachment(0, "", m_attachment_position, m_attachment_rotation);
+ } else {
+ setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0));
+ }
+ // Do it
+ if (parent)
+ parent->removeAttachmentChild(m_id);
+}
+
+void UnitSAO::addAttachmentChild(int child_id)
+{
+ m_attachment_child_ids.insert(child_id);
+}
+
+void UnitSAO::removeAttachmentChild(int child_id)
+{
+ m_attachment_child_ids.erase(child_id);
+}
+
+const std::unordered_set<int> &UnitSAO::getAttachmentChildIds() const
+{
+ return m_attachment_child_ids;
+}
+
+void UnitSAO::onAttach(int parent_id)
+{
+ if (!parent_id)
+ return;
+
+ ServerActiveObject *parent = m_env->getActiveObject(parent_id);
+
+ if (!parent || parent->isGone())
+ return; // Do not try to notify soon gone parent
+
+ if (parent->getType() == ACTIVEOBJECT_TYPE_LUAENTITY) {
+ // Call parent's on_attach field
+ m_env->getScriptIface()->luaentity_on_attach_child(parent_id, this);
+ }
+}
+
+void UnitSAO::onDetach(int parent_id)
+{
+ if (!parent_id)
+ return;
+
+ ServerActiveObject *parent = m_env->getActiveObject(parent_id);
+ if (getType() == ACTIVEOBJECT_TYPE_LUAENTITY)
+ m_env->getScriptIface()->luaentity_on_detach(m_id, parent);
+
+ if (!parent || parent->isGone())
+ return; // Do not try to notify soon gone parent
+
+ if (parent->getType() == ACTIVEOBJECT_TYPE_LUAENTITY)
+ m_env->getScriptIface()->luaentity_on_detach_child(parent_id, this);
+}
+
+ObjectProperties *UnitSAO::accessObjectProperties()
+{
+ return &m_prop;
+}
+
+void UnitSAO::notifyObjectPropertiesModified()
+{
+ m_properties_sent = false;
+}
+
+std::string UnitSAO::generateUpdateAttachmentCommand() const
+{
+ std::ostringstream os(std::ios::binary);
+ // command
+ writeU8(os, AO_CMD_ATTACH_TO);
+ // parameters
+ writeS16(os, m_attachment_parent_id);
+ os << serializeString(m_attachment_bone);
+ writeV3F32(os, m_attachment_position);
+ writeV3F32(os, m_attachment_rotation);
+ return os.str();
+}
+
+std::string UnitSAO::generateUpdateBonePositionCommand(
+ const std::string &bone, const v3f &position, const v3f &rotation)
+{
+ std::ostringstream os(std::ios::binary);
+ // command
+ writeU8(os, AO_CMD_SET_BONE_POSITION);
+ // parameters
+ os << serializeString(bone);
+ writeV3F32(os, position);
+ writeV3F32(os, rotation);
+ return os.str();
+}
+
+std::string UnitSAO::generateUpdateAnimationSpeedCommand() const
+{
+ std::ostringstream os(std::ios::binary);
+ // command
+ writeU8(os, AO_CMD_SET_ANIMATION_SPEED);
+ // parameters
+ writeF32(os, m_animation_speed);
+ return os.str();
+}
+
+std::string UnitSAO::generateUpdateAnimationCommand() const
+{
+ std::ostringstream os(std::ios::binary);
+ // command
+ writeU8(os, AO_CMD_SET_ANIMATION);
+ // parameters
+ writeV2F32(os, m_animation_range);
+ writeF32(os, m_animation_speed);
+ writeF32(os, m_animation_blend);
+ // these are sent inverted so we get true when the server sends nothing
+ writeU8(os, !m_animation_loop);
+ return os.str();
+}
+
+std::string UnitSAO::generateUpdateArmorGroupsCommand() const
+{
+ std::ostringstream os(std::ios::binary);
+ writeU8(os, AO_CMD_UPDATE_ARMOR_GROUPS);
+ writeU16(os, m_armor_groups.size());
+ for (const auto &armor_group : m_armor_groups) {
+ os << serializeString(armor_group.first);
+ writeS16(os, armor_group.second);
+ }
+ return os.str();
+}
+
+std::string UnitSAO::generateUpdatePositionCommand(const v3f &position,
+ const v3f &velocity, const v3f &acceleration, const v3f &rotation,
+ bool do_interpolate, bool is_movement_end, f32 update_interval)
+{
+ std::ostringstream os(std::ios::binary);
+ // command
+ writeU8(os, AO_CMD_UPDATE_POSITION);
+ // pos
+ writeV3F32(os, position);
+ // velocity
+ writeV3F32(os, velocity);
+ // acceleration
+ writeV3F32(os, acceleration);
+ // rotation
+ writeV3F32(os, rotation);
+ // do_interpolate
+ writeU8(os, do_interpolate);
+ // is_end_position (for interpolation)
+ writeU8(os, is_movement_end);
+ // update_interval (for interpolation)
+ writeF32(os, update_interval);
+ return os.str();
+}
+
+std::string UnitSAO::generateSetPropertiesCommand(const ObjectProperties &prop) const
+{
+ std::ostringstream os(std::ios::binary);
+ writeU8(os, AO_CMD_SET_PROPERTIES);
+ prop.serialize(os);
+ return os.str();
+}
+
+std::string UnitSAO::generatePunchCommand(u16 result_hp) const
+{
+ std::ostringstream os(std::ios::binary);
+ // command
+ writeU8(os, AO_CMD_PUNCHED);
+ // result_hp
+ writeU16(os, result_hp);
+ return os.str();
+}
+
+void UnitSAO::sendPunchCommand()
+{
+ m_messages_out.emplace(getId(), true, generatePunchCommand(getHP()));
+}
diff --git a/src/server/unit_sao.h b/src/server/unit_sao.h
new file mode 100644
index 000000000..3cb7f0ad5
--- /dev/null
+++ b/src/server/unit_sao.h
@@ -0,0 +1,136 @@
+/*
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2013-2020 Minetest core developers & community
+
+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 "object_properties.h"
+#include "serveractiveobject.h"
+
+class UnitSAO : public ServerActiveObject
+{
+public:
+ UnitSAO(ServerEnvironment *env, v3f pos);
+ virtual ~UnitSAO() = default;
+
+ u16 getHP() const { return m_hp; }
+ // Use a function, if isDead can be defined by other conditions
+ bool isDead() const { return m_hp == 0; }
+
+ // Rotation
+ void setRotation(v3f rotation) { m_rotation = rotation; }
+ const v3f &getRotation() const { return m_rotation; }
+ v3f getRadRotation() { return m_rotation * core::DEGTORAD; }
+
+ // Deprecated
+ f32 getRadYawDep() const { return (m_rotation.Y + 90.) * core::DEGTORAD; }
+
+ // Armor groups
+ inline bool isImmortal() const
+ {
+ return itemgroup_get(getArmorGroups(), "immortal");
+ }
+ void setArmorGroups(const ItemGroupList &armor_groups);
+ const ItemGroupList &getArmorGroups() const;
+
+ // Animation
+ void setAnimation(v2f frame_range, float frame_speed, float frame_blend,
+ bool frame_loop);
+ void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend,
+ bool *frame_loop);
+ void setAnimationSpeed(float frame_speed);
+
+ // Bone position
+ void setBonePosition(const std::string &bone, v3f position, v3f rotation);
+ void getBonePosition(const std::string &bone, v3f *position, v3f *rotation);
+
+ // Attachments
+ ServerActiveObject *getParent() const;
+ inline bool isAttached() const { return getParent(); }
+ void setAttachment(int parent_id, const std::string &bone, v3f position,
+ v3f rotation);
+ void getAttachment(int *parent_id, std::string *bone, v3f *position,
+ v3f *rotation) const;
+ void clearChildAttachments();
+ void clearParentAttachment();
+ void addAttachmentChild(int child_id);
+ void removeAttachmentChild(int child_id);
+ const std::unordered_set<int> &getAttachmentChildIds() const;
+
+ // Object properties
+ ObjectProperties *accessObjectProperties();
+ void notifyObjectPropertiesModified();
+ void sendOutdatedData();
+
+ // Update packets
+ std::string generateUpdateAttachmentCommand() const;
+ std::string generateUpdateAnimationSpeedCommand() const;
+ std::string generateUpdateAnimationCommand() const;
+ std::string generateUpdateArmorGroupsCommand() const;
+ static std::string generateUpdatePositionCommand(const v3f &position,
+ const v3f &velocity, const v3f &acceleration, const v3f &rotation,
+ bool do_interpolate, bool is_movement_end, f32 update_interval);
+ std::string generateSetPropertiesCommand(const ObjectProperties &prop) const;
+ static std::string generateUpdateBonePositionCommand(const std::string &bone,
+ const v3f &position, const v3f &rotation);
+ void sendPunchCommand();
+
+protected:
+ u16 m_hp = 1;
+
+ v3f m_rotation;
+
+ ItemGroupList m_armor_groups;
+
+ // Object properties
+ bool m_properties_sent = true;
+ ObjectProperties m_prop;
+
+ // Stores position and rotation for each bone name
+ std::unordered_map<std::string, core::vector2d<v3f>> m_bone_position;
+
+ int m_attachment_parent_id = 0;
+
+private:
+ void onAttach(int parent_id);
+ void onDetach(int parent_id);
+
+ std::string generatePunchCommand(u16 result_hp) const;
+
+ // Armor groups
+ bool m_armor_groups_sent = false;
+
+ // Animation
+ v2f m_animation_range;
+ float m_animation_speed = 0.0f;
+ float m_animation_blend = 0.0f;
+ bool m_animation_loop = true;
+ bool m_animation_sent = false;
+ bool m_animation_speed_sent = false;
+
+ // Bone positions
+ bool m_bone_position_sent = false;
+
+ // Attachments
+ std::unordered_set<int> m_attachment_child_ids;
+ std::string m_attachment_bone = "";
+ v3f m_attachment_position;
+ v3f m_attachment_rotation;
+ bool m_attachment_sent = false;
+};
diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp
index 333d32ff5..ad2ffc9a4 100644
--- a/src/serverenvironment.cpp
+++ b/src/serverenvironment.cpp
@@ -17,8 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include <algorithm>
#include "serverenvironment.h"
-#include "content_sao.h"
#include "settings.h"
#include "log.h"
#include "mapblock.h"
@@ -44,7 +44,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#if USE_POSTGRESQL
#include "database/database-postgresql.h"
#endif
-#include <algorithm>
+#if USE_LEVELDB
+#include "database/database-leveldb.h"
+#endif
+#include "server/luaentity_sao.h"
+#include "server/player_sao.h"
#define LBM_NAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyz0123456789_:"
@@ -545,24 +549,6 @@ bool ServerEnvironment::removePlayerFromDatabase(const std::string &name)
return m_player_database->removePlayer(name);
}
-bool ServerEnvironment::line_of_sight(v3f pos1, v3f pos2, v3s16 *p)
-{
- // Iterate trough nodes on the line
- voxalgo::VoxelLineIterator iterator(pos1 / BS, (pos2 - pos1) / BS);
- do {
- MapNode n = getMap().getNode(iterator.m_current_node_pos);
-
- // Return non-air
- if (n.param0 != CONTENT_AIR) {
- if (p)
- *p = iterator.m_current_node_pos;
- return false;
- }
- iterator.next();
- } while (iterator.m_current_index <= iterator.m_last_index);
- return true;
-}
-
void ServerEnvironment::kickAllPlayers(AccessDeniedCode reason,
const std::string &str_reason, bool reconnect)
{
@@ -638,6 +624,9 @@ PlayerSAO *ServerEnvironment::loadPlayer(RemotePlayer *player, bool *new_player,
void ServerEnvironment::saveMeta()
{
+ if (!m_meta_loaded)
+ return;
+
std::string path = m_path_world + DIR_DELIM "env_meta.txt";
// Open file and serialize
@@ -664,6 +653,9 @@ void ServerEnvironment::saveMeta()
void ServerEnvironment::loadMeta()
{
+ SANITY_CHECK(!m_meta_loaded);
+ m_meta_loaded = true;
+
// If file doesn't exist, load default environment metadata
if (!fs::PathExists(m_path_world + DIR_DELIM "env_meta.txt")) {
infostream << "ServerEnvironment: Loading default environment metadata"
@@ -1420,10 +1412,7 @@ void ServerEnvironment::step(float dtime)
// Step object
obj->step(dtime, send_recommended);
// Read messages from object
- while (!obj->m_messages_out.empty()) {
- this->m_active_object_messages.push(obj->m_messages_out.front());
- obj->m_messages_out.pop();
- }
+ obj->dumpAOMessagesToQueue(m_active_object_messages);
};
m_ao_manager.step(dtime, cb_state);
}
@@ -1609,28 +1598,28 @@ void ServerEnvironment::setStaticForActiveObjectsInBlock(
}
}
-ActiveObjectMessage ServerEnvironment::getActiveObjectMessage()
+bool ServerEnvironment::getActiveObjectMessage(ActiveObjectMessage *dest)
{
if(m_active_object_messages.empty())
- return ActiveObjectMessage(0);
+ return false;
- ActiveObjectMessage message = m_active_object_messages.front();
+ *dest = std::move(m_active_object_messages.front());
m_active_object_messages.pop();
- return message;
+ return true;
}
void ServerEnvironment::getSelectedActiveObjects(
const core::line3d<f32> &shootline_on_map,
std::vector<PointedThing> &objects)
{
- std::vector<u16> objectIds;
- getObjectsInsideRadius(objectIds, shootline_on_map.start,
- shootline_on_map.getLength() + 10.0f);
+ std::vector<ServerActiveObject *> objs;
+ getObjectsInsideRadius(objs, shootline_on_map.start,
+ shootline_on_map.getLength() + 10.0f, nullptr);
const v3f line_vector = shootline_on_map.getVector();
- for (u16 objectId : objectIds) {
- ServerActiveObject* obj = getActiveObject(objectId);
-
+ for (auto obj : objs) {
+ if (obj->isGone())
+ continue;
aabb3f selection_box;
if (!obj->getSelectionBox(&selection_box))
continue;
@@ -1645,7 +1634,7 @@ void ServerEnvironment::getSelectedActiveObjects(
if (boxLineCollision(offsetted_box, shootline_on_map.start, line_vector,
&current_intersection, &current_normal)) {
objects.emplace_back(
- (s16) objectId, current_intersection, current_normal,
+ (s16) obj->getId(), current_intersection, current_normal,
(current_intersection - shootline_on_map.start).getLengthSQ());
}
}
@@ -1799,6 +1788,18 @@ static void print_hexdump(std::ostream &o, const std::string &data)
}
}
+ServerActiveObject* ServerEnvironment::createSAO(ActiveObjectType type, v3f pos,
+ const std::string &data)
+{
+ switch (type) {
+ case ACTIVEOBJECT_TYPE_LUAENTITY:
+ return new LuaEntitySAO(this, pos, data);
+ default:
+ warningstream << "ServerActiveObject: No factory for type=" << type << std::endl;
+ }
+ return nullptr;
+}
+
/*
Convert stored objects from blocks near the players to active.
*/
@@ -1832,10 +1833,10 @@ void ServerEnvironment::activateObjects(MapBlock *block, u32 dtime_s)
std::vector<StaticObject> new_stored;
for (const StaticObject &s_obj : block->m_static_objects.m_stored) {
// Create an active object from the data
- ServerActiveObject *obj = ServerActiveObject::create
- ((ActiveObjectType) s_obj.type, this, 0, s_obj.pos, s_obj.data);
+ ServerActiveObject *obj = createSAO((ActiveObjectType) s_obj.type, s_obj.pos,
+ s_obj.data);
// If couldn't create object, store static data back.
- if(obj == NULL) {
+ if (!obj) {
errorstream<<"ServerEnvironment::activateObjects(): "
<<"failed to create active object from static object "
<<"in block "<<PP(s_obj.pos/BS)
@@ -2083,6 +2084,7 @@ PlayerDatabase *ServerEnvironment::openPlayerDatabase(const std::string &name,
if (name == "dummy")
return new Database_Dummy();
+
#if USE_POSTGRESQL
if (name == "postgresql") {
std::string connect_string;
@@ -2090,6 +2092,12 @@ PlayerDatabase *ServerEnvironment::openPlayerDatabase(const std::string &name,
return new PlayerDatabasePostgreSQL(connect_string);
}
#endif
+
+#if USE_LEVELDB
+ if (name == "leveldb")
+ return new PlayerDatabaseLevelDB(savedir);
+#endif
+
if (name == "files")
return new PlayerDatabaseFiles(savedir + DIR_DELIM + "players");
@@ -2110,7 +2118,7 @@ bool ServerEnvironment::migratePlayersDatabase(const GameParams &game_params,
if (!world_mt.exists("player_backend")) {
errorstream << "Please specify your current backend in world.mt:"
<< std::endl
- << " player_backend = {files|sqlite3|postgresql}"
+ << " player_backend = {files|sqlite3|leveldb|postgresql}"
<< std::endl;
return false;
}
@@ -2189,9 +2197,22 @@ AuthDatabase *ServerEnvironment::openAuthDatabase(
if (name == "sqlite3")
return new AuthDatabaseSQLite3(savedir);
+#if USE_POSTGRESQL
+ if (name == "postgresql") {
+ std::string connect_string;
+ conf.getNoEx("pgsql_auth_connection", connect_string);
+ return new AuthDatabasePostgreSQL(connect_string);
+ }
+#endif
+
if (name == "files")
return new AuthDatabaseFiles(savedir);
+#if USE_LEVELDB
+ if (name == "leveldb")
+ return new AuthDatabaseLevelDB(savedir);
+#endif
+
throw BaseException(std::string("Database backend ") + name + " not supported.");
}
diff --git a/src/serverenvironment.h b/src/serverenvironment.h
index 3c7b7d059..af742e290 100644
--- a/src/serverenvironment.h
+++ b/src/serverenvironment.h
@@ -289,9 +289,9 @@ public:
/*
Get the next message emitted by some active object.
- Returns a message with id=0 if no messages are available.
+ Returns false if no messages are available, true otherwise.
*/
- ActiveObjectMessage getActiveObjectMessage();
+ bool getActiveObjectMessage(ActiveObjectMessage *dest);
virtual void getSelectedActiveObjects(
const core::line3d<f32> &shootline_on_map,
@@ -323,9 +323,10 @@ public:
bool swapNode(v3s16 p, const MapNode &n);
// Find all active objects inside a radius around a point
- void getObjectsInsideRadius(std::vector<u16> &objects, const v3f &pos, float radius)
+ void getObjectsInsideRadius(std::vector<ServerActiveObject *> &objects, const v3f &pos, float radius,
+ std::function<bool(ServerActiveObject *obj)> include_obj_cb)
{
- return m_ao_manager.getObjectsInsideRadius(pos, radius, objects);
+ return m_ao_manager.getObjectsInsideRadius(pos, radius, objects, include_obj_cb);
}
// Clear objects, loading and going through every MapBlock
@@ -334,16 +335,6 @@ public:
// This makes stuff happen
void step(f32 dtime);
- /*!
- * Returns false if the given line intersects with a
- * non-air node, true otherwise.
- * \param pos1 start of the line
- * \param pos2 end of the line
- * \param p output, position of the first non-air node
- * the line intersects
- */
- bool line_of_sight(v3f pos1, v3f pos2, v3s16 *p = NULL);
-
u32 getGameTime() const { return m_game_time; }
void reportMaxLagEstimate(float f) { m_max_lag_estimate = f; }
@@ -448,6 +439,8 @@ private:
IntervalLimiter m_active_blocks_management_interval;
IntervalLimiter m_active_block_modifier_interval;
IntervalLimiter m_active_blocks_nodemetadata_interval;
+ // Whether the variables below have been read from file yet
+ bool m_meta_loaded = false;
// Time from the beginning of the game in seconds.
// Incremented in step().
u32 m_game_time = 0;
@@ -478,4 +471,6 @@ private:
IntervalLimiter m_particle_management_interval;
std::unordered_map<u32, float> m_particle_spawners;
std::unordered_map<u32, u16> m_particle_spawner_attachments;
+
+ ServerActiveObject* createSAO(ActiveObjectType type, v3f pos, const std::string &data);
};
diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp
index 0e38e5c73..febfbb9d3 100644
--- a/src/settings_translation_file.cpp
+++ b/src/settings_translation_file.cpp
@@ -254,8 +254,6 @@ fake_function() {
gettext("Enables parallax occlusion mapping.\nRequires shaders to be enabled.");
gettext("Parallax occlusion mode");
gettext("0 = parallax occlusion with slope information (faster).\n1 = relief mapping (slower, more accurate).");
- gettext("Parallax occlusion strength");
- gettext("Strength of parallax.");
gettext("Parallax occlusion iterations");
gettext("Number of parallax occlusion iterations.");
gettext("Parallax occlusion scale");
@@ -286,8 +284,8 @@ fake_function() {
gettext("Open the pause menu when the window's focus is lost. Does not pause if a formspec is\nopen.");
gettext("Viewing range");
gettext("View distance in nodes.");
- gettext("Near clipping plane");
- gettext("Camera 'near clipping plane' distance in nodes, between 0 and 0.5.\nMost users will not need to change this.\nIncreasing can reduce artifacting on weaker GPUs.\n0.1 = Default, 0.25 = Good value for weaker tablets.");
+ gettext("Near plane");
+ gettext("Camera 'near clipping plane' distance in nodes, between 0 and 0.25\nOnly works on GLES platforms. Most users will not need to change this.\nIncreasing can reduce artifacting on weaker GPUs.\n0.1 = Default, 0.25 = Good value for weaker tablets.");
gettext("Screen width");
gettext("Width component of the initial window size.");
gettext("Screen height");
@@ -326,6 +324,8 @@ fake_function() {
gettext("Multiplier for fall bobbing.\nFor example: 0 for no view bobbing; 1.0 for normal; 2.0 for double.");
gettext("3D mode");
gettext("3D support.\nCurrently supported:\n- none: no 3d output.\n- anaglyph: cyan/magenta color 3d.\n- interlaced: odd/even line based polarisation screen support.\n- topbottom: split screen top/bottom.\n- sidebyside: split screen side by side.\n- crossview: Cross-eyed 3d\n- pageflip: quadbuffer based 3d.\nNote that the interlaced mode requires shaders to be enabled.");
+ gettext("3D mode parallax strength");
+ gettext("Strength of 3D mode parallax.");
gettext("Console height");
gettext("In-game chat console height, between 0.1 (10%) and 1.0 (100%).");
gettext("Console color");
@@ -427,8 +427,10 @@ fake_function() {
gettext("Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255.");
gettext("Fallback font path");
gettext("Path of the fallback font.\nIf “freetype†setting is enabled: Must be a TrueType font.\nIf “freetype†setting is disabled: Must be a bitmap or XML vectors font.\nThis font will be used for certain languages or if the default font is unavailable.");
+ gettext("Chat font size");
+ gettext("Font size of the recent chat text and chat prompt in point (pt).\nValue 0 will use the default font size.");
gettext("Screenshot folder");
- gettext("Path to save screenshots at.");
+ gettext("Path to save screenshots at. Can be an absolute or relative path.\nThe folder will be created if it doesn't already exist.");
gettext("Screenshot format");
gettext("Format of screenshots.");
gettext("Screenshot quality");
@@ -451,6 +453,8 @@ fake_function() {
gettext("Address to connect to.\nLeave this blank to start a local server.\nNote that the address field in the main menu overrides this setting.");
gettext("Remote port");
gettext("Port to connect to (UDP).\nNote that the port field in the main menu overrides this setting.");
+ gettext("Prometheus listener address");
+ gettext("Prometheus listener address.\nIf minetest is compiled with ENABLE_PROMETHEUS option enabled,\nenable metrics listener for Prometheus on that address.\nMetrics can be fetch on http://127.0.0.1:30000/metrics");
gettext("Saving map received from server");
gettext("Save the map received by the client on disk.");
gettext("Connect to external media server");
@@ -516,6 +520,8 @@ fake_function() {
gettext("World directory (everything in the world is stored here).\nNot needed if starting from the main menu.");
gettext("Item entity TTL");
gettext("Time in seconds for item entity (dropped items) to live.\nSetting it to -1 disables the feature.");
+ gettext("Default stack size");
+ gettext("Specifies the default stack size of nodes, items and tools.\nNote that mods or games may explicitly set a stack for certain (or all) items.");
gettext("Damage");
gettext("Enable players getting damage and dying.");
gettext("Creative");
@@ -555,7 +561,7 @@ fake_function() {
gettext("Active object send range");
gettext("From how far clients know about objects, stated in mapblocks (16 nodes).\n\nSetting this larger than active_block_range will also cause the server\nto maintain active objects up to this distance in the direction the\nplayer is looking. (This can avoid mobs suddenly disappearing from view)");
gettext("Active block range");
- gettext("The radius of the volume of blocks around every player that is subject to the\nactive block stuff, stated in mapblocks (16 nodes).\nIn active blocks objects are loaded and ABMs run.\nThis is also the minimum range in which active objects (mobs) are maintained.\nThis should be configured together with active_object_range.");
+ gettext("The radius of the volume of blocks around every player that is subject to the\nactive block stuff, stated in mapblocks (16 nodes).\nIn active blocks objects are loaded and ABMs run.\nThis is also the minimum range in which active objects (mobs) are maintained.\nThis should be configured together with active_object_send_range_blocks.");
gettext("Max block send distance");
gettext("From how far blocks are sent to clients, stated in mapblocks (16 nodes).");
gettext("Maximum forceloaded blocks");
@@ -674,6 +680,8 @@ fake_function() {
gettext("Level of logging to be written to debug.txt:\n- <nothing> (no logging)\n- none (messages with no level)\n- error\n- warning\n- action\n- info\n- verbose");
gettext("Debug log file size threshold");
gettext("If the file size of debug.txt exceeds the number of megabytes specified in\nthis setting when it is opened, the file is moved to debug.txt.1,\ndeleting an older debug.txt.1 if it exists.\ndebug.txt is only moved if this setting is positive.");
+ gettext("Chat log level");
+ gettext("Minimal level of logging to be written to chat.");
gettext("IPv6");
gettext("Enable IPv6 support (for both client and server).\nRequired for IPv6 connections to work at all.");
gettext("Advanced");
@@ -791,9 +799,21 @@ fake_function() {
gettext("Defines areas where trees have apples.");
gettext("Mapgen V7");
gettext("Mapgen V7 specific flags");
- gettext("Map generation attributes specific to Mapgen v7.\n'ridges' enables the rivers.");
+ gettext("Map generation attributes specific to Mapgen v7.\n'ridges': Rivers.\n'floatlands': Floating land masses in the atmosphere.\n'caverns': Giant caves deep underground.");
gettext("Mountain zero level");
gettext("Y of mountain density gradient zero level. Used to shift mountains vertically.");
+ gettext("Floatland minimum Y");
+ gettext("Lower Y limit of floatlands.");
+ gettext("Floatland maximum Y");
+ gettext("Upper Y limit of floatlands.");
+ gettext("Floatland tapering distance");
+ gettext("Y-distance over which floatlands taper from full density to nothing.\nTapering starts at this distance from the Y limit.\nFor a solid floatland layer, this controls the height of hills/mountains.\nMust be less than or equal to half the distance between the Y limits.");
+ gettext("Floatland taper exponent");
+ gettext("Exponent of the floatland tapering. Alters the tapering behaviour.\nValue = 1.0 creates a uniform, linear tapering.\nValues > 1.0 create a smooth tapering suitable for the default separated\nfloatlands.\nValues < 1.0 (for example 0.25) create a more defined surface level with\nflatter lowlands, suitable for a solid floatland layer.");
+ gettext("Floatland density");
+ gettext("Adjusts the density of the floatland layer.\nIncrease value to increase density. Can be positive or negative.\nValue = 0.0: 50% of volume is floatland.\nValue = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\nto be sure) creates a solid floatland layer.");
+ gettext("Floatland water level");
+ gettext("Surface level of optional water placed on a solid floatland layer.\nWater is disabled by default and will only be placed if this value is set\nto above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\nupper tapering).\n***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\nWhen enabling water placement the floatlands must be configured and tested\nto be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\nrequired value depending on 'mgv7_np_floatland'), to avoid\nserver-intensive extreme water flow and to avoid vast flooding of the\nworld surface below.");
gettext("Cave width");
gettext("Controls width of tunnels, a smaller value creates wider tunnels.\nValue >= 10.0 completely disables generation of tunnels and avoids the\nintensive noise calculations.");
gettext("Large cave depth");
@@ -837,6 +857,8 @@ fake_function() {
gettext("3D noise defining mountain structure and height.\nAlso defines structure of floatland mountain terrain.");
gettext("Ridge noise");
gettext("3D noise defining structure of river canyon walls.");
+ gettext("Floatland noise");
+ gettext("3D noise defining structure of floatlands.\nIf altered from the default, the noise 'scale' (0.7 by default) may need\nto be adjusted, as floatland tapering functions best when this noise has\na value range of approximately -2.0 to 2.0.");
gettext("Cavern noise");
gettext("3D noise defining giant caverns.");
gettext("Cave1 noise");
@@ -1068,14 +1090,14 @@ fake_function() {
gettext("Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\nWARNING!: There is no benefit, and there are several dangers, in\nincreasing this value above 5.\nReducing this value increases cave and dungeon density.\nAltering this value is for special usage, leaving it unchanged is\nrecommended.");
gettext("Mapgen debug");
gettext("Dump the mapgen debug information.");
- gettext("Absolute limit of emerge queues");
+ gettext("Absolute limit of queued blocks to emerge");
gettext("Maximum number of blocks that can be queued for loading.");
- gettext("Limit of emerge queues on disk");
- gettext("Maximum number of blocks to be queued that are to be loaded from file.\nSet to blank for an appropriate amount to be chosen automatically.");
- gettext("Limit of emerge queues to generate");
- gettext("Maximum number of blocks to be queued that are to be generated.\nSet to blank for an appropriate amount to be chosen automatically.");
+ gettext("Per-player limit of queued blocks load from disk");
+ gettext("Maximum number of blocks to be queued that are to be loaded from file.\nThis limit is enforced per player.");
+ gettext("Per-player limit of queued blocks to generate");
+ gettext("Maximum number of blocks to be queued that are to be generated.\nThis limit is enforced per player.");
gettext("Number of emerge threads");
- gettext("Number of emerge threads to use.\nWARNING: Currently there are multiple bugs that may cause crashes when\n'num_emerge_threads' is larger than 1. Until this warning is removed it is\nstrongly recommended this value is set to the default '1'.\nValue 0:\n- Automatic selection. The number of emerge threads will be\n- 'number of processors - 2', with a lower limit of 1.\nAny other value:\n- Specifies the number of emerge threads, with a lower limit of 1.\nWARNING: Increasing the number of emerge threads increases engine mapgen\nspeed, but this may harm game performance by interfering with other\nprocesses, especially in singleplayer and/or when running Lua code in\n'on_generated'. For many users the optimum setting may be '1'.");
+ gettext("Number of emerge threads to use.\nValue 0:\n- Automatic selection. The number of emerge threads will be\n- 'number of processors - 2', with a lower limit of 1.\nAny other value:\n- Specifies the number of emerge threads, with a lower limit of 1.\nWARNING: Increasing the number of emerge threads increases engine mapgen\nspeed, but this may harm game performance by interfering with other\nprocesses, especially in singleplayer and/or when running Lua code in\n'on_generated'. For many users the optimum setting may be '1'.");
gettext("Online Content Repository");
gettext("ContentDB URL");
gettext("The URL for the content repository");
diff --git a/src/skyparams.h b/src/skyparams.h
index 9fdfd89da..1de494d69 100644
--- a/src/skyparams.h
+++ b/src/skyparams.h
@@ -37,9 +37,9 @@ struct SkyboxParams
std::vector<std::string> textures;
bool clouds;
SkyColor sky_color;
- video::SColor sun_tint;
- video::SColor moon_tint;
- std::string tint_type;
+ video::SColor fog_sun_tint;
+ video::SColor fog_moon_tint;
+ std::string fog_tint_type;
};
struct SunParams
@@ -76,12 +76,12 @@ public:
{
SkyColor sky;
// Horizon colors
- sky.day_horizon = video::SColor(255, 155, 193, 240);
+ sky.day_horizon = video::SColor(255, 144, 211, 246);
sky.indoors = video::SColor(255, 100, 100, 100);
sky.dawn_horizon = video::SColor(255, 186, 193, 240);
sky.night_horizon = video::SColor(255, 64, 144, 255);
// Sky colors
- sky.day_sky = video::SColor(255, 140, 186, 250);
+ sky.day_sky = video::SColor(255, 97, 181, 245);
sky.dawn_sky = video::SColor(255, 180, 186, 250);
sky.night_sky = video::SColor(255, 0, 107, 255);
return sky;
diff --git a/src/staticobject.cpp b/src/staticobject.cpp
index bebca12ec..5ccb7baf5 100644
--- a/src/staticobject.cpp
+++ b/src/staticobject.cpp
@@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "staticobject.h"
#include "util/serialize.h"
-#include "content_sao.h"
+#include "server/serveractiveobject.h"
StaticObject::StaticObject(const ServerActiveObject *s_obj, const v3f &pos_):
type(s_obj->getType()),
diff --git a/src/texture_override.cpp b/src/texture_override.cpp
new file mode 100644
index 000000000..10d129b87
--- /dev/null
+++ b/src/texture_override.cpp
@@ -0,0 +1,120 @@
+/*
+Minetest
+Copyright (C) 2020 Hugues Ross <hugues.ross@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "texture_override.h"
+
+#include "log.h"
+#include "util/string.h"
+#include <algorithm>
+#include <fstream>
+
+TextureOverrideSource::TextureOverrideSource(std::string filepath)
+{
+ std::ifstream infile(filepath.c_str());
+ std::string line;
+ int line_index = 0;
+ while (std::getline(infile, line)) {
+ line_index++;
+
+ // Also trim '\r' on DOS-style files
+ line = trim(line);
+
+ // Ignore empty lines and comments
+ if (line.empty() || line[0] == '#')
+ continue;
+
+ std::vector<std::string> splitted = str_split(line, ' ');
+ if (splitted.size() != 3) {
+ warningstream << filepath << ":" << line_index
+ << " Syntax error in texture override \"" << line
+ << "\": Expected 3 arguments, got " << splitted.size()
+ << std::endl;
+ continue;
+ }
+
+ TextureOverride texture_override = {};
+ texture_override.id = splitted[0];
+ texture_override.texture = splitted[2];
+
+ // Parse the target mask
+ std::vector<std::string> targets = str_split(splitted[1], ',');
+ for (const std::string &target : targets) {
+ if (target == "top")
+ texture_override.target |= static_cast<u8>(OverrideTarget::TOP);
+ else if (target == "bottom")
+ texture_override.target |= static_cast<u8>(OverrideTarget::BOTTOM);
+ else if (target == "left")
+ texture_override.target |= static_cast<u8>(OverrideTarget::LEFT);
+ else if (target == "right")
+ texture_override.target |= static_cast<u8>(OverrideTarget::RIGHT);
+ else if (target == "front")
+ texture_override.target |= static_cast<u8>(OverrideTarget::FRONT);
+ else if (target == "back")
+ texture_override.target |= static_cast<u8>(OverrideTarget::BACK);
+ else if (target == "inventory")
+ texture_override.target |= static_cast<u8>(OverrideTarget::INVENTORY);
+ else if (target == "wield")
+ texture_override.target |= static_cast<u8>(OverrideTarget::WIELD);
+ else if (target == "sides")
+ texture_override.target |= static_cast<u8>(OverrideTarget::SIDES);
+ else if (target == "all" || target == "*")
+ texture_override.target |= static_cast<u8>(OverrideTarget::ALL_FACES);
+ else {
+ // Report invalid target
+ warningstream << filepath << ":" << line_index
+ << " Syntax error in texture override \"" << line
+ << "\": Unknown target \"" << target << "\""
+ << std::endl;
+ }
+ }
+
+ // If there are no valid targets, skip adding this override
+ if (texture_override.target == static_cast<u8>(OverrideTarget::INVALID)) {
+ continue;
+ }
+
+ m_overrides.push_back(texture_override);
+ }
+}
+
+//! Get all overrides that apply to item definitions
+std::vector<TextureOverride> TextureOverrideSource::getItemTextureOverrides()
+{
+ std::vector<TextureOverride> found_overrides;
+
+ for (const TextureOverride &texture_override : m_overrides) {
+ if (texture_override.hasTarget(OverrideTarget::ITEM_TARGETS))
+ found_overrides.push_back(texture_override);
+ }
+
+ return found_overrides;
+}
+
+//! Get all overrides that apply to node definitions
+std::vector<TextureOverride> TextureOverrideSource::getNodeTileOverrides()
+{
+ std::vector<TextureOverride> found_overrides;
+
+ for (const TextureOverride &texture_override : m_overrides) {
+ if (texture_override.hasTarget(OverrideTarget::ALL_FACES))
+ found_overrides.push_back(texture_override);
+ }
+
+ return found_overrides;
+}
diff --git a/src/texture_override.h b/src/texture_override.h
new file mode 100644
index 000000000..db03bd014
--- /dev/null
+++ b/src/texture_override.h
@@ -0,0 +1,72 @@
+/*
+Minetest
+Copyright (C) 2020 Hugues Ross <hugues.ross@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#pragma once
+
+#include "irrlichttypes.h"
+#include <string>
+#include <vector>
+
+//! Bitmask enum specifying what a texture override should apply to
+enum class OverrideTarget : u8
+{
+ INVALID = 0,
+ TOP = 1 << 0,
+ BOTTOM = 1 << 1,
+ LEFT = 1 << 2,
+ RIGHT = 1 << 3,
+ FRONT = 1 << 4,
+ BACK = 1 << 5,
+ INVENTORY = 1 << 6,
+ WIELD = 1 << 7,
+
+ SIDES = LEFT | RIGHT | FRONT | BACK,
+ ALL_FACES = TOP | BOTTOM | SIDES,
+ ITEM_TARGETS = INVENTORY | WIELD,
+};
+
+struct TextureOverride
+{
+ std::string id;
+ std::string texture;
+ u8 target;
+
+ // Helper function for checking if an OverrideTarget is found in
+ // a TextureOverride without casting
+ inline bool hasTarget(OverrideTarget overrideTarget) const
+ {
+ return (target & static_cast<u8>(overrideTarget)) != 0;
+ }
+};
+
+//! Class that provides texture override information from a texture pack
+class TextureOverrideSource
+{
+public:
+ TextureOverrideSource(std::string filepath);
+
+ //! Get all overrides that apply to item definitions
+ std::vector<TextureOverride> getItemTextureOverrides();
+
+ //! Get all overrides that apply to node definitions
+ std::vector<TextureOverride> getNodeTileOverrides();
+
+private:
+ std::vector<TextureOverride> m_overrides;
+};
diff --git a/src/tool.cpp b/src/tool.cpp
index d911c518f..22e41d28e 100644
--- a/src/tool.cpp
+++ b/src/tool.cpp
@@ -130,7 +130,7 @@ void ToolCapabilities::serializeJson(std::ostream &os) const
root["punch_attack_uses"] = punch_attack_uses;
Json::Value groupcaps_object;
- for (auto groupcap : groupcaps) {
+ for (const auto &groupcap : groupcaps) {
groupcap.second.toJson(groupcaps_object[groupcap.first]);
}
root["groupcaps"] = groupcaps_object;
diff --git a/src/translation.cpp b/src/translation.cpp
index d17467ce7..8bbaee0a3 100644
--- a/src/translation.cpp
+++ b/src/translation.cpp
@@ -20,9 +20,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "translation.h"
#include "log.h"
#include "util/string.h"
+#include <unordered_map>
-static Translations main_translations;
-Translations *g_translations = &main_translations;
+
+#ifndef SERVER
+// Client translations
+Translations client_translations;
+Translations *g_client_translations = &client_translations;
+#endif
+
+// Per language server translations
+std::unordered_map<std::string,Translations> server_translations;
+std::unordered_map<std::string,Translations> *g_server_translations = &server_translations;
Translations::~Translations()
{
diff --git a/src/translation.h b/src/translation.h
index 18fc6c38f..71423b15e 100644
--- a/src/translation.h
+++ b/src/translation.h
@@ -23,7 +23,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
class Translations;
-extern Translations *g_translations;
+extern std::unordered_map<std::string, Translations> *g_server_translations;
+#ifndef SERVER
+extern Translations *g_client_translations;
+#endif
class Translations
{
diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt
index 82f9a4a13..5703b8906 100644
--- a/src/unittest/CMakeLists.txt
+++ b/src/unittest/CMakeLists.txt
@@ -43,7 +43,7 @@ set (UNITTEST_CLIENT_SRCS
PARENT_SCOPE)
set (TEST_WORLDDIR ${CMAKE_CURRENT_SOURCE_DIR}/test_world)
-set (TEST_SUBGAME_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../games/minimal)
+set (TEST_SUBGAME_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../games/devtest)
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/test_config.h.in"
diff --git a/src/unittest/test_ban.cpp b/src/unittest/test_ban.cpp
index 2a95b945f..bab2b9ee8 100644
--- a/src/unittest/test_ban.cpp
+++ b/src/unittest/test_ban.cpp
@@ -61,6 +61,9 @@ void TestBan::runTests(IGameDef *gamedef)
reinitTestEnv();
TEST(testGetBanDescription);
+
+ // Delete leftover files
+ reinitTestEnv();
}
// This module is stateful due to disk writes, add helper to remove files
diff --git a/src/unittest/test_collision.cpp b/src/unittest/test_collision.cpp
index 332d3fa13..2f39c2489 100644
--- a/src/unittest/test_collision.cpp
+++ b/src/unittest/test_collision.cpp
@@ -50,38 +50,38 @@ void TestCollision::testAxisAlignedCollision()
aabb3f s(bx, by, bz, bx+1, by+1, bz+1);
aabb3f m(bx-2, by, bz, bx-1, by+1, bz+1);
v3f v(1, 0, 0);
- f32 dtime = 0;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
+ f32 dtime = 1.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0);
UASSERT(fabs(dtime - 1.000) < 0.001);
}
{
aabb3f s(bx, by, bz, bx+1, by+1, bz+1);
aabb3f m(bx-2, by, bz, bx-1, by+1, bz+1);
v3f v(-1, 0, 0);
- f32 dtime = 0;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == -1);
+ f32 dtime = 1.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == -1);
}
{
aabb3f s(bx, by, bz, bx+1, by+1, bz+1);
aabb3f m(bx-2, by+1.5, bz, bx-1, by+2.5, bz-1);
v3f v(1, 0, 0);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == -1);
+ f32 dtime = 1.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == -1);
}
{
aabb3f s(bx, by, bz, bx+1, by+1, bz+1);
aabb3f m(bx-2, by-1.5, bz, bx-1.5, by+0.5, bz+1);
v3f v(0.5, 0.1, 0);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
+ f32 dtime = 3.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0);
UASSERT(fabs(dtime - 3.000) < 0.001);
}
{
aabb3f s(bx, by, bz, bx+1, by+1, bz+1);
aabb3f m(bx-2, by-1.5, bz, bx-1.5, by+0.5, bz+1);
v3f v(0.5, 0.1, 0);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
+ f32 dtime = 3.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0);
UASSERT(fabs(dtime - 3.000) < 0.001);
}
@@ -90,38 +90,38 @@ void TestCollision::testAxisAlignedCollision()
aabb3f s(bx, by, bz, bx+1, by+1, bz+1);
aabb3f m(bx+2, by, bz, bx+3, by+1, bz+1);
v3f v(-1, 0, 0);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
+ f32 dtime = 1.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0);
UASSERT(fabs(dtime - 1.000) < 0.001);
}
{
aabb3f s(bx, by, bz, bx+1, by+1, bz+1);
aabb3f m(bx+2, by, bz, bx+3, by+1, bz+1);
v3f v(1, 0, 0);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == -1);
+ f32 dtime = 1.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == -1);
}
{
aabb3f s(bx, by, bz, bx+1, by+1, bz+1);
aabb3f m(bx+2, by, bz+1.5, bx+3, by+1, bz+3.5);
v3f v(-1, 0, 0);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == -1);
+ f32 dtime = 1.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == -1);
}
{
aabb3f s(bx, by, bz, bx+1, by+1, bz+1);
aabb3f m(bx+2, by-1.5, bz, bx+2.5, by-0.5, bz+1);
v3f v(-0.5, 0.2, 0);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 1); // Y, not X!
+ f32 dtime = 2.5f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 1); // Y, not X!
UASSERT(fabs(dtime - 2.500) < 0.001);
}
{
aabb3f s(bx, by, bz, bx+1, by+1, bz+1);
aabb3f m(bx+2, by-1.5, bz, bx+2.5, by-0.5, bz+1);
v3f v(-0.5, 0.3, 0);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
+ f32 dtime = 2.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0);
UASSERT(fabs(dtime - 2.000) < 0.001);
}
@@ -132,48 +132,48 @@ void TestCollision::testAxisAlignedCollision()
aabb3f s(bx, by, bz, bx+2, by+2, bz+2);
aabb3f m(bx+2.3, by+2.29, bz+2.29, bx+4.2, by+4.2, bz+4.2);
v3f v(-1./3, -1./3, -1./3);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
+ f32 dtime = 1.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0);
UASSERT(fabs(dtime - 0.9) < 0.001);
}
{
aabb3f s(bx, by, bz, bx+2, by+2, bz+2);
aabb3f m(bx+2.29, by+2.3, bz+2.29, bx+4.2, by+4.2, bz+4.2);
v3f v(-1./3, -1./3, -1./3);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 1);
+ f32 dtime = 1.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 1);
UASSERT(fabs(dtime - 0.9) < 0.001);
}
{
aabb3f s(bx, by, bz, bx+2, by+2, bz+2);
aabb3f m(bx+2.29, by+2.29, bz+2.3, bx+4.2, by+4.2, bz+4.2);
v3f v(-1./3, -1./3, -1./3);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 2);
+ f32 dtime = 1.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 2);
UASSERT(fabs(dtime - 0.9) < 0.001);
}
{
aabb3f s(bx, by, bz, bx+2, by+2, bz+2);
aabb3f m(bx-4.2, by-4.2, bz-4.2, bx-2.3, by-2.29, bz-2.29);
v3f v(1./7, 1./7, 1./7);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 0);
+ f32 dtime = 17.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 0);
UASSERT(fabs(dtime - 16.1) < 0.001);
}
{
aabb3f s(bx, by, bz, bx+2, by+2, bz+2);
aabb3f m(bx-4.2, by-4.2, bz-4.2, bx-2.29, by-2.3, bz-2.29);
v3f v(1./7, 1./7, 1./7);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 1);
+ f32 dtime = 17.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 1);
UASSERT(fabs(dtime - 16.1) < 0.001);
}
{
aabb3f s(bx, by, bz, bx+2, by+2, bz+2);
aabb3f m(bx-4.2, by-4.2, bz-4.2, bx-2.29, by-2.29, bz-2.3);
v3f v(1./7, 1./7, 1./7);
- f32 dtime;
- UASSERT(axisAlignedCollision(s, m, v, 0, &dtime) == 2);
+ f32 dtime = 17.0f;
+ UASSERT(axisAlignedCollision(s, m, v, &dtime) == 2);
UASSERT(fabs(dtime - 16.1) < 0.001);
}
}
diff --git a/src/unittest/test_objdef.cpp b/src/unittest/test_objdef.cpp
index c2acdcfe7..40f7faa9d 100644
--- a/src/unittest/test_objdef.cpp
+++ b/src/unittest/test_objdef.cpp
@@ -32,6 +32,7 @@ public:
void testHandles();
void testAddGetSetClear();
+ void testClone();
};
static TestObjDef g_test_instance;
@@ -40,10 +41,42 @@ void TestObjDef::runTests(IGameDef *gamedef)
{
TEST(testHandles);
TEST(testAddGetSetClear);
+ TEST(testClone);
}
////////////////////////////////////////////////////////////////////////////////
+/* Minimal implementation of ObjDef and ObjDefManager subclass */
+
+class MyObjDef : public ObjDef
+{
+public:
+ ObjDef *clone() const
+ {
+ auto def = new MyObjDef();
+ ObjDef::cloneTo(def);
+ def->testvalue = testvalue;
+ return def;
+ };
+
+ u32 testvalue;
+};
+
+class MyObjDefManager : public ObjDefManager
+{
+public:
+ MyObjDefManager(ObjDefType type) : ObjDefManager(NULL, type){};
+ MyObjDefManager *clone() const
+ {
+ auto mgr = new MyObjDefManager();
+ ObjDefManager::cloneTo(mgr);
+ return mgr;
+ };
+
+protected:
+ MyObjDefManager(){};
+};
+
void TestObjDef::testHandles()
{
u32 uid = 0;
@@ -69,25 +102,25 @@ void TestObjDef::testAddGetSetClear()
UASSERTEQ(ObjDefType, testmgr.getType(), OBJDEF_GENERIC);
- obj0 = new ObjDef;
+ obj0 = new MyObjDef;
obj0->name = "foobar";
hObj0 = testmgr.add(obj0);
UASSERT(hObj0 != OBJDEF_INVALID_HANDLE);
UASSERTEQ(u32, obj0->index, 0);
- obj1 = new ObjDef;
+ obj1 = new MyObjDef;
obj1->name = "FooBaz";
hObj1 = testmgr.add(obj1);
UASSERT(hObj1 != OBJDEF_INVALID_HANDLE);
UASSERTEQ(u32, obj1->index, 1);
- obj2 = new ObjDef;
+ obj2 = new MyObjDef;
obj2->name = "asdf";
hObj2 = testmgr.add(obj2);
UASSERT(hObj2 != OBJDEF_INVALID_HANDLE);
UASSERTEQ(u32, obj2->index, 2);
- obj3 = new ObjDef;
+ obj3 = new MyObjDef;
obj3->name = "foobaz";
hObj3 = testmgr.add(obj3);
UASSERT(hObj3 == OBJDEF_INVALID_HANDLE);
@@ -104,3 +137,38 @@ void TestObjDef::testAddGetSetClear()
testmgr.clear();
UASSERTEQ(size_t, testmgr.getNumObjects(), 0);
}
+
+void TestObjDef::testClone()
+{
+ MyObjDefManager testmgr(OBJDEF_GENERIC);
+ ObjDefManager *mgrcopy;
+ MyObjDef *obj, *temp2;
+ ObjDef *temp1;
+ ObjDefHandle hObj;
+
+ obj = new MyObjDef;
+ obj->testvalue = 0xee00ff11;
+ hObj = testmgr.add(obj);
+ UASSERT(hObj != OBJDEF_INVALID_HANDLE);
+
+ mgrcopy = testmgr.clone();
+ UASSERT(mgrcopy);
+ UASSERTEQ(ObjDefType, mgrcopy->getType(), testmgr.getType());
+ UASSERTEQ(size_t, mgrcopy->getNumObjects(), testmgr.getNumObjects());
+
+ // 1) check that the same handle is still valid on the copy
+ temp1 = mgrcopy->get(hObj);
+ UASSERT(temp1);
+ UASSERT(temp1 == mgrcopy->getRaw(0));
+ // 2) check that the copy has the correct C++ class
+ temp2 = dynamic_cast<MyObjDef *>(temp1);
+ UASSERT(temp2);
+ // 3) check that it was correctly copied
+ UASSERTEQ(u32, obj->testvalue, temp2->testvalue);
+ // 4) check that it was copied AT ALL (not the same)
+ UASSERT(obj != temp2);
+
+ testmgr.clear();
+ mgrcopy->clear();
+ delete mgrcopy;
+}
diff --git a/src/unittest/test_player.cpp b/src/unittest/test_player.cpp
index e2b1cd855..6990b4016 100644
--- a/src/unittest/test_player.cpp
+++ b/src/unittest/test_player.cpp
@@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "exceptions.h"
#include "remoteplayer.h"
-#include "content_sao.h"
#include "server.h"
class TestPlayer : public TestBase
diff --git a/src/unittest/test_serveractiveobjectmgr.cpp b/src/unittest/test_serveractiveobjectmgr.cpp
index 0806972ab..aa0047400 100644
--- a/src/unittest/test_serveractiveobjectmgr.cpp
+++ b/src/unittest/test_serveractiveobjectmgr.cpp
@@ -148,14 +148,26 @@ void TestServerActiveObjectMgr::testGetObjectsInsideRadius()
saomgr.registerObject(new TestServerActiveObject(p));
}
- std::vector<u16> result;
- saomgr.getObjectsInsideRadius(v3f(), 50, result);
+ std::vector<ServerActiveObject *> result;
+ saomgr.getObjectsInsideRadius(v3f(), 50, result, nullptr);
UASSERTCMP(int, ==, result.size(), 1);
result.clear();
- saomgr.getObjectsInsideRadius(v3f(), 750, result);
+ saomgr.getObjectsInsideRadius(v3f(), 750, result, nullptr);
UASSERTCMP(int, ==, result.size(), 2);
+ result.clear();
+ saomgr.getObjectsInsideRadius(v3f(), 750000, result, nullptr);
+ UASSERTCMP(int, ==, result.size(), 5);
+
+ result.clear();
+ auto include_obj_cb = [](ServerActiveObject *obj) {
+ return (obj->getBasePosition().X != 10);
+ };
+
+ saomgr.getObjectsInsideRadius(v3f(), 750000, result, include_obj_cb);
+ UASSERTCMP(int, ==, result.size(), 4);
+
clearSAOMgr(&saomgr);
}
diff --git a/src/unittest/test_servermodmanager.cpp b/src/unittest/test_servermodmanager.cpp
index 0757323f4..799936757 100644
--- a/src/unittest/test_servermodmanager.cpp
+++ b/src/unittest/test_servermodmanager.cpp
@@ -88,7 +88,7 @@ void TestServerModManager::testCreation()
{
std::string path = std::string(TEST_WORLDDIR) + DIR_DELIM + "world.mt";
Settings world_config;
- world_config.set("gameid", "minimal");
+ world_config.set("gameid", "devtest");
UASSERTEQ(bool, world_config.updateConfigFile(path.c_str()), true);
ServerModManager sm(TEST_WORLDDIR);
}
@@ -118,10 +118,10 @@ void TestServerModManager::testGetMods()
const auto &mods = sm.getMods();
UASSERTEQ(bool, mods.empty(), false);
- // Ensure we found default mod inside the test folder
+ // Ensure we found basenodes mod (part of devtest)
bool default_found = false;
for (const auto &m : mods) {
- if (m.name == "default")
+ if (m.name == "basenodes")
default_found = true;
// Verify if paths are not empty
@@ -135,7 +135,7 @@ void TestServerModManager::testGetModspec()
{
ServerModManager sm(std::string(TEST_WORLDDIR));
UASSERTEQ(const ModSpec *, sm.getModSpec("wrongmod"), NULL);
- UASSERT(sm.getModSpec("default") != NULL);
+ UASSERT(sm.getModSpec("basenodes") != NULL);
}
void TestServerModManager::testGetModNamesWrongDir()
@@ -152,7 +152,7 @@ void TestServerModManager::testGetModNames()
std::vector<std::string> result;
sm.getModNames(result);
UASSERTEQ(bool, result.empty(), false);
- UASSERT(std::find(result.begin(), result.end(), "default") != result.end());
+ UASSERT(std::find(result.begin(), result.end(), "basenodes") != result.end());
}
void TestServerModManager::testGetModMediaPathsWrongDir()
diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt
index 199d3aeaa..cd2e468d1 100644
--- a/src/util/CMakeLists.txt
+++ b/src/util/CMakeLists.txt
@@ -5,6 +5,7 @@ set(UTIL_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/directiontables.cpp
${CMAKE_CURRENT_SOURCE_DIR}/enriched_string.cpp
${CMAKE_CURRENT_SOURCE_DIR}/ieee_float.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/metricsbackend.cpp
${CMAKE_CURRENT_SOURCE_DIR}/numeric.cpp
${CMAKE_CURRENT_SOURCE_DIR}/pointedthing.cpp
${CMAKE_CURRENT_SOURCE_DIR}/quicktune.cpp
diff --git a/src/util/md32_common.h b/src/util/md32_common.h
index 085d1d7a5..a4c2099c9 100644
--- a/src/util/md32_common.h
+++ b/src/util/md32_common.h
@@ -109,6 +109,8 @@
* <appro@fy.chalmers.se>
*/
+#pragma once
+
#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN)
# error "DATA_ORDER must be defined!"
#endif
diff --git a/src/util/metricsbackend.cpp b/src/util/metricsbackend.cpp
new file mode 100644
index 000000000..4454557a3
--- /dev/null
+++ b/src/util/metricsbackend.cpp
@@ -0,0 +1,140 @@
+/*
+Minetest
+Copyright (C) 2013-2020 Minetest core developers team
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "metricsbackend.h"
+#if USE_PROMETHEUS
+#include <prometheus/exposer.h>
+#include <prometheus/registry.h>
+#include <prometheus/counter.h>
+#include <prometheus/gauge.h>
+#include "log.h"
+#include "settings.h"
+#endif
+
+MetricCounterPtr MetricsBackend::addCounter(
+ const std::string &name, const std::string &help_str)
+{
+ return std::make_shared<SimpleMetricCounter>(name, help_str);
+}
+
+MetricGaugePtr MetricsBackend::addGauge(
+ const std::string &name, const std::string &help_str)
+{
+ return std::make_shared<SimpleMetricGauge>(name, help_str);
+}
+
+#if USE_PROMETHEUS
+
+class PrometheusMetricCounter : public MetricCounter
+{
+public:
+ PrometheusMetricCounter() = delete;
+
+ PrometheusMetricCounter(const std::string &name, const std::string &help_str,
+ std::shared_ptr<prometheus::Registry> registry) :
+ MetricCounter(),
+ m_family(prometheus::BuildCounter()
+ .Name(name)
+ .Help(help_str)
+ .Register(*registry)),
+ m_counter(m_family.Add({}))
+ {
+ }
+
+ virtual ~PrometheusMetricCounter() {}
+
+ virtual void increment(double number) { m_counter.Increment(number); }
+ virtual double get() const { return m_counter.Value(); }
+
+private:
+ prometheus::Family<prometheus::Counter> &m_family;
+ prometheus::Counter &m_counter;
+};
+
+class PrometheusMetricGauge : public MetricGauge
+{
+public:
+ PrometheusMetricGauge() = delete;
+
+ PrometheusMetricGauge(const std::string &name, const std::string &help_str,
+ std::shared_ptr<prometheus::Registry> registry) :
+ MetricGauge(),
+ m_family(prometheus::BuildGauge()
+ .Name(name)
+ .Help(help_str)
+ .Register(*registry)),
+ m_gauge(m_family.Add({}))
+ {
+ }
+
+ virtual ~PrometheusMetricGauge() {}
+
+ virtual void increment(double number) { m_gauge.Increment(number); }
+ virtual void decrement(double number) { m_gauge.Decrement(number); }
+ virtual void set(double number) { m_gauge.Set(number); }
+ virtual double get() const { return m_gauge.Value(); }
+
+private:
+ prometheus::Family<prometheus::Gauge> &m_family;
+ prometheus::Gauge &m_gauge;
+};
+
+class PrometheusMetricsBackend : public MetricsBackend
+{
+public:
+ PrometheusMetricsBackend(const std::string &addr) :
+ MetricsBackend(), m_exposer(std::unique_ptr<prometheus::Exposer>(
+ new prometheus::Exposer(addr))),
+ m_registry(std::make_shared<prometheus::Registry>())
+ {
+ m_exposer->RegisterCollectable(m_registry);
+ }
+
+ virtual ~PrometheusMetricsBackend() {}
+
+ virtual MetricCounterPtr addCounter(
+ const std::string &name, const std::string &help_str);
+ virtual MetricGaugePtr addGauge(
+ const std::string &name, const std::string &help_str);
+
+private:
+ std::unique_ptr<prometheus::Exposer> m_exposer;
+ std::shared_ptr<prometheus::Registry> m_registry;
+};
+
+MetricCounterPtr PrometheusMetricsBackend::addCounter(
+ const std::string &name, const std::string &help_str)
+{
+ return std::make_shared<PrometheusMetricCounter>(name, help_str, m_registry);
+}
+
+MetricGaugePtr PrometheusMetricsBackend::addGauge(
+ const std::string &name, const std::string &help_str)
+{
+ return std::make_shared<PrometheusMetricGauge>(name, help_str, m_registry);
+}
+
+MetricsBackend *createPrometheusMetricsBackend()
+{
+ std::string addr;
+ g_settings->getNoEx("prometheus_listener_address", addr);
+ return new PrometheusMetricsBackend(addr);
+}
+
+#endif
diff --git a/src/util/metricsbackend.h b/src/util/metricsbackend.h
new file mode 100644
index 000000000..c37306392
--- /dev/null
+++ b/src/util/metricsbackend.h
@@ -0,0 +1,140 @@
+/*
+Minetest
+Copyright (C) 2013-2020 Minetest core developers team
+
+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 <memory>
+#include "config.h"
+#include "util/thread.h"
+
+class MetricCounter
+{
+public:
+ MetricCounter() = default;
+
+ virtual ~MetricCounter() {}
+
+ virtual void increment(double number = 1.0) = 0;
+ virtual double get() const = 0;
+};
+
+typedef std::shared_ptr<MetricCounter> MetricCounterPtr;
+
+class SimpleMetricCounter : public MetricCounter
+{
+public:
+ SimpleMetricCounter() = delete;
+
+ virtual ~SimpleMetricCounter() {}
+
+ SimpleMetricCounter(const std::string &name, const std::string &help_str) :
+ MetricCounter(), m_name(name), m_help_str(help_str),
+ m_counter(0.0)
+ {
+ }
+
+ virtual void increment(double number)
+ {
+ MutexAutoLock lock(m_mutex);
+ m_counter += number;
+ }
+ virtual double get() const
+ {
+ MutexAutoLock lock(m_mutex);
+ return m_counter;
+ }
+
+private:
+ std::string m_name;
+ std::string m_help_str;
+
+ mutable std::mutex m_mutex;
+ double m_counter;
+};
+
+class MetricGauge
+{
+public:
+ MetricGauge() = default;
+ virtual ~MetricGauge() {}
+
+ virtual void increment(double number = 1.0) = 0;
+ virtual void decrement(double number = 1.0) = 0;
+ virtual void set(double number) = 0;
+ virtual double get() const = 0;
+};
+
+typedef std::shared_ptr<MetricGauge> MetricGaugePtr;
+
+class SimpleMetricGauge : public MetricGauge
+{
+public:
+ SimpleMetricGauge() = delete;
+
+ SimpleMetricGauge(const std::string &name, const std::string &help_str) :
+ MetricGauge(), m_name(name), m_help_str(help_str), m_gauge(0.0)
+ {
+ }
+
+ virtual ~SimpleMetricGauge() {}
+
+ virtual void increment(double number)
+ {
+ MutexAutoLock lock(m_mutex);
+ m_gauge += number;
+ }
+ virtual void decrement(double number)
+ {
+ MutexAutoLock lock(m_mutex);
+ m_gauge -= number;
+ }
+ virtual void set(double number)
+ {
+ MutexAutoLock lock(m_mutex);
+ m_gauge = number;
+ }
+ virtual double get() const
+ {
+ MutexAutoLock lock(m_mutex);
+ return m_gauge;
+ }
+
+private:
+ std::string m_name;
+ std::string m_help_str;
+
+ mutable std::mutex m_mutex;
+ double m_gauge;
+};
+
+class MetricsBackend
+{
+public:
+ MetricsBackend() = default;
+
+ virtual ~MetricsBackend() {}
+
+ virtual MetricCounterPtr addCounter(
+ const std::string &name, const std::string &help_str);
+ virtual MetricGaugePtr addGauge(
+ const std::string &name, const std::string &help_str);
+};
+
+#if USE_PROMETHEUS
+MetricsBackend *createPrometheusMetricsBackend();
+#endif
diff --git a/src/util/numeric.h b/src/util/numeric.h
index 6f82a18c1..864ab7543 100644
--- a/src/util/numeric.h
+++ b/src/util/numeric.h
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irr_v2d.h"
#include "irr_v3d.h"
#include "irr_aabb3d.h"
+#include "SColor.h"
#include <matrix4.h>
#define rangelim(d, min, max) ((d) < (min) ? (min) : ((d) > (max) ? (max) : (d)))
@@ -432,3 +433,12 @@ inline v3f getPitchYawRoll(const core::matrix4 &m)
{
return getPitchYawRollRad(m) * core::RADTODEG64;
}
+
+// Muliply the RGB value of a color linearly, and clamp to black/white
+inline irr::video::SColor multiplyColorValue(const irr::video::SColor &color, float mod)
+{
+ return irr::video::SColor(color.getAlpha(),
+ core::clamp<u32>(color.getRed() * mod, 0, 255),
+ core::clamp<u32>(color.getGreen() * mod, 0, 255),
+ core::clamp<u32>(color.getBlue() * mod, 0, 255));
+}
diff --git a/src/util/serialize.cpp b/src/util/serialize.cpp
index f0e177d57..5b276668d 100644
--- a/src/util/serialize.cpp
+++ b/src/util/serialize.cpp
@@ -110,6 +110,7 @@ std::string serializeString(const std::string &plain)
if (plain.size() > STRING_MAX_LEN)
throw SerializationError("String too long for serializeString");
+ s.reserve(2 + plain.size());
writeU16((u8 *)&buf[0], plain.size());
s.append(buf, 2);
@@ -131,13 +132,11 @@ std::string deSerializeString(std::istream &is)
if (s_size == 0)
return s;
- Buffer<char> buf2(s_size);
- is.read(&buf2[0], s_size);
+ s.resize(s_size);
+ is.read(&s[0], s_size);
if (is.gcount() != s_size)
throw SerializationError("deSerializeString: couldn't read all chars");
- s.reserve(s_size);
- s.append(&buf2[0], s_size);
return s;
}
@@ -152,6 +151,7 @@ std::string serializeWideString(const std::wstring &plain)
if (plain.size() > WIDE_STRING_MAX_LEN)
throw SerializationError("String too long for serializeWideString");
+ s.reserve(2 + 2 * plain.size());
writeU16((u8 *)buf, plain.size());
s.append(buf, 2);
@@ -196,13 +196,14 @@ std::wstring deSerializeWideString(std::istream &is)
std::string serializeLongString(const std::string &plain)
{
+ std::string s;
char buf[4];
if (plain.size() > LONG_STRING_MAX_LEN)
throw SerializationError("String too long for serializeLongString");
+ s.reserve(4 + plain.size());
writeU32((u8*)&buf[0], plain.size());
- std::string s;
s.append(buf, 4);
s.append(plain);
return s;
@@ -227,13 +228,11 @@ std::string deSerializeLongString(std::istream &is)
"string too long: " + itos(s_size) + " bytes");
}
- Buffer<char> buf2(s_size);
- is.read(&buf2[0], s_size);
+ s.resize(s_size);
+ is.read(&s[0], s_size);
if ((u32)is.gcount() != s_size)
throw SerializationError("deSerializeLongString: couldn't read all chars");
- s.reserve(s_size);
- s.append(&buf2[0], s_size);
return s;
}
diff --git a/src/util/serialize.h b/src/util/serialize.h
index 8ef0ad1c2..a4b5a234a 100644
--- a/src/util/serialize.h
+++ b/src/util/serialize.h
@@ -52,8 +52,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// not represent the full range, but rather the largest safe range, of values on
// all supported architectures. Note: This definition makes assumptions on
// platform float-to-int conversion behavior.
-#define F1000_MIN ((float)(s32)((-0x7FFFFFFF - 1) / FIXEDPOINT_FACTOR))
-#define F1000_MAX ((float)(s32)((0x7FFFFFFF) / FIXEDPOINT_FACTOR))
+#define F1000_MIN ((float)(s32)((float)(-0x7FFFFFFF - 1) / FIXEDPOINT_FACTOR))
+#define F1000_MAX ((float)(s32)((float)(0x7FFFFFFF) / FIXEDPOINT_FACTOR))
#define STRING_MAX_LEN 0xFFFF
#define WIDE_STRING_MAX_LEN 0xFFFF
diff --git a/src/util/string.cpp b/src/util/string.cpp
index e6c52585d..6e1db798c 100644
--- a/src/util/string.cpp
+++ b/src/util/string.cpp
@@ -209,6 +209,9 @@ wchar_t *narrow_to_wide_c(const char *str)
}
std::wstring narrow_to_wide(const std::string &mbs) {
+#ifdef __ANDROID__
+ return utf8_to_wide(mbs);
+#else
size_t wcl = mbs.size();
Buffer<wchar_t> wcs(wcl + 1);
size_t len = mbstowcs(*wcs, mbs.c_str(), wcl);
@@ -216,11 +219,15 @@ std::wstring narrow_to_wide(const std::string &mbs) {
return L"<invalid multibyte string>";
wcs[len] = 0;
return *wcs;
+#endif
}
std::string wide_to_narrow(const std::wstring &wcs)
{
+#ifdef __ANDROID__
+ return wide_to_utf8(wcs);
+#else
size_t mbl = wcs.size() * 4;
SharedBuffer<char> mbs(mbl+1);
size_t len = wcstombs(*mbs, wcs.c_str(), mbl);
@@ -229,6 +236,7 @@ std::string wide_to_narrow(const std::wstring &wcs)
mbs[len] = 0;
return *mbs;
+#endif
}
@@ -685,10 +693,12 @@ void str_replace(std::string &str, char from, char to)
* before filling it again.
*/
-void translate_all(const std::wstring &s, size_t &i, std::wstring &res);
+void translate_all(const std::wstring &s, size_t &i,
+ Translations *translations, std::wstring &res);
-void translate_string(const std::wstring &s, const std::wstring &textdomain,
- size_t &i, std::wstring &res) {
+void translate_string(const std::wstring &s, Translations *translations,
+ const std::wstring &textdomain, size_t &i, std::wstring &res)
+{
std::wostringstream output;
std::vector<std::wstring> args;
int arg_number = 1;
@@ -742,7 +752,7 @@ void translate_string(const std::wstring &s, const std::wstring &textdomain,
if (arg_number >= 10) {
errorstream << "Ignoring too many arguments to translation" << std::endl;
std::wstring arg;
- translate_all(s, i, arg);
+ translate_all(s, i, translations, arg);
args.push_back(arg);
continue;
}
@@ -750,7 +760,7 @@ void translate_string(const std::wstring &s, const std::wstring &textdomain,
output << arg_number;
++arg_number;
std::wstring arg;
- translate_all(s, i, arg);
+ translate_all(s, i, translations, arg);
args.push_back(arg);
} else {
// This is an escape sequence *inside* the template string to translate itself.
@@ -759,8 +769,13 @@ void translate_string(const std::wstring &s, const std::wstring &textdomain,
}
}
+ std::wstring toutput;
// Translate the template.
- std::wstring toutput = g_translations->getTranslation(textdomain, output.str());
+ if (translations != nullptr)
+ toutput = translations->getTranslation(
+ textdomain, output.str());
+ else
+ toutput = output.str();
// Put back the arguments in the translated template.
std::wostringstream result;
@@ -794,7 +809,9 @@ void translate_string(const std::wstring &s, const std::wstring &textdomain,
res = result.str();
}
-void translate_all(const std::wstring &s, size_t &i, std::wstring &res) {
+void translate_all(const std::wstring &s, size_t &i,
+ Translations *translations, std::wstring &res)
+{
std::wostringstream output;
while (i < s.length()) {
// Not an escape sequence: just add the character.
@@ -843,7 +860,7 @@ void translate_all(const std::wstring &s, size_t &i, std::wstring &res) {
if (parts.size() > 1)
textdomain = parts[1];
std::wstring translated;
- translate_string(s, textdomain, i, translated);
+ translate_string(s, translations, textdomain, i, translated);
output << translated;
} else {
// Another escape sequence, such as colors. Preserve it.
@@ -854,9 +871,21 @@ void translate_all(const std::wstring &s, size_t &i, std::wstring &res) {
res = output.str();
}
-std::wstring translate_string(const std::wstring &s) {
+// Translate string server side
+std::wstring translate_string(const std::wstring &s, Translations *translations)
+{
size_t i = 0;
std::wstring res;
- translate_all(s, i, res);
+ translate_all(s, i, translations, res);
return res;
}
+
+// Translate string client side
+std::wstring translate_string(const std::wstring &s)
+{
+#ifdef SERVER
+ return translate_string(s, nullptr);
+#else
+ return translate_string(s, g_client_translations);
+#endif
+}
diff --git a/src/util/string.h b/src/util/string.h
index 0d2a6bdb2..185fb55e2 100644
--- a/src/util/string.h
+++ b/src/util/string.h
@@ -31,6 +31,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <cctype>
#include <unordered_map>
+class Translations;
+
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
@@ -650,6 +652,8 @@ std::vector<std::basic_string<T> > split(const std::basic_string<T> &s, T delim)
return tokens;
}
+std::wstring translate_string(const std::wstring &s, Translations *translations);
+
std::wstring translate_string(const std::wstring &s);
inline std::wstring unescape_translate(const std::wstring &s) {
diff --git a/src/version.cpp b/src/version.cpp
index c0c59ee99..241228a6a 100644
--- a/src/version.cpp
+++ b/src/version.cpp
@@ -20,10 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "version.h"
#include "config.h"
-#if defined(__ANDROID__)
- #include "android_version.h"
- #include "android_version_githash.h"
-#elif defined(USE_CMAKE_CONFIG_H)
+#if USE_CMAKE_CONFIG_H
#include "cmake_config_githash.h"
#endif
@@ -33,4 +30,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
const char *g_version_string = VERSION_STRING;
const char *g_version_hash = VERSION_GITHASH;
-const char *g_build_info = BUILD_INFO;
+const char *g_build_info =
+ "BUILD_TYPE=" BUILD_TYPE "\n"
+ "RUN_IN_PLACE=" STR(RUN_IN_PLACE) "\n"
+ "USE_GETTEXT=" STR(USE_GETTEXT) "\n"
+ "USE_SOUND=" STR(USE_SOUND) "\n"
+ "USE_CURL=" STR(USE_CURL) "\n"
+ "USE_FREETYPE=" STR(USE_FREETYPE) "\n"
+ "USE_LUAJIT=" STR(USE_LUAJIT) "\n"
+ "STATIC_SHAREDIR=" STR(STATIC_SHAREDIR)
+#if USE_GETTEXT && defined(STATIC_LOCALEDIR)
+ "\n" "STATIC_LOCALEDIR=" STR(STATIC_LOCALEDIR)
+#endif
+;
diff --git a/textures/base/pack/bubble_gone.png b/textures/base/pack/bubble_gone.png
new file mode 100644
index 000000000..240ca4f8d
--- /dev/null
+++ b/textures/base/pack/bubble_gone.png
Binary files differ
diff --git a/textures/base/pack/end_icon.png b/textures/base/pack/end_icon.png
new file mode 100644
index 000000000..4fb4d52a0
--- /dev/null
+++ b/textures/base/pack/end_icon.png
Binary files differ
diff --git a/textures/base/pack/heart_gone.png b/textures/base/pack/heart_gone.png
new file mode 100644
index 000000000..240ca4f8d
--- /dev/null
+++ b/textures/base/pack/heart_gone.png
Binary files differ
diff --git a/textures/base/pack/next_icon.png b/textures/base/pack/next_icon.png
new file mode 100644
index 000000000..03f960917
--- /dev/null
+++ b/textures/base/pack/next_icon.png
Binary files differ
diff --git a/textures/base/pack/plus.png b/textures/base/pack/plus.png
new file mode 100644
index 000000000..64680b569
--- /dev/null
+++ b/textures/base/pack/plus.png
Binary files differ
diff --git a/textures/base/pack/prev_icon.png b/textures/base/pack/prev_icon.png
new file mode 100644
index 000000000..71509e71a
--- /dev/null
+++ b/textures/base/pack/prev_icon.png
Binary files differ
diff --git a/textures/base/pack/start_icon.png b/textures/base/pack/start_icon.png
new file mode 100644
index 000000000..3830fb3ae
--- /dev/null
+++ b/textures/base/pack/start_icon.png
Binary files differ
diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh
index 090ac7b0d..e62d32969 100755
--- a/util/buildbot/buildwin32.sh
+++ b/util/buildbot/buildwin32.sh
@@ -86,22 +86,21 @@ cd $libdir
# Get minetest
cd $builddir
if [ ! "x$EXISTING_MINETEST_DIR" = "x" ]; then
- ln -s $EXISTING_MINETEST_DIR $CORE_NAME
+ cd /$EXISTING_MINETEST_DIR # must be absolute path
else
[ -d $CORE_NAME ] && (cd $CORE_NAME && git pull) || (git clone -b $CORE_BRANCH $CORE_GIT)
+ cd $CORE_NAME
fi
-cd $CORE_NAME
git_hash=$(git rev-parse --short HEAD)
# Get minetest_game
-cd games
if [ "x$NO_MINETEST_GAME" = "x" ]; then
+ cd games
[ -d $GAME_NAME ] && (cd $GAME_NAME && git pull) || (git clone -b $GAME_BRANCH $GAME_GIT)
+ cd ..
fi
-cd ../..
# Build the thing
-cd $CORE_NAME
[ -d _build ] && rm -Rf _build/
mkdir _build
cd _build
diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh
index b24a478d8..94e009c29 100755
--- a/util/buildbot/buildwin64.sh
+++ b/util/buildbot/buildwin64.sh
@@ -78,22 +78,21 @@ cd $libdir
# Get minetest
cd $builddir
if [ ! "x$EXISTING_MINETEST_DIR" = "x" ]; then
- ln -s $EXISTING_MINETEST_DIR $CORE_NAME
+ cd /$EXISTING_MINETEST_DIR # must be absolute path
else
[ -d $CORE_NAME ] && (cd $CORE_NAME && git pull) || (git clone -b $CORE_BRANCH $CORE_GIT)
+ cd $CORE_NAME
fi
-cd $CORE_NAME
git_hash=$(git rev-parse --short HEAD)
# Get minetest_game
-cd games
if [ "x$NO_MINETEST_GAME" = "x" ]; then
+ cd games
[ -d $GAME_NAME ] && (cd $GAME_NAME && git pull) || (git clone -b $GAME_BRANCH $GAME_GIT)
+ cd ..
fi
-cd ../..
# Build the thing
-cd $CORE_NAME
[ -d _build ] && rm -Rf _build/
mkdir _build
cd _build
diff --git a/util/bump_version.sh b/util/bump_version.sh
index ad1c9e1cd..996962199 100755
--- a/util/bump_version.sh
+++ b/util/bump_version.sh
@@ -23,7 +23,7 @@ prompt_for_number() {
perform_release() {
sed -i -re "s/^set\(DEVELOPMENT_BUILD TRUE\)$/set(DEVELOPMENT_BUILD FALSE)/" CMakeLists.txt
- sed -i -re "s/versionCode [0-9]+$/versionCode $NEW_ANDROID_VERSION_CODE/" build/android/build.gradle
+ sed -i -re "s/\"versionCode\", [0-9]+/\"versionCode\", $NEW_ANDROID_VERSION_CODE/" build/android/build.gradle
sed -i '/\<release/s/\(version\)="[^"]*"/\1="'"$RELEASE_VERSION"'"/' misc/net.minetest.minetest.appdata.xml
@@ -78,19 +78,20 @@ cd ${0%/*}/..
grep -q -E '^set\(VERSION_MAJOR [0-9]+\)$' CMakeLists.txt
grep -q -E '^set\(VERSION_MINOR [0-9]+\)$' CMakeLists.txt
grep -q -E '^set\(VERSION_PATCH [0-9]+\)$' CMakeLists.txt
-grep -q -E 'versionCode [0-9]+$' build/android/build.gradle
+grep -q -E '\("versionCode", [0-9]+\)' build/android/build.gradle
VERSION_MAJOR=$(grep -E '^set\(VERSION_MAJOR [0-9]+\)$' CMakeLists.txt | tr -dC 0-9)
VERSION_MINOR=$(grep -E '^set\(VERSION_MINOR [0-9]+\)$' CMakeLists.txt | tr -dC 0-9)
VERSION_PATCH=$(grep -E '^set\(VERSION_PATCH [0-9]+\)$' CMakeLists.txt | tr -dC 0-9)
-ANDROID_VERSION_CODE=$(grep -E 'versionCode [0-9]+$' build/android/build.gradle | tr -dC 0-9)
+ANDROID_VERSION_CODE=$(grep -E '"versionCode", [0-9]+' build/android/build.gradle | tr -dC 0-9)
RELEASE_VERSION="$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH"
echo "Current Minetest version: $RELEASE_VERSION"
echo "Current Android version code: $ANDROID_VERSION_CODE"
-NEW_ANDROID_VERSION_CODE=$(expr $ANDROID_VERSION_CODE + 1)
+# +1 for ARM and +1 for ARM64 APKs
+NEW_ANDROID_VERSION_CODE=$(expr $ANDROID_VERSION_CODE + 2)
NEW_ANDROID_VERSION_CODE=$(prompt_for_number "Set android version code" $NEW_ANDROID_VERSION_CODE)
echo
diff --git a/util/ci/build.sh b/util/ci/build.sh
new file mode 100755
index 000000000..ba77cd645
--- /dev/null
+++ b/util/ci/build.sh
@@ -0,0 +1,8 @@
+#! /bin/bash -e
+
+mkdir cmakebuild
+cd cmakebuild
+cmake -DCMAKE_BUILD_TYPE=Debug \
+ -DRUN_IN_PLACE=TRUE -DENABLE_GETTEXT=TRUE \
+ -DBUILD_SERVER=TRUE ${CMAKE_FLAGS} ..
+make -j2
diff --git a/util/ci/build_prometheus_cpp.sh b/util/ci/build_prometheus_cpp.sh
new file mode 100755
index 000000000..edfd574cd
--- /dev/null
+++ b/util/ci/build_prometheus_cpp.sh
@@ -0,0 +1,13 @@
+#! /bin/bash -eu
+
+cd /tmp
+git clone --recursive https://github.com/jupp0r/prometheus-cpp
+mkdir prometheus-cpp/build
+cd prometheus-cpp/build
+cmake .. \
+ -DCMAKE_INSTALL_PREFIX=/usr/local \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DENABLE_TESTING=0
+make -j2
+sudo make install
+
diff --git a/util/travis/clang-format-whitelist.txt b/util/ci/clang-format-whitelist.txt
index 05b4a96c4..3334257ae 100644
--- a/util/travis/clang-format-whitelist.txt
+++ b/util/ci/clang-format-whitelist.txt
@@ -118,8 +118,6 @@ src/content_mapblock.h
src/content_mapnode.cpp
src/content_nodemeta.cpp
src/content_nodemeta.h
-src/content_sao.cpp
-src/content_sao.h
src/convert_json.cpp
src/convert_json.h
src/craftdef.cpp
@@ -151,8 +149,6 @@ src/fontengine.h
src/game.cpp
src/gamedef.h
src/game.h
-src/genericobject.cpp
-src/genericobject.h
src/gettext.cpp
src/gettext.h
src/gui/guiAnimatedImage.cpp
@@ -404,16 +400,16 @@ src/script/scripting_server.cpp
src/script/scripting_server.h
src/serialization.cpp
src/serialization.h
-src/serveractiveobjectmap.cpp
-src/serveractiveobjectmap.h
src/server.cpp
src/serverenvironment.cpp
src/serverenvironment.h
src/server.h
src/serverlist.cpp
src/serverlist.h
-src/serverobject.cpp
-src/serverobject.h
+src/server/luaentity_sao.cpp
+src/server/player_sao.cpp
+src/server/serveractiveobject.cpp
+src/server/serveractiveobject.h
src/settings.cpp
src/settings.h
src/settings_translation_file.cpp
@@ -427,6 +423,7 @@ src/subgame.cpp
src/subgame.h
src/terminal_chat_console.cpp
src/terminal_chat_console.h
+src/texture_override.cpp
src/threading/atomic.h
src/threading/event.cpp
src/threading/mutex_auto_lock.h
@@ -437,6 +434,7 @@ src/threading/thread.cpp
src/threading/thread.h
src/threads.h
src/tileanimation.cpp
+src/tileanimation.h
src/tool.cpp
src/tool.h
src/translation.cpp
diff --git a/util/ci/clang-tidy.sh b/util/ci/clang-tidy.sh
new file mode 100755
index 000000000..bb4e99fef
--- /dev/null
+++ b/util/ci/clang-tidy.sh
@@ -0,0 +1,17 @@
+#! /bin/bash -eu
+
+mkdir -p cmakebuild
+cd cmakebuild
+cmake -DCMAKE_BUILD_TYPE=Debug \
+ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
+ -DRUN_IN_PLACE=TRUE \
+ -DENABLE_{GETTEXT,SOUND}=FALSE \
+ -DBUILD_SERVER=TRUE ..
+make GenerateVersion
+
+cd ..
+
+./util/ci/run-clang-tidy.py \
+ -clang-tidy-binary=clang-tidy-9 -p cmakebuild \
+ -quiet -config="$(cat .clang-tidy)" \
+ 'src/.*'
diff --git a/util/ci/common.sh b/util/ci/common.sh
new file mode 100644
index 000000000..a2e4beac9
--- /dev/null
+++ b/util/ci/common.sh
@@ -0,0 +1,29 @@
+#!/bin/bash -e
+
+# Linux build only
+install_linux_deps() {
+ local pkgs=(libirrlicht-dev cmake libbz2-dev 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)
+ # for better coverage, build some jobs with luajit
+ if [ -n "$WITH_LUAJIT" ]; then
+ pkgs+=(libluajit-5.1-dev)
+ fi
+
+ sudo apt-get update
+ sudo apt-get install -y --no-install-recommends ${pkgs[@]}
+}
+
+# Mac OSX build only
+install_macosx_deps() {
+ brew update
+ brew install freetype gettext hiredis irrlicht leveldb libogg libvorbis luajit
+ if brew ls | grep -q jpeg; then
+ brew upgrade jpeg
+ else
+ brew install jpeg
+ fi
+ #brew upgrade postgresql
+}
diff --git a/util/travis/lint.sh b/util/ci/lint.sh
index b3027c689..395445ca7 100644
--- a/util/travis/lint.sh
+++ b/util/ci/lint.sh
@@ -5,7 +5,7 @@ function perform_lint() {
CLANG_FORMAT=clang-format
fi
echo "LINT: Using binary $CLANG_FORMAT"
- CLANG_FORMAT_WHITELIST="util/travis/clang-format-whitelist.txt"
+ CLANG_FORMAT_WHITELIST="util/ci/clang-format-whitelist.txt"
files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')"
diff --git a/util/travis/run-clang-tidy.py b/util/ci/run-clang-tidy.py
index 6ad0ff24f..6ad0ff24f 100755
--- a/util/travis/run-clang-tidy.py
+++ b/util/ci/run-clang-tidy.py
diff --git a/util/reorder_translation_commits.py b/util/reorder_translation_commits.py
new file mode 100755
index 000000000..465cf0b93
--- /dev/null
+++ b/util/reorder_translation_commits.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python3
+import sys
+import subprocess
+
+ret = subprocess.run(["git", "config", "rebase.instructionFormat"], capture_output=True)
+if ret.returncode != 0 or ret.stdout.decode('ascii').strip() != "(%an <%ae>) %s":
+ print("Git is using the wrong rebase instruction format, reconfigure it.")
+ exit(1)
+
+try:
+ f = open(".git/rebase-merge/git-rebase-todo", "r")
+except:
+ print("Initiate the rebase first!")
+ exit(1)
+lines = list(s.strip("\r\n") for s in f.readlines())
+f.close()
+
+for i in range(len(lines)):
+ line = lines[i]
+ if line.startswith("#") or " Translated using Weblate " not in line: continue
+ pos = line.rfind("(")
+ lang = line[pos:]
+ author = line[line.find("("):line.rfind(")", 0, pos)+1]
+ # try to grab the next commit by the same author for the same language
+ for j in range(i+1, len(lines)):
+ if lines[j].startswith("#") or not lines[j].endswith(lang): continue
+ if author in lines[j]:
+ lines.insert(i+1, "f " + lines.pop(j)[5:])
+ break
+
+with open(".git/rebase-merge/git-rebase-todo", "w") as f:
+ f.write("\n".join(lines) + "\n")
+print("You can now continue with the rebase.")
diff --git a/util/test_multiplayer.sh b/util/test_multiplayer.sh
index 9ebfe73be..176cf11d9 100755
--- a/util/test_multiplayer.sh
+++ b/util/test_multiplayer.sh
@@ -1,6 +1,6 @@
#!/bin/bash
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-gameid=minimal
+gameid=devtest
minetest=$dir/../bin/minetest
testspath=$dir/../tests
worldpath=$testspath/testworld_$gameid
diff --git a/util/travis/before_install.sh b/util/travis/before_install.sh
deleted file mode 100755
index 649486dad..000000000
--- a/util/travis/before_install.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash -e
-
-echo "Preparing for $TRAVIS_COMMIT_RANGE"
-
-. util/travis/common.sh
-
-if [[ ! -z "${CLANG_FORMAT}" ]]; then
- exit 0
-fi
-
-needs_compile || exit 0
-
-if [[ $PLATFORM == "Unix" ]] || [[ ! -z "${CLANG_TIDY}" ]]; then
- if [[ $TRAVIS_OS_NAME == "linux" ]] || [[ ! -z "${CLANG_TIDY}" ]]; then
- install_linux_deps
- else
- install_macosx_deps
- fi
-elif [[ $PLATFORM == "Win32" ]]; then
- wget http://minetest.kitsunemimi.pw/mingw-w64-i686_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz
- # buildwin32.sh detects the installed toolchain automatically
- sudo tar -xaf mingw.tar.xz -C /usr
-elif [[ $PLATFORM == "Win64" ]]; then
- wget http://minetest.kitsunemimi.pw/mingw-w64-x86_64_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz
- sed -e "s|%PREFIX%|x86_64-w64-mingw32|" \
- -e "s|%ROOTPATH%|/usr/x86_64-w64-mingw32|" \
- < util/travis/toolchain_mingw.cmake.in > util/buildbot/toolchain_mingw64.cmake
- sudo tar -xaf mingw.tar.xz -C /usr
-fi
diff --git a/util/travis/clangtidy.sh b/util/travis/clangtidy.sh
deleted file mode 100755
index ed6523b0b..000000000
--- a/util/travis/clangtidy.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash -e
-. util/travis/common.sh
-
-needs_compile || exit 0
-
-if [ -z "${CLANG_TIDY}" ]; then
- CLANG_TIDY=clang-tidy
-fi
-
-mkdir -p cmakebuild && cd cmakebuild
-cmake -DCMAKE_BUILD_TYPE=Debug \
- -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
- -DRUN_IN_PLACE=TRUE \
- -DENABLE_GETTEXT=TRUE \
- -DENABLE_SOUND=FALSE \
- -DBUILD_SERVER=TRUE ..
-make GenerateVersion
-cd ..
-
-echo "Performing clang-tidy checks..."
-./util/travis/run-clang-tidy.py \
- -clang-tidy-binary=${CLANG_TIDY} -p cmakebuild \
- -quiet -config="$(cat .clang-tidy)" \
- 'src/.*'
-
-RET=$?
-echo "Clang tidy returned $RET"
-exit $RET
diff --git a/util/travis/common.sh b/util/travis/common.sh
deleted file mode 100644
index b186632e1..000000000
--- a/util/travis/common.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/bash -e
-
-set_linux_compiler_env() {
- if [[ "${COMPILER}" == "gcc-6" ]]; then
- export CC=gcc-6
- export CXX=g++-6
- elif [[ "${COMPILER}" == "gcc-8" ]]; then
- export CC=gcc-8
- export CXX=g++-8
- elif [[ "${COMPILER}" == "clang-3.9" ]]; then
- export CC=clang-3.9
- export CXX=clang++-3.9
- elif [[ "${COMPILER}" == "clang-9" ]]; then
- export CC=clang-9
- export CXX=clang++-9
- fi
-}
-
-# Linux build only
-install_linux_deps() {
- sudo apt-get update
- sudo apt-get install libirrlicht-dev cmake libbz2-dev 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
-}
-
-# Mac OSX build only
-install_macosx_deps() {
- brew update
- brew install freetype gettext hiredis irrlicht leveldb libogg libvorbis luajit
- if brew ls | grep -q jpeg; then
- brew upgrade jpeg
- else
- brew install jpeg
- fi
- #brew upgrade postgresql
-}
-
-# Relative to git-repository root:
-TRIGGER_COMPILE_PATHS="src/.*\.(c|cpp|h)|CMakeLists.txt|cmake/Modules/|util/travis/|util/buildbot/"
-
-needs_compile() {
- RANGE="$TRAVIS_COMMIT_RANGE"
- if [[ "$(git diff --name-only $RANGE -- 2>/dev/null)" == "" ]]; then
- RANGE="$TRAVIS_COMMIT^...$TRAVIS_COMMIT"
- echo "Fixed range: $RANGE"
- fi
- git diff --name-only $RANGE -- | egrep -q "^($TRIGGER_COMPILE_PATHS)"
-}
-
diff --git a/util/travis/script.sh b/util/travis/script.sh
deleted file mode 100755
index 19aa2fdf7..000000000
--- a/util/travis/script.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/bash -e
-. util/travis/common.sh
-. util/travis/lint.sh
-
-needs_compile || exit 0
-
-if [[ ! -z "${CLANG_FORMAT}" ]]; then
- # Lint and exit CI
- perform_lint
- exit 0
-fi
-
-set_linux_compiler_env
-
-if [[ ${PLATFORM} == "Unix" ]]; then
- mkdir -p travisbuild
- cd travisbuild || exit 1
-
- CMAKE_FLAGS=''
-
- if [[ ${TRAVIS_OS_NAME} == "osx" ]]; then
- CMAKE_FLAGS+=' -DCUSTOM_GETTEXT_PATH=/usr/local/opt/gettext'
- fi
-
- if [[ -n "${FREETYPE}" ]] && [[ "${FREETYPE}" == "0" ]]; then
- CMAKE_FLAGS+=' -DENABLE_FREETYPE=0'
- fi
-
- cmake -DCMAKE_BUILD_TYPE=Debug \
- -DRUN_IN_PLACE=TRUE \
- -DENABLE_GETTEXT=TRUE \
- -DBUILD_SERVER=TRUE \
- ${CMAKE_FLAGS} ..
- make -j2
-
- echo "Running unit tests."
- CMD="../bin/minetest --run-unittests"
- if [[ "${VALGRIND}" == "1" ]]; then
- valgrind --leak-check=full --leak-check-heuristics=all --undef-value-errors=no --error-exitcode=9 ${CMD} && exit 0
- else
- ${CMD} && exit 0
- fi
-
-elif [[ $PLATFORM == Win* ]]; then
- [[ $CC == "clang" ]] && exit 1 # Not supposed to happen
- # We need to have our build directory outside of the minetest directory because
- # CMake will otherwise get very very confused with symlinks and complain that
- # something is not a subdirectory of something even if it actually is.
- # e.g.:
- # /home/travis/minetest/minetest/travisbuild/minetest
- # \/ \/ \/
- # /home/travis/minetest/minetest/travisbuild/minetest/travisbuild/minetest
- # \/ \/ \/
- # /home/travis/minetest/minetest/travisbuild/minetest/travisbuild/minetest/travisbuild/minetest
- # You get the idea.
- OLDDIR=$(pwd)
- cd ..
- export EXISTING_MINETEST_DIR=$OLDDIR
- export NO_MINETEST_GAME=1
- if [[ $PLATFORM == "Win32" ]]; then
- "$OLDDIR/util/buildbot/buildwin32.sh" travisbuild && exit 0
- elif [[ $PLATFORM == "Win64" ]]; then
- "$OLDDIR/util/buildbot/buildwin64.sh" travisbuild && exit 0
- fi
-else
- echo "Unknown platform \"${PLATFORM}\"."
- exit 1
-fi
-
diff --git a/util/travis/toolchain_mingw.cmake.in b/util/travis/toolchain_mingw.cmake.in
deleted file mode 100644
index 65f67517e..000000000
--- a/util/travis/toolchain_mingw.cmake.in
+++ /dev/null
@@ -1,18 +0,0 @@
-# Target operating system name
-set(CMAKE_SYSTEM_NAME Windows)
-
-# Compilers to use
-set(CMAKE_C_COMPILER %PREFIX%-gcc)
-set(CMAKE_CXX_COMPILER %PREFIX%-g++)
-set(CMAKE_RC_COMPILER %PREFIX%-windres)
-
-# Location of the target environment
-set(CMAKE_FIND_ROOT_PATH %ROOTPATH%)
-
-# Adjust the default behaviour of the FIND_XXX() commands:
-# search for headers and libraries in the target environment,
-# search for programs in the host environment
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-
diff --git a/util/wireshark/minetest.lua b/util/wireshark/minetest.lua
index 1346adbc3..13cd6d482 100644
--- a/util/wireshark/minetest.lua
+++ b/util/wireshark/minetest.lua
@@ -23,18 +23,39 @@
--
+-- Wireshark documentation:
+-- https://web.archive.org/web/20170711121726/https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Proto.html
+-- https://web.archive.org/web/20170711121844/https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Tree.html
+-- https://web.archive.org/web/20170711121917/https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Tvb.html
+
+
-- Table of Contents:
--- Part 1: Client command dissectors (TOSERVER_*)
--- Part 2: Server command dissectors (TOCLIENT_*)
--- Part 3: Wrapper protocol subdissectors
--- Part 4: Wrapper protocol main dissector
--- Part 5: Utility functions
+-- Part 1: Utility functions
+-- Part 2: Client command dissectors (TOSERVER_*)
+-- Part 3: Server command dissectors (TOCLIENT_*)
+-- Part 4: Wrapper protocol subdissectors
+-- Part 5: Wrapper protocol main dissector
+-- Part 6: Utility functions part 2
+
+
+-----------------------
+-- Part 1 --
+-- Utility functions --
+-----------------------
+
+-- Creates two ProtoFields to hold a length and variable-length text content
+-- lentype must be either "uint16" or "uint32"
+function minetest_field_helper(lentype, name, abbr)
+ local f_textlen = ProtoField[lentype](name .. "len", abbr .. " (length)", base.DEC)
+ local f_text = ProtoField.string(name, abbr)
+ return f_textlen, f_text
+end
--------------------------------------------
--- Part 1 --
+-- Part 2 --
-- Client command dissectors (TOSERVER_*) --
--------------------------------------------
@@ -42,34 +63,71 @@ minetest_client_commands = {}
minetest_client_obsolete = {}
-- TOSERVER_INIT
-minetest_client_commands[0x02] = { "INIT", 2 }
do
- local f_ser_fmt = ProtoField.uint8("minetest.client.init_ser_version",
+ local abbr = "minetest.client.init_"
+
+ local f_ser_fmt = ProtoField.uint8(abbr.."ser_version",
"Maximum serialization format version", base.DEC)
- local f_player_name = ProtoField.stringz("minetest.client.init_player_name", "Player Name")
- local f_password = ProtoField.stringz("minetest.client.init_password", "Password")
- local f_version = ProtoField.uint16("minetest.client.init_version", "Version", base.DEC)
-
- minetest_client_commands[0x10] = {
- "INIT_LEGACY", -- Command name
- 53, -- Minimum message length including code
- { f_ser_fmt, -- List of fields [optional]
- f_player_name,
- f_password,
- f_version },
- function(buffer, pinfo, tree, t) -- Dissector function [optional]
+ local f_comp_modes = ProtoField.uint16(abbr.."compression",
+ "Supported compression modes", base.DEC, { [0] = "No compression" })
+ local f_proto_min = ProtoField.uint16(abbr.."proto_min", "Minimum protocol version", base.DEC)
+ local f_proto_max = ProtoField.uint16(abbr.."_proto_max", "Maximum protocol version", base.DEC)
+ local f_player_namelen, f_player_name =
+ minetest_field_helper("uint16", abbr.."player_name", "Player Name")
+
+ minetest_client_commands[0x02] = {
+ "INIT", -- Command name
+ 11, -- Minimum message length including code
+ { f_ser_fmt, -- List of fields [optional]
+ f_comp_modes,
+ f_proto_min,
+ f_proto_max,
+ f_player_namelen,
+ f_player_name },
+ function(buffer, pinfo, tree, t) -- Dissector function [optional]
t:add(f_ser_fmt, buffer(2,1))
- t:add(f_player_name, buffer(3,20))
- t:add(f_password, buffer(23,28))
- t:add(f_version, buffer(51,2))
+ t:add(f_comp_modes, buffer(3,2))
+ t:add(f_proto_min, buffer(5,2))
+ t:add(f_proto_max, buffer(7,2))
+ minetest_decode_helper_ascii(buffer, t, "uint16", 9, f_player_namelen, f_player_name)
end
}
end
+-- TOSERVER_INIT_LEGACY (obsolete)
+
+minetest_client_commands[0x10] = { "INIT_LEGACY", 53 }
+minetest_client_obsolete[0x10] = true
+
-- TOSERVER_INIT2
-minetest_client_commands[0x11] = { "INIT2", 2 }
+do
+ local f_langlen, f_lang =
+ minetest_field_helper("uint16", "minetest.client.init2_language", "Language Code")
+
+ minetest_client_commands[0x11] = {
+ "INIT2",
+ 2,
+ { f_langlen,
+ f_lang },
+ function(buffer, pinfo, tree, t)
+ minetest_decode_helper_ascii(buffer, t, "uint16", 2, f_langlen, f_lang)
+ end
+ }
+end
+
+-- TOSERVER_MODCHANNEL_JOIN
+
+minetest_client_commands[0x17] = { "MODCHANNEL_JOIN", 2 }
+
+-- TOSERVER_MODCHANNEL_LEAVE
+
+minetest_client_commands[0x18] = { "MODCHANNEL_LEAVE", 2 }
+
+-- TOSERVER_MODCHANNEL_MSG
+
+minetest_client_commands[0x19] = { "MODCHANNEL_MSG", 2 }
-- TOSERVER_GETBLOCK (obsolete)
@@ -89,18 +147,24 @@ minetest_client_obsolete[0x22] = true
-- TOSERVER_PLAYERPOS
do
- local f_x = ProtoField.int32("minetest.client.playerpos_x", "Position X", base.DEC)
- local f_y = ProtoField.int32("minetest.client.playerpos_y", "Position Y", base.DEC)
- local f_z = ProtoField.int32("minetest.client.playerpos_z", "Position Z", base.DEC)
- local f_speed_x = ProtoField.int32("minetest.client.playerpos_speed_x", "Speed X", base.DEC)
- local f_speed_y = ProtoField.int32("minetest.client.playerpos_speed_y", "Speed Y", base.DEC)
- local f_speed_z = ProtoField.int32("minetest.client.playerpos_speed_z", "Speed Z", base.DEC)
- local f_pitch = ProtoField.int32("minetest.client.playerpos_pitch", "Pitch", base.DEC)
- local f_yaw = ProtoField.int32("minetest.client.playerpos_yaw", "Yaw", base.DEC)
+ local abbr = "minetest.client.playerpos_"
+
+ local f_x = ProtoField.int32(abbr.."x", "Position X", base.DEC)
+ local f_y = ProtoField.int32(abbr.."y", "Position Y", base.DEC)
+ local f_z = ProtoField.int32(abbr.."z", "Position Z", base.DEC)
+ local f_speed_x = ProtoField.int32(abbr.."speed_x", "Speed X", base.DEC)
+ local f_speed_y = ProtoField.int32(abbr.."speed_y", "Speed Y", base.DEC)
+ local f_speed_z = ProtoField.int32(abbr.."speed_z", "Speed Z", base.DEC)
+ local f_pitch = ProtoField.int32(abbr.."pitch", "Pitch", base.DEC)
+ local f_yaw = ProtoField.int32(abbr.."yaw", "Yaw", base.DEC)
+ local f_key_pressed = ProtoField.bytes(abbr.."key_pressed", "Pressed keys")
+ local f_fov = ProtoField.uint8(abbr.."fov", "FOV", base.DEC)
+ local f_wanted_range = ProtoField.uint8(abbr.."wanted_range", "Requested view range", base.DEC)
minetest_client_commands[0x23] = {
"PLAYERPOS", 34,
- { f_x, f_y, f_z, f_speed_x, f_speed_y, f_speed_z, f_pitch, f_yaw },
+ { f_x, f_y, f_z, f_speed_x, f_speed_y, f_speed_z, f_pitch, f_yaw,
+ f_key_pressed, f_fov, f_wanted_range },
function(buffer, pinfo, tree, t)
t:add(f_x, buffer(2,4))
t:add(f_y, buffer(6,4))
@@ -110,6 +174,9 @@ do
t:add(f_speed_z, buffer(22,4))
t:add(f_pitch, buffer(26,4))
t:add(f_yaw, buffer(30,4))
+ t:add(f_key_pressed, buffer(34,4))
+ t:add(f_fov, buffer(38,1))
+ t:add(f_wanted_range, buffer(39,1))
end
}
end
@@ -148,7 +215,6 @@ do
end
-- TOSERVER_DELETEDBLOCKS
--- TODO: Test this
do
local f_count = ProtoField.uint8("minetest.client.deletedblocks_count", "Count", base.DEC)
@@ -186,122 +252,25 @@ end
minetest_client_commands[0x26] = { "ADDNODE_FROM_INVENTORY", 2 }
minetest_client_obsolete[0x26] = true
--- TOSERVER_CLICK_OBJECT
--- TODO: Test this
-
-do
- local vs_button = {
- [0] = "left",
- [1] = "right"
- }
-
- local f_button = ProtoField.uint8("minetest.client.click_object_button", "Button", base.DEC, vs_button)
- local f_blockpos_x = ProtoField.int16("minetest.client.click_object_blockpos_x", "Block position X", base.DEC)
- local f_blockpos_y = ProtoField.int16("minetest.client.click_object_blockpos_y", "Block position Y", base.DEC)
- local f_blockpos_z = ProtoField.int16("minetest.client.click_object_blockpos_z", "Block position Z", base.DEC)
- local f_id = ProtoField.int16("minetest.client.click_object_id", "ID", base.DEC)
- local f_item = ProtoField.uint16("minetest.client.click_object_item", "Item", base.DEC)
-
- minetest_client_commands[0x27] = {
- "CLICK_OBJECT", 13,
- { f_button, f_blockpos_x, f_blockpos_y, f_blockpos_z, f_id, f_item },
- function(buffer, pinfo, tree, t)
- t:add(f_button, buffer(2,1))
- t:add(f_blockpos_x, buffer(3,2))
- t:add(f_blockpos_y, buffer(5,2))
- t:add(f_blockpos_z, buffer(7,2))
- t:add(f_id, buffer(9,2))
- t:add(f_item, buffer(11,2))
- end
- }
-end
-
--- TOSERVER_GROUND_ACTION
+-- TOSERVER_CLICK_OBJECT (obsolete)
-do
- local vs_action = {
- [0] = "Start digging",
- [1] = "Place block",
- [2] = "Stop digging",
- [3] = "Digging completed"
- }
+minetest_client_commands[0x27] = { "CLICK_OBJECT", 2 }
+minetest_client_obsolete[0x27] = true
- local f_action = ProtoField.uint8("minetest.client.ground_action", "Action", base.DEC, vs_action)
- local f_nodepos_undersurface_x = ProtoField.int16(
- "minetest.client.ground_action_nodepos_undersurface_x",
- "Node position (under surface) X")
- local f_nodepos_undersurface_y = ProtoField.int16(
- "minetest.client.ground_action_nodepos_undersurface_y",
- "Node position (under surface) Y")
- local f_nodepos_undersurface_z = ProtoField.int16(
- "minetest.client.ground_action_nodepos_undersurface_z",
- "Node position (under surface) Z")
- local f_nodepos_abovesurface_x = ProtoField.int16(
- "minetest.client.ground_action_nodepos_abovesurface_x",
- "Node position (above surface) X")
- local f_nodepos_abovesurface_y = ProtoField.int16(
- "minetest.client.ground_action_nodepos_abovesurface_y",
- "Node position (above surface) Y")
- local f_nodepos_abovesurface_z = ProtoField.int16(
- "minetest.client.ground_action_nodepos_abovesurface_z",
- "Node position (above surface) Z")
- local f_item = ProtoField.uint16("minetest.client.ground_action_item", "Item")
+-- TOSERVER_GROUND_ACTION (obsolete)
- minetest_client_commands[0x28] = {
- "GROUND_ACTION", 17,
- { f_action,
- f_nodepos_undersurface_x,
- f_nodepos_undersurface_y,
- f_nodepos_undersurface_z,
- f_nodepos_abovesurface_x,
- f_nodepos_abovesurface_y,
- f_nodepos_abovesurface_z,
- f_item },
- function(buffer, pinfo, tree, t)
- t:add(f_action, buffer(2,1))
- t:add(f_nodepos_undersurface_x, buffer(3,2))
- t:add(f_nodepos_undersurface_y, buffer(5,2))
- t:add(f_nodepos_undersurface_z, buffer(7,2))
- t:add(f_nodepos_abovesurface_x, buffer(9,2))
- t:add(f_nodepos_abovesurface_y, buffer(11,2))
- t:add(f_nodepos_abovesurface_z, buffer(13,2))
- t:add(f_item, buffer(15,2))
- end
- }
-end
+minetest_client_commands[0x28] = { "GROUND_ACTION", 2 }
+minetest_client_obsolete[0x28] = true
-- TOSERVER_RELEASE (obsolete)
minetest_client_commands[0x29] = { "RELEASE", 2 }
minetest_client_obsolete[0x29] = true
--- TOSERVER_SIGNTEXT (old signs)
--- TODO: Test this or mark obsolete
+-- TOSERVER_SIGNTEXT (obsolete)
-do
- local f_blockpos_x = ProtoField.int16("minetest.client.signtext_blockpos_x", "Block position X", base.DEC)
- local f_blockpos_y = ProtoField.int16("minetest.client.signtext_blockpos_y", "Block position Y", base.DEC)
- local f_blockpos_z = ProtoField.int16("minetest.client.signtext_blockpos_z", "Block position Z", base.DEC)
- local f_id = ProtoField.int16("minetest.client.signtext_id", "ID", base.DEC)
- local f_textlen = ProtoField.uint16("minetest.client.signtext_textlen", "Text length", base.DEC)
- local f_text = ProtoField.string("minetest.client.signtext_text", "Text")
-
- minetest_client_commands[0x30] = {
- "SIGNTEXT", 12,
- { f_blockpos_x, f_blockpos_y, f_blockpos_z, f_id, f_textlen, f_text },
- function(buffer, pinfo, tree, t)
- t:add(f_blockpos_x, buffer(2,2))
- t:add(f_blockpos_y, buffer(4,2))
- t:add(f_blockpos_z, buffer(6,2))
- t:add(f_id, buffer(8,2))
- t:add(f_textlen, buffer(10,2))
- local textlen = buffer(10,2):uint()
- if minetest_check_length(buffer, 12 + textlen, t) then
- t:add(f_text, buffer, buffer(12,textlen))
- end
- end
- }
-end
+minetest_client_commands[0x30] = { "SIGNTEXT", 2 }
+minetest_client_obsolete[0x30] = true
-- TOSERVER_INVENTORY_ACTION
@@ -336,53 +305,16 @@ do
}
end
--- TOSERVER_SIGNNODETEXT
+-- TOSERVER_SIGNNODETEXT (obsolete)
-do
- local f_pos_x = ProtoField.int16("minetest.client.signnodetext_pos_x", "Block position X", base.DEC)
- local f_pos_y = ProtoField.int16("minetest.client.signnodetext_pos_y", "Block position Y", base.DEC)
- local f_pos_z = ProtoField.int16("minetest.client.signnodetext_pos_z", "Block position Z", base.DEC)
- local f_textlen = ProtoField.uint16("minetest.client.signnodetext_textlen", "Text length", base.DEC)
- local f_text = ProtoField.string("minetest.client.signnodetext_text", "Text")
-
- minetest_client_commands[0x33] = {
- "SIGNNODETEXT", 10,
- { f_pos_x, f_pos_y, f_pos_z, f_textlen, f_text },
- function(buffer, pinfo, tree, t)
- t:add(f_pos_x, buffer(2,2))
- t:add(f_pos_y, buffer(4,2))
- t:add(f_pos_z, buffer(6,2))
- t:add(f_textlen, buffer(8,2))
- local textlen = buffer(8,2):uint()
- if minetest_check_length(buffer, 10 + textlen, t) then
- t:add(f_text, buffer(10, textlen))
- end
- end
- }
-end
+minetest_client_commands[0x33] = { "SIGNNODETEXT", 2 }
+minetest_client_obsolete[0x33] = true
--- TOSERVER_CLICK_ACTIVEOBJECT
-do
- local vs_button = {
- [0] = "left",
- [1] = "right"
- }
+-- TOSERVER_CLICK_ACTIVEOBJECT (obsolete)
- local f_button = ProtoField.uint8("minetest.client.click_activeobject_button", "Button", base.DEC, vs_button)
- local f_id = ProtoField.uint16("minetest.client.click_activeobject_id", "ID", base.DEC)
- local f_item = ProtoField.uint16("minetest.client.click_activeobject_item", "Item", base.DEC)
-
- minetest_client_commands[0x34] = {
- "CLICK_ACTIVEOBJECT", 7,
- { f_button, f_id, f_item },
- function(buffer, pinfo, tree, t)
- t:add(f_button, buffer(2,1))
- t:add(f_id, buffer(3,2))
- t:add(f_item, buffer(5,2))
- end
- }
-end
+minetest_client_commands[0x34] = { "CLICK_ACTIVEOBJECT", 2 }
+minetest_client_obsolete[0x34] = true
-- TOSERVER_DAMAGE
@@ -398,21 +330,10 @@ do
}
end
--- TOSERVER_PASSWORD
-
-do
- local f_old_password = ProtoField.string("minetest.client.password_old", "Old password")
- local f_new_password = ProtoField.string("minetest.client.password_new", "New password")
+-- TOSERVER_PASSWORD (obsolete)
- minetest_client_commands[0x36] = {
- "PASSWORD", 58,
- { f_old_password, f_new_password },
- function(buffer, pinfo, tree, t)
- t:add(f_old_password, buffer(2,28))
- t:add(f_new_password, buffer(30,28))
- end
- }
-end
+minetest_client_commands[0x36] = { "CLICK_ACTIVEOBJECT", 2 }
+minetest_client_obsolete[0x36] = true
-- TOSERVER_PLAYERITEM
@@ -429,16 +350,135 @@ do
end
-- TOSERVER_RESPAWN
+
minetest_client_commands[0x38] = { "RESPAWN", 2 }
-minetest_client_commands[0x39] = { "INTERACT", 2 }
+-- TOSERVER_INTERACT
+
+do
+ local abbr = "minetest.client.interact_"
+ local vs_action = {
+ [0] = "Start digging",
+ [1] = "Stop digging",
+ [2] = "Digging completed",
+ [3] = "Place block or item",
+ [4] = "Use item",
+ [5] = "Activate held item",
+ }
+ local vs_pointed_type = {
+ [0] = "Nothing",
+ [1] = "Node",
+ [2] = "Object",
+ }
+
+ local f_action = ProtoField.uint8(abbr.."action", "Action", base.DEC, vs_action)
+ local f_item = ProtoField.uint16(abbr.."item", "Item Index", base.DEC)
+ local f_plen = ProtoField.uint32(abbr.."plen", "Length of pointed thing", base.DEC)
+ local f_pointed_version = ProtoField.uint8(abbr.."pointed_version",
+ "Pointed Thing Version", base.DEC)
+ local f_pointed_type = ProtoField.uint8(abbr.."pointed_version",
+ "Pointed Thing Type", base.DEC, vs_pointed_type)
+ local f_pointed_under_x = ProtoField.int16(abbr.."pointed_under_x",
+ "Node position (under surface) X")
+ local f_pointed_under_y = ProtoField.int16(abbr.."pointed_under_y",
+ "Node position (under surface) Y")
+ local f_pointed_under_z = ProtoField.int16(abbr.."pointed_under_z",
+ "Node position (under surface) Z")
+ local f_pointed_above_x = ProtoField.int16(abbr.."pointed_above_x",
+ "Node position (above surface) X")
+ local f_pointed_above_y = ProtoField.int16(abbr.."pointed_above_y",
+ "Node position (above surface) Y")
+ local f_pointed_above_z = ProtoField.int16(abbr.."pointed_above_z",
+ "Node position (above surface) Z")
+ local f_pointed_object_id = ProtoField.int16(abbr.."pointed_object_id",
+ "Object ID")
+ -- mising: additional playerpos data just like in TOSERVER_PLAYERPOS
+
+ minetest_client_commands[0x39] = {
+ "INTERACT", 11,
+ { f_action,
+ f_item,
+ f_plen,
+ f_pointed_version,
+ f_pointed_type,
+ f_pointed_under_x,
+ f_pointed_under_y,
+ f_pointed_under_z,
+ f_pointed_above_x,
+ f_pointed_above_y,
+ f_pointed_above_z,
+ f_pointed_object_id },
+ function(buffer, pinfo, tree, t)
+ t:add(f_action, buffer(2,1))
+ t:add(f_item, buffer(3,2))
+ t:add(f_plen, buffer(5,4))
+ local plen = buffer(5,4):uint()
+ if minetest_check_length(buffer, 9 + plen, t) then
+ t:add(f_pointed_version, buffer(9,1))
+ t:add(f_pointed_type, buffer(10,1))
+ local ptype = buffer(10,1):uint()
+ if ptype == 1 then -- Node
+ t:add(f_pointed_under_x, buffer(11,2))
+ t:add(f_pointed_under_y, buffer(13,2))
+ t:add(f_pointed_under_z, buffer(15,2))
+ t:add(f_pointed_above_x, buffer(17,2))
+ t:add(f_pointed_above_x, buffer(19,2))
+ t:add(f_pointed_above_x, buffer(21,2))
+ elseif ptype == 2 then -- Object
+ t:add(f_pointed_object_id, buffer(11,2))
+ end
+ end
+ end
+ }
+end
+
+-- ...
+
minetest_client_commands[0x3a] = { "REMOVED_SOUNDS", 2 }
minetest_client_commands[0x3b] = { "NODEMETA_FIELDS", 2 }
minetest_client_commands[0x3c] = { "INVENTORY_FIELDS", 2 }
minetest_client_commands[0x40] = { "REQUEST_MEDIA", 2 }
minetest_client_commands[0x41] = { "RECEIVED_MEDIA", 2 }
+
+-- TOSERVER_BREATH (obsolete)
+
minetest_client_commands[0x42] = { "BREATH", 2 }
-minetest_client_commands[0x43] = { "CLIENT_READY", 2 }
+minetest_client_obsolete[0x42] = true
+
+-- TOSERVER_CLIENT_READY
+
+do
+ local abbr = "minetest.client.client_ready_"
+ local f_major = ProtoField.uint8(abbr.."major","Version Major")
+ local f_minor = ProtoField.uint8(abbr.."minor","Version Minor")
+ local f_patch = ProtoField.uint8(abbr.."patch","Version Patch")
+ local f_reserved = ProtoField.uint8(abbr.."reserved","Reserved")
+ local f_versionlen, f_version =
+ minetest_field_helper("uint16", abbr.."version", "Full Version String")
+ local f_formspec_ver = ProtoField.uint16(abbr.."formspec_version",
+ "Formspec API version")
+
+ minetest_client_commands[0x43] = {
+ "CLIENT_READY",
+ 8,
+ { f_major, f_minor, f_patch, f_reserved, f_versionlen,
+ f_version, f_formspec_ver },
+ function(buffer, pinfo, tree, t)
+ t:add(f_major, buffer(2,1))
+ t:add(f_minor, buffer(3,1))
+ t:add(f_patch, buffer(4,1))
+ t:add(f_reserved, buffer(5,1))
+ local off = minetest_decode_helper_ascii(buffer, t, "uint16", 6,
+ f_versionlen, f_version)
+ if off and minetest_check_length(buffer, off + 2, t) then
+ t:add(f_formspec_ver, buffer(off,2))
+ end
+ end
+ }
+end
+
+-- ...
+
minetest_client_commands[0x50] = { "FIRST_SRP", 2 }
minetest_client_commands[0x51] = { "SRP_BYTES_A", 2 }
minetest_client_commands[0x52] = { "SRP_BYTES_M", 2 }
@@ -446,41 +486,85 @@ minetest_client_commands[0x52] = { "SRP_BYTES_M", 2 }
--------------------------------------------
--- Part 2 --
+-- Part 3 --
-- Server command dissectors (TOCLIENT_*) --
--------------------------------------------
minetest_server_commands = {}
minetest_server_obsolete = {}
--- TOCLIENT_INIT
+-- TOCLIENT_HELLO
-minetest_server_commands[0x02] = {"HELLO", 2}
-minetest_server_commands[0x03] = {"AUTH_ACCEPT", 2}
-minetest_server_commands[0x04] = {"ACCEPT_SUDO_MODE", 2}
-minetest_server_commands[0x05] = {"DENY_SUDO_MODE", 2}
-minetest_server_commands[0x0A] = {"ACCESS_DENIED", 2}
+do
+ local abbr = "minetest.server.hello_"
+
+ local f_ser_fmt = ProtoField.uint8(abbr.."ser_version",
+ "Deployed serialization format version", base.DEC)
+ local f_comp_mode = ProtoField.uint16(abbr.."compression",
+ "Deployed compression mode", base.DEC, { [0] = "No compression" })
+ local f_proto = ProtoField.uint16(abbr.."proto",
+ "Deployed protocol version", base.DEC)
+ local f_auth_methods = ProtoField.bytes(abbr.."auth_modes",
+ "Supported authentication modes")
+ local f_legacy_namelen, f_legacy_name = minetest_field_helper("uint16",
+ abbr.."legacy_name", "Legacy player name for hashing")
+
+ minetest_server_commands[0x02] = {
+ "HELLO",
+ 13,
+ { f_ser_fmt, f_comp_mode, f_proto, f_auth_methods,
+ f_legacy_namelen, f_legacy_name },
+ function(buffer, pinfo, tree, t)
+ t:add(f_ser_fmt, buffer(2,1))
+ t:add(f_comp_mode, buffer(3,2))
+ t:add(f_proto, buffer(5,2))
+ t:add(f_auth_methods, buffer(7,4))
+ minetest_decode_helper_ascii(buffer, t, "uint16", 11, f_legacy_namelen, f_legacy_name)
+ end
+ }
+end
+
+-- TOCLIENT_AUTH_ACCEPT
do
- local f_version = ProtoField.uint8("minetest.server.init_version", "Deployed version", base.DEC)
- local f_pos_x = ProtoField.int16("minetest.server.init_pos_x", "Position X", base.DEC)
- local f_pos_y = ProtoField.int16("minetest.server.init_pos_y", "Position Y", base.DEC)
- local f_pos_z = ProtoField.int16("minetest.server.init_pos_x", "Position Z", base.DEC)
- local f_map_seed = ProtoField.uint64("minetest.server.init_map_seed", "Map seed", base.DEC)
-
- minetest_server_commands[0x10] = {
- "INIT", 17,
- { f_version, f_pos_x, f_pos_y, f_pos_z, f_map_seed },
+ local abbr = "minetest.server.auth_accept_"
+
+ local f_player_x = ProtoField.float(abbr.."player_x", "Player position X")
+ local f_player_y = ProtoField.float(abbr.."player_y", "Player position Y")
+ local f_player_z = ProtoField.float(abbr.."player_z", "Player position Z")
+ local f_map_seed = ProtoField.uint64(abbr.."map_seed", "Map seed")
+ local f_send_interval = ProtoField.float(abbr.."send_interval",
+ "Recommended send interval")
+ local f_sudo_auth_methods = ProtoField.bytes(abbr.."sudo_auth_methods",
+ "Supported auth methods for sudo mode")
+
+ minetest_server_commands[0x03] = {
+ "AUTH_ACCEPT",
+ 30,
+ { f_player_x, f_player_y, f_player_z, f_map_seed,
+ f_send_interval, f_sudo_auth_methods },
function(buffer, pinfo, tree, t)
- t:add(f_version, buffer(2,1))
- t:add(f_pos_x, buffer(3,2))
- t:add(f_pos_y, buffer(5,2))
- t:add(f_pos_z, buffer(7,2))
- t:add(f_map_seed, buffer(9,8))
+ t:add(f_player_x, buffer(2,4))
+ t:add(f_player_y, buffer(6,4))
+ t:add(f_player_z, buffer(10,4))
+ t:add(f_map_seed, buffer(14,8))
+ t:add(f_send_interval, buffer(22,4))
+ t:add(f_sudo_auth_methods, buffer(26,4))
end
}
end
+-- ...
+
+minetest_server_commands[0x04] = {"ACCEPT_SUDO_MODE", 2}
+minetest_server_commands[0x05] = {"DENY_SUDO_MODE", 2}
+minetest_server_commands[0x0A] = {"ACCESS_DENIED", 2}
+
+-- TOCLIENT_INIT (obsolete)
+
+minetest_server_commands[0x10] = { "INIT", 2 }
+minetest_server_obsolete[0x10] = true
+
-- TOCLIENT_BLOCKDATA
do
@@ -544,37 +628,10 @@ end
minetest_server_commands[0x23] = { "PLAYERPOS", 2 }
minetest_server_obsolete[0x23] = true
--- TOCLIENT_PLAYERINFO
+-- TOCLIENT_PLAYERINFO (obsolete)
-do
- local f_count = ProtoField.uint16("minetest.server.playerinfo_count", "Count", base.DEC)
- local f_player = ProtoField.bytes("minetest.server.playerinfo_player", "Player", base.NONE)
- local f_peer_id = ProtoField.uint16("minetest.server.playerinfo_peer_id", "Peer ID", base.DEC)
- local f_name = ProtoField.string("minetest.server.playerinfo_name", "Name")
-
- minetest_server_commands[0x24] = {
- "PLAYERINFO", 2,
- { f_count, f_player, f_peer_id, f_name },
- function(buffer, pinfo, tree, t)
- local count = 0
- local pos, index
- for pos = 2, buffer:len() - 22, 22 do -- does lua have integer division?
- count = count + 1
- end
- t:add(f_count, count):set_generated()
- t:set_len(2 + 22 * count)
- pinfo.cols.info:append(" * " .. count)
- for index = 0, count - 1 do
- local pos = 2 + 22 * index
- local t2 = t:add(f_player, buffer(pos, 22))
- t2:set_text("Player, ID: " .. buffer(pos, 2):uint()
- .. ", Name: " .. buffer(pos + 2, 20):string())
- t2:add(f_peer_id, buffer(pos, 2))
- t2:add(f_name, buffer(pos + 2, 20))
- end
- end
- }
-end
+minetest_server_commands[0x24] = { "PLAYERINFO", 2 }
+minetest_server_obsolete[0x24] = true
-- TOCLIENT_OPT_BLOCK_NOT_FOUND (obsolete)
@@ -600,100 +657,74 @@ do
}
end
--- TOCLIENT_OBJECTDATA
-
-do
- local f_player_count = ProtoField.uint16("minetest.server.objectdata_player_count",
- "Count of player positions", base.DEC)
- local f_player = ProtoField.bytes("minetest.server.objectdata_player", "Player position")
- local f_peer_id = ProtoField.uint16("minetest.server.objectdata_player_peer_id", "Peer ID")
- local f_x = ProtoField.int32("minetest.server.objectdata_player_x", "Position X", base.DEC)
- local f_y = ProtoField.int32("minetest.server.objectdata_player_y", "Position Y", base.DEC)
- local f_z = ProtoField.int32("minetest.server.objectdata_player_z", "Position Z", base.DEC)
- local f_speed_x = ProtoField.int32("minetest.server.objectdata_player_speed_x", "Speed X", base.DEC)
- local f_speed_y = ProtoField.int32("minetest.server.objectdata_player_speed_y", "Speed Y", base.DEC)
- local f_speed_z = ProtoField.int32("minetest.server.objectdata_player_speed_z", "Speed Z", base.DEC)
- local f_pitch = ProtoField.int32("minetest.server.objectdata_player_pitch", "Pitch", base.DEC)
- local f_yaw = ProtoField.int32("minetest.server.objectdata_player_yaw", "Yaw", base.DEC)
- local f_block_count = ProtoField.uint16("minetest.server.objectdata_block_count",
- "Count of blocks", base.DEC)
-
- minetest_server_commands[0x28] = {
- "OBJECTDATA", 6,
- { f_player_count, f_player, f_peer_id, f_x, f_y, f_z,
- f_speed_x, f_speed_y, f_speed_z,f_pitch, f_yaw,
- f_block_count },
- function(buffer, pinfo, tree, t)
- local t2, index, pos
-
- local player_count_pos = 2
- local player_count = buffer(player_count_pos, 2):uint()
- t:add(f_player_count, buffer(player_count_pos, 2))
-
- local block_count_pos = player_count_pos + 2 + 34 * player_count
- if not minetest_check_length(buffer, block_count_pos + 2, t) then
- return
- end
-
- for index = 0, player_count - 1 do
- pos = player_count_pos + 2 + 34 * index
- t2 = t:add(f_player, buffer(pos, 34))
- t2:set_text("Player position, ID: " .. buffer(pos, 2):uint())
- t2:add(f_peer_id, buffer(pos, 2))
- t2:add(f_x, buffer(pos + 2, 4))
- t2:add(f_y, buffer(pos + 6, 4))
- t2:add(f_z, buffer(pos + 10, 4))
- t2:add(f_speed_x, buffer(pos + 14, 4))
- t2:add(f_speed_y, buffer(pos + 18, 4))
- t2:add(f_speed_z, buffer(pos + 22, 4))
- t2:add(f_pitch, buffer(pos + 26, 4))
- t2:add(f_yaw, buffer(pos + 30, 4))
- end
-
- local block_count = buffer(block_count_pos, 2):uint()
- t:add(f_block_count, buffer(block_count_pos, 2))
+-- TOCLIENT_OBJECTDATA (obsolete)
- -- TODO: dissect blocks.
- -- NOTE: block_count > 0 is obsolete. (?)
-
- pinfo.cols.info:append(" * " .. (player_count + block_count))
- end
- }
-end
+minetest_server_commands[0x28] = { "OBJECTDATA", 2 }
+minetest_server_obsolete[0x28] = true
-- TOCLIENT_TIME_OF_DAY
do
local f_time = ProtoField.uint16("minetest.server.time_of_day", "Time", base.DEC)
+ local f_time_speed = ProtoField.float("minetest.server.time_speed", "Time Speed", base.DEC)
minetest_server_commands[0x29] = {
"TIME_OF_DAY", 4,
- { f_time },
+ { f_time, f_time_speed },
function(buffer, pinfo, tree, t)
t:add(f_time, buffer(2,2))
+ t:add(f_time_speed, buffer(4,4))
end
}
end
+-- TOCLIENT_CSM_RESTRICTION_FLAGS
+
+minetest_server_commands[0x2a] = { "CSM_RESTRICTION_FLAGS", 2 }
+
+-- TOCLIENT_PLAYER_SPEED
+
+minetest_server_commands[0x2b] = { "PLAYER_SPEED", 2 }
+
-- TOCLIENT_CHAT_MESSAGE
do
- local f_length = ProtoField.uint16("minetest.server.chat_message_length", "Length", base.DEC)
- local f_message = ProtoField.string("minetest.server.chat_message", "Message")
+ local abbr = "minetest.server.chat_message_"
+ local vs_type = {
+ [0] = "Raw",
+ [1] = "Normal",
+ [2] = "Announce",
+ [3] = "System",
+ }
- minetest_server_commands[0x30] = {
- "CHAT_MESSAGE", 4,
- { f_length, f_message },
+ local f_version = ProtoField.uint8(abbr.."version", "Version")
+ local f_type = ProtoField.uint8(abbr.."type", "Message Type", base.DEC, vs_type)
+ local f_senderlen, f_sender = minetest_field_helper("uint16", abbr.."sender",
+ "Message sender")
+ local f_messagelen, f_message = minetest_field_helper("uint16", abbr:sub(1,-2),
+ "Message")
+
+ minetest_server_commands[0x2f] = {
+ "CHAT_MESSAGE", 8,
+ { f_version, f_type, f_senderlen, f_sender,
+ f_messagelen, f_message },
function(buffer, pinfo, tree, t)
- t:add(f_length, buffer(2,2))
- local textlen = buffer(2,2):uint()
- if minetest_check_length(buffer, 4 + textlen*2, t) then
- t:add(f_message, minetest_convert_utf16(buffer(4, textlen*2), "Converted chat message"))
+ t:add(f_version, buffer(2,1))
+ t:add(f_type, buffer(3,1))
+ local off = 4
+ off = minetest_decode_helper_utf16(buffer, t, "uint16", off, f_senderlen, f_sender)
+ if off then
+ off = minetest_decode_helper_utf16(buffer, t, "uint16", off, f_messagelen, f_message)
end
end
}
end
+-- TOCLIENT_CHAT_MESSAGE_OLD (obsolete)
+
+minetest_server_commands[0x30] = { "CHAT_MESSAGE_OLD", 2 }
+minetest_server_obsolete[0x30] = true
+
-- TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD
do
@@ -842,13 +873,13 @@ end
-- TOCLIENT_HP
do
- local f_hp = ProtoField.uint8("minetest.server.hp", "Hitpoints", base.DEC)
+ local f_hp = ProtoField.uint16("minetest.server.hp", "Hitpoints", base.DEC)
minetest_server_commands[0x33] = {
- "HP", 3,
+ "HP", 4,
{ f_hp },
function(buffer, pinfo, tree, t)
- t:add(f_hp, buffer(2,1))
+ t:add(f_hp, buffer(2,2))
end
}
end
@@ -856,45 +887,35 @@ end
-- TOCLIENT_MOVE_PLAYER
do
- local f_x = ProtoField.int32("minetest.server.move_player_x", "Position X", base.DEC)
- local f_y = ProtoField.int32("minetest.server.move_player_y", "Position Y", base.DEC)
- local f_z = ProtoField.int32("minetest.server.move_player_z", "Position Z", base.DEC)
- local f_pitch = ProtoField.int32("minetest.server.move_player_pitch", "Pitch", base.DEC)
- local f_yaw = ProtoField.int32("minetest.server.move_player_yaw", "Yaw", base.DEC)
- local f_garbage = ProtoField.bytes("minetest.server.move_player_garbage", "Garbage")
+ local abbr = "minetest.server.move_player_"
+
+ local f_x = ProtoField.float(abbr.."x", "Position X")
+ local f_y = ProtoField.float(abbr.."y", "Position Y")
+ local f_z = ProtoField.float(abbr.."z", "Position Z")
+ local f_pitch = ProtoField.float(abbr.."_pitch", "Pitch")
+ local f_yaw = ProtoField.float(abbr.."yaw", "Yaw")
minetest_server_commands[0x34] = {
- "MOVE_PLAYER", 18, -- actually 22, but see below
+ "MOVE_PLAYER", 22,
{ f_x, f_y, f_z, f_pitch, f_yaw, f_garbage },
function(buffer, pinfo, tree, t)
t:add(f_x, buffer(2, 4))
t:add(f_y, buffer(6, 4))
t:add(f_z, buffer(10, 4))
-
- -- Compatibility note:
- -- Up to 2011-08-23, there was a bug in Minetest that
- -- caused the server to serialize the pitch and yaw
- -- with 2 bytes each instead of 4, creating a
- -- malformed message.
- if buffer:len() >= 22 then
- t:add(f_pitch, buffer(14, 4))
- t:add(f_yaw, buffer(18, 4))
- else
- t:add(f_garbage, buffer(14, 4))
- t:add_expert_info(PI_MALFORMED, PI_WARN, "Malformed pitch and yaw, possibly caused by a serialization bug in Minetest")
- end
+ t:add(f_pitch, buffer(14, 4))
+ t:add(f_yaw, buffer(18, 4))
end
}
end
--- TOCLIENT_ACCESS_DENIED
+-- TOCLIENT_ACCESS_DENIED_LEGACY
do
local f_reason_length = ProtoField.uint16("minetest.server.access_denied_reason_length", "Reason length", base.DEC)
local f_reason = ProtoField.string("minetest.server.access_denied_reason", "Reason")
minetest_server_commands[0x35] = {
- "ACCESS_DENIED", 4,
+ "ACCESS_DENIED_LEGACY", 4,
{ f_reason_length, f_reason },
function(buffer, pinfo, tree, t)
t:add(f_reason_length, buffer(2,2))
@@ -906,68 +927,16 @@ do
}
end
--- TOCLIENT_PLAYERITEM
+-- TOCLIENT_FOV
-do
- local f_count = ProtoField.uint16(
- "minetest.server.playeritem_count",
- "Count of players", base.DEC)
- local f_player = ProtoField.bytes(
- "minetest.server.playeritem_player",
- "Player")
- local f_peer_id = ProtoField.uint16(
- "minetest.server.playeritem_peer_id",
- "Peer ID", base.DEC)
- local f_item_length = ProtoField.uint16(
- "minetest.server.playeritem_item_length",
- "Item information length", base.DEC)
- local f_item = ProtoField.string(
- "minetest.server.playeritem_item",
- "Item information")
-
- minetest_server_commands[0x36] = {
- "PLAYERITEM", 4,
- { f_count, f_player, f_peer_id, f_item_length, f_item },
- function(buffer, pinfo, tree, t)
- local count, index, pos, item_length
-
- count = buffer(2,2):uint()
- pinfo.cols.info:append(" * " .. count)
- t:add(f_count, buffer(2,2))
-
- pos = 4
- for index = 0, count - 1 do
- if not minetest_check_length(buffer, pos + 4, t) then
- return
- end
- item_length = buffer(pos + 2, 2):uint()
- if not minetest_check_length(buffer, pos + 4 + item_length, t) then
- return
- end
-
- local t2 = t:add(f_player, buffer(pos, 4 + item_length))
- t2:set_text("Player, ID: " .. buffer(pos, 2):uint())
- t2:add(f_peer_id, buffer(pos, 2))
- t2:add(f_item_length, buffer(pos + 2, 2))
- t2:add(f_item, buffer(pos + 4, item_length))
-
- pos = pos + 4 + item_length
- end
- end
- }
-end
+minetest_server_commands[0x36] = { "FOV", 2 }
-- TOCLIENT_DEATHSCREEN
do
- local vs_set_camera_point_target = {
- [0] = "False",
- [1] = "True"
- }
-
- local f_set_camera_point_target = ProtoField.uint8(
+ local f_set_camera_point_target = ProtoField.bool(
"minetest.server.deathscreen_set_camera_point_target",
- "Set camera point target", base.DEC, vs_set_camera_point_target)
+ "Set camera point target")
local f_camera_point_target_x = ProtoField.int32(
"minetest.server.deathscreen_camera_point_target_x",
"Camera point target X", base.DEC)
@@ -991,10 +960,26 @@ do
}
end
+-- TOCLIENT_MEDIA
+
minetest_server_commands[0x38] = {"MEDIA", 2}
+
+-- TOCLIENT_TOOLDEF (obsolete)
+
minetest_server_commands[0x39] = {"TOOLDEF", 2}
+minetest_server_obsolete[0x39] = true
+
+-- TOCLIENT_NODEDEF
+
minetest_server_commands[0x3a] = {"NODEDEF", 2}
+
+-- TOCLIENT_CRAFTITEMDEF (obsolete)
+
minetest_server_commands[0x3b] = {"CRAFTITEMDEF", 2}
+minetest_server_obsolete[0x3b] = true
+
+-- ...
+
minetest_server_commands[0x3c] = {"ANNOUNCE_MEDIA", 2}
minetest_server_commands[0x3d] = {"ITEMDEF", 2}
minetest_server_commands[0x3f] = {"PLAY_SOUND", 2}
@@ -1006,7 +991,14 @@ minetest_server_commands[0x44] = {"SHOW_FORMSPEC", 2}
minetest_server_commands[0x45] = {"MOVEMENT", 2}
minetest_server_commands[0x46] = {"SPAWN_PARTICLE", 2}
minetest_server_commands[0x47] = {"ADD_PARTICLE_SPAWNER", 2}
+
+-- TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY (obsolete)
+
minetest_server_commands[0x48] = {"DELETE_PARTICLESPAWNER_LEGACY", 2}
+minetest_server_obsolete[0x48] = true
+
+-- ...
+
minetest_server_commands[0x49] = {"HUDADD", 2}
minetest_server_commands[0x4a] = {"HUDRM", 2}
minetest_server_commands[0x4b] = {"HUDCHANGE", 2}
@@ -1020,11 +1012,57 @@ minetest_server_commands[0x52] = {"EYE_OFFSET", 2}
minetest_server_commands[0x53] = {"DELETE_PARTICLESPAWNER", 2}
minetest_server_commands[0x54] = {"CLOUD_PARAMS", 2}
minetest_server_commands[0x55] = {"FADE_SOUND", 2}
-minetest_server_commands[0x61] = {"SRP_BYTES_S_B", 2}
+
+-- TOCLIENT_UPDATE_PLAYER_LIST
+
+do
+ local abbr = "minetest.server.update_player_list_"
+ local vs_type = {
+ [0] = "Init",
+ [1] = "Add",
+ [2] = "Remove",
+ }
+
+ local f_type = ProtoField.uint8(abbr.."type", "Type", base.DEC, vs_type)
+ local f_count = ProtoField.uint16(abbr.."count", "Number of players", base.DEC)
+ local f_name = ProtoField.string(abbr.."name", "Name")
+
+ minetest_server_commands[0x56] = {
+ "UPDATE_PLAYER_LIST",
+ 5,
+ { f_type, f_count, f_name },
+ function(buffer, pinfo, tree, t)
+ t:add(f_type, buffer(2,1))
+ t:add(f_count, buffer(3,2))
+ local count = buffer(3,2):uint()
+ local off = 5
+ for i = 1, count do
+ if not minetest_check_length(buffer, off + 2, t) then
+ return
+ end
+ off = minetest_decode_helper_ascii(buffer, t, "uint16", off, nil, f_name)
+ if not off then
+ return
+ end
+ end
+ end
+ }
+end
+
+-- ...
+
+minetest_server_commands[0x57] = {"MODCHANNEL_MSG", 2}
+minetest_server_commands[0x58] = {"MODCHANNEL_SIGNAL", 2}
+minetest_server_commands[0x59] = {"NODEMETA_CHANGED", 2}
+minetest_server_commands[0x5a] = {"SET_SUN", 2}
+minetest_server_commands[0x5b] = {"SET_MOON", 2}
+minetest_server_commands[0x5c] = {"SET_STARS", 2}
+minetest_server_commands[0x60] = {"SRP_BYTES_S_B", 2}
+minetest_server_commands[0x61] = {"FORMSPEC_PREPEND", 2}
------------------------------------
--- Part 3 --
+-- Part 4 --
-- Wrapper protocol subdissectors --
------------------------------------
@@ -1093,15 +1131,15 @@ function minetest_define_client_or_server_proto(is_client)
this_peer = "Client"
other_peer = "Server"
empty_message_info = "Empty message / Connect"
- commands = minetest_client_commands -- defined in Part 1
- obsolete = minetest_client_obsolete -- defined in Part 1
+ commands = minetest_client_commands -- defined in Part 2
+ obsolete = minetest_client_obsolete -- defined in Part 2
else
proto_name = "minetest.server"
this_peer = "Server"
other_peer = "Client"
empty_message_info = "Empty message"
- commands = minetest_server_commands -- defined in Part 2
- obsolete = minetest_server_obsolete -- defined in Part 2
+ commands = minetest_server_commands -- defined in Part 3
+ obsolete = minetest_server_obsolete -- defined in Part 3
end
-- Create the protocol object.
@@ -1124,8 +1162,8 @@ function minetest_define_client_or_server_proto(is_client)
for code, command_info in pairs(commands) do
local command_fields = command_info[3]
if command_fields ~= nil then
- local index, field
for index, field in ipairs(command_fields) do
+ assert(field ~= nil)
table.insert(proto.fields, field)
end
end
@@ -1199,7 +1237,7 @@ end
-------------------------------------
--- Part 4 --
+-- Part 5 --
-- Wrapper protocol main dissector --
-------------------------------------
@@ -1311,10 +1349,10 @@ end
------------------------
--- Part 5 --
--- Utility functions --
------------------------
+------------------------------
+-- Part 6 --
+-- Utility functions part 2 --
+------------------------------
-- Checks if a (sub-)Tvb is long enough to be further dissected.
-- If it is long enough, sets the dissector tree item length to min_len
@@ -1329,14 +1367,11 @@ function minetest_check_length(tvb, min_len, t)
t:set_len(min_len)
return true
- -- Tvb:reported_length_remaining() has been added in August 2011
- -- and is not yet widely available, disable for the time being
- -- TODO: uncomment at a later date
- -- TODO: when uncommenting this, also re-check if other parts of
+ -- TODO: check if other parts of
-- the dissector could benefit from reported_length_remaining
- --elseif tvb:reported_length_remaining() >= min_len then
- -- t:add_expert_info(PI_UNDECODED, PI_INFO, "Only part of this packet was captured, unable to decode.")
- -- return false
+ elseif tvb:reported_length_remaining() >= min_len then
+ t:add_expert_info(PI_UNDECODED, PI_INFO, "Only part of this packet was captured, unable to decode.")
+ return false
else
t:add_expert_info(PI_MALFORMED, PI_ERROR, "Message is too short")
@@ -1358,7 +1393,7 @@ function minetest_convert_utf16(tvb, name)
hex = ""
for pos = 0, tvb:len() - 2, 2 do
char = tvb(pos, 2):uint()
- if (char >= 0x20) and (char <= 0x7e) then
+ if (char >= 0x20 and char <= 0x7e) or char == 0x0a then
hex = hex .. string.format(" %02x", char)
else
hex = hex .. " 3F"
@@ -1373,3 +1408,37 @@ function minetest_convert_utf16(tvb, name)
end
end
+-- Decodes a variable-length string as ASCII text
+-- t_textlen, t_text should be the ProtoFields created by minetest_field_helper
+-- alternatively t_text can be a ProtoField.string and t_textlen can be nil
+-- lentype must be the type of the length field (as passed to minetest_field_helper)
+-- returns nil if length check failed
+function minetest_decode_helper_ascii(tvb, t, lentype, offset, f_textlen, f_text)
+ local n = ({uint16 = 2, uint32 = 4})[lentype]
+ assert(n)
+
+ if f_textlen then
+ t:add(f_textlen, tvb(offset, n))
+ end
+ local textlen = tvb(offset, n):uint()
+ if minetest_check_length(tvb, offset + n + textlen, t) then
+ t:add(f_text, tvb(offset + n, textlen))
+ return offset + n + textlen
+ end
+end
+
+-- Decodes a variable-length string as UTF-16 text
+-- (see minetest_decode_helper_ascii)
+function minetest_decode_helper_utf16(tvb, t, lentype, offset, f_textlen, f_text)
+ local n = ({uint16 = 2, uint32 = 4})[lentype]
+ assert(n)
+
+ if f_textlen then
+ t:add(f_textlen, tvb(offset, n))
+ end
+ local textlen = tvb(offset, n):uint() * 2
+ if minetest_check_length(tvb, offset + n + textlen, t) then
+ t:add(f_text, minetest_convert_utf16(tvb(offset + n, textlen), "UTF-16 text"))
+ return offset + n + textlen
+ end
+end